光照计算
光照计算主要目的是 为了得到 高频 中频 低频 信息
高频信息是细节,中低频是整体控制
例如低模 本身是中低频, normal map diffuse map 增加了高频信息
高光也是高频信息
AO 遮蔽,高频
例如在计算雾效果时,简单的线性距离深度变化是 低频, 再加上基于高度变化,基于太阳光朝向颜色,基于距离的 mipmap, 增加了高频细节
光照系统分为:
预先计算
实时计算
光照系统的预先计算整体流程
- 设置光源,光源分为直接光和间接光,
- 直接光光源分为 平行光,点光 ,探照灯,区域光,基于图像的光源 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 提供间接光照信息