视场角(Field of View, FOV)

在游戏中,FOV可以决定摄像机在固定距离能看到多大范围的场景,FOV越大,视角越广。FOV通常又分为水平FOV与垂直FOV两种。

UE4中水平FOV(HFOV)与垂直FOV(VFOV)的转换关系为:

VFOV=2arctan(tan(HFOV2)1Aspect Ratio)

其中:

屏占比(ScreenSize)

一、基础公式

ScreenSize=BoundsRadiusDistance×ScreenHeight2×tan(FOV2)

二、计算过程分解

步骤1:计算物体在摄像机空间的投影尺寸

ProjectedSize=BoundsRadiusDistance×2

步骤2:转换为屏幕像素尺寸

ScreenSize=ProjectedSize×ScreenHeight2×tan(FOV2)

ScreenSize=0.4×10802×tan(0.5235)0.4×10802×0.5770.4×935374像素

球谐函数(Spherical Harmonics)

1. 什么是球谐函数?

球谐函数是一组定义在球面上的正交基函数。它们类似于傅里叶级数(用于分解周期函数),但不是将函数分解成正弦和余弦波,而是将定义在球面上的函数分解成一系列具有不同空间频率和方向性的基函数。

想象一下球面上的任何复杂图案(比如一个房间里的光照分布,或者一个物体的粗糙度)。球谐函数可以把这个复杂图案拆解成一个个简单的、基础的图案(基函数),每个基础图案都有一个对应的强度(系数)。把这些基础图案加起来,就能近似还原出原来的复杂图案。

2. 主要特性

3. 数学形式(简化)

实数球谐函数 Ylm(θ,ϕ) 通常用球坐标 (θ,ϕ) 表示,其中 θ 是极角 (从Z轴到向量的角度),ϕ 是方位角 (XY平面投影与X轴的角度)。

它们是勒让德多项式 (Legendre Polynomials) 和三角函数组合而成的。
例如:

这些在笛卡尔坐标系下,可以表示为 x, y, z 以及 xy, yz, zx, x^2-y^2, 3z^2-1 等多项式的组合,这也就是为什么在 SHBasisFunction3 中我们看到 InputVector.x, InputVector.y * InputVector.z, VectorSquared.x - VectorSquared.y 这样的项。

4. 投影(Encoding)与重建(Decoding)

5. 卷积(Convolution)

球谐函数的一个强大特性是,球面上的卷积操作(例如,光照函数与BRDF的卷积)在SH域中可以简化为系数的逐项相乘。
如果 FG 是两个球面函数,它们的卷积是 H=FG。在SH域中,它们的系数 hlm,flm,glm 之间存在简单的关系:
hlm=flmglmKl
其中 Kl 是一个与阶数 l 相关的常数。这个特性极大地简化了光照计算,特别是漫反射光照。

二、球谐函数在游戏图形学中的应用

球谐函数在游戏图形学中主要用于高效地表示、存储和计算低频(Lows-Frequency)的环境光照,尤其是漫反射间接光照。高频光照(如锐利高光)通常需要更高的阶数,计算量也会随之增大,所以SH更适合处理平滑变化的漫反射。

1. 预计算辐射度传输 (Precomputed Radiance Transfer, PRT)

这是SH最经典的应用之一,用于离线烘焙复杂场景的间接光照,然后在运行时高效地渲染。

2. 环境贴图(Environment Maps)的替代和压缩

传统的环境贴图(如立方体贴图)需要存储每个像素的颜色信息,而且采样成本相对较高。

3. 实时漫反射间接光照 (Real-time Diffuse Global Illumination)

尽管复杂PRT的开销较高,但简化的SH方案可以用于实时间接光照。

4. 次表面散射 (Subsurface Scattering, SSS)

SSS模拟光线进入物体内部并散射后再射出的现象(如皮肤、蜡烛)。SH可以用于近似渲染一些简单的SSS模型。

5. 体积光照 (Volumetric Lighting)

在体积光照中,光线在体积介质中散射。SH可以用于近似表示介质中各个点的光照场。

总结

球谐函数提供了一种强大的数学工具,用于在球面域中处理函数。在游戏图形学中,它们的核心价值在于:

虽然SH在高频光照(如高光)方面表现不佳,但通过与其他技术(如传统反射探针用于高光)结合使用,它成为了现代游戏引擎中实现高效且视觉效果良好的全局照明不可或缺的一部分。

参考资料

【腾讯文档】介绍UE4的FOV计算原理
https://docs.qq.com/aio/DYXFpdVZZSWZ0ZnFD

【腾讯文档】ScreenSize计算过程
https://docs.qq.com/aio/DYUNuYUxJZU1icG1s