光和渲染

烘焙光

  1. “全局照明”这类的数学模型很耗cpu, 因为它要模拟光在现实中的各种反射和与环境的各种交互,计算量大。

  2. 既然计算量大,那么就不要放在实时计算(所谓实时就是在更新每一帧时都要计算),而是预先计算好光的数据,存起来,在渲染的时候直接拿来用。

  3. Unity里有:有向光、射光、点光、区域光 四种类型。

  4. Unity 烘焙各个对象的光数据,把烘焙的光数据保存到各个对象的贴图里面。

  5. 对象的材料里的着色器用含有光数据的贴图、颜色和法线信息给对象自己着色。

  6. 可以在inspecter里配置单个光源的mode属性,决定该光源是否能使移动的GameObject产生投影。

  7. 性能方面的考虑因素:烘焙的数据占显存、着色器解码烘焙数据消耗cpu。

渲染路径

Forward Rendering:对于每个对象,每个光源都渲染一次。优点:快,可处理透明、抗锯齿。缺点:光源多的话,计算量增大。

Deferred Rendering:需要高性能的设备。

颜色空间

通常,硬件资源的限制决定了我们能够选择哪一个颜色空间。

线性颜色空间比Gamma颜色空间好,效果更真实。但是,有的移动设备和终端不支持线性颜色空间。

一件重要的事情:需要确认目标设备支持哪一个颜色空间。

High Dynamic Range (HDR) 高动态范围

摄像机的配置项。最好是和线性颜色空间一起使用,来正确处理极亮光。
一些移动设备不支持HDR。

Unity默认使用Low Dynamic Range (LDR)。红、绿、蓝分别用8-bit存储,共能表示256 x 256 x 256种不同从黑到白的颜色。16 million种。真实世界的光的颜色远远超过16 million 种,包括不可见光。HDR使用附点数表示光数据,精度更高。

HDR能够更真实的表现明暗对比效果、给粒子或其他可见光源加特效。

反射

  1. Unity 默认使用Standard Shader,它是一个physically-based shader (PBS)。PBS 计算反射时,会考虑物体的物理性质和能量守恒定律。

  2. Unity 可使用反射探针Reflection Probe来预先计算一个cubemap (6面体)保存反射数据,在着色是直接使用保存的数据。

  3. 实时反射探针(Realtime Reflection Probes)非常耗cpu, 因为每个探针要计算6次!所以一般使用烘焙反射探针(Baked Reflection Probes)。

光的类型

有向光


image.png

点光


image.png

射光
image.png

区域光


image.png

光探针 Light Probe

image.png

你可能感兴趣的:(光和渲染)