光照计算

光照计算主要目的是 为了得到 高频 中频 低频 信息

高频信息是细节,中低频是整体控制

例如低模 本身是中低频, normal map diffuse map 增加了高频信息

高光也是高频信息

AO 遮蔽,高频

例如在计算雾效果时,简单的线性距离深度变化是 低频, 再加上基于高度变化,基于太阳光朝向颜色,基于距离的 mipmap, 增加了高频细节

光照系统分为:

预先计算

实时计算

光照系统的预先计算整体流程

  1. 设置光源,光源分为直接光和间接光,
  2. 直接光光源分为 平行光,点光 ,探照灯,区域光,基于图像的光源 3.间接光 包括物体互相反射光,来自light probe,来自环境光,来自雾,来自反射探头,间接光通常需要使用烘焙技术来计算 4.烘焙技术包括 基于 辐射度的 和 基于光线追踪 5.烘焙产生光照贴图,或者light probe 数据 6:在游戏运行时,预先计算的间接光信息,阴影信息,简化参与到物体渲染中

光照烘焙涉及到4个方面

光源,物体,材质,UV或者probe

光照烘焙贴图,基于对场景中静态物件进行UV展开,将光照信息写入

写入信息,可以包括直接光, 间接光,阴影,的颜色和强度

光照贴图还可以包括主要光方向, directional lightmap 模式中,包括了主要光方向信息,用于实时计算的时候,结合normalmap 计算diffuse color , 而不是将light map 作为环境光处理

有了主要光方向信息,结合normal map就可以进行更多的计算

整体技术涉及到:

材质系统,光源,烘焙技术

光照最终效果,涉及到阴影,直接光,间接光 三个效果

在Unity中材质的光照模型主要可以分为,lambert phong 和 最新的 pbr 物理基于着色系统

材质模型:

half lambert 0.5*(N * L) + 0.5

材质也可以toon shading normal * L normal * V 在texture 上采样光带

pbr 微表面, fresnel

光模型

Unity中的光,分为三种,bake烘焙光,实时光,和mixed模式光

Unity中的烘焙系统,有Enlighten 基于辐射度的烘焙计算,和 progressive 基于光线追踪的烘焙计算

其中enlighten 有两种烘焙,纯静态光照贴图烘焙和 实时GI烘焙

其中烘焙GI光照,可以使用光照贴图,也可以使用light probe来收集,其中光照贴图,分为纯Diffuse贴图和 支持 normal map 的 directional lightmap。

light probe 和 光照贴图区别就是,light probe 收集的是空间光照信息,而light map 收集的是 物体表面的光照信息

reflection probe 反射光照 probe

光照效果:

软影子 宽高光, AO

Unity中的光照方案:

全烘焙,只使用enlighten 烘焙光照贴图,使用纯烘焙光,光照贴图上包含 直接光,间接光,阴影信息

全实时光,使用 cascade shadow map 技术产生4级实时阴影, 使用pbr 材质模型,实时光进行光照计算

mixed light, 分为三种模式

只烘焙 间接光 ,

烘焙阴影,

烘焙距离阴影,近处使用实时阴影

subtractive 模式,直接光 间接光 阴影都烘焙,实时阴影和烘焙阴影采用 subtractive模式混合

纯 light probe + 实时光照, light probe 提供间接光照信息