渲染应用笔记 Vol. 1
1. 基础光照
关于Normal Map
Unity里使用Normal Map的纹理类型,会使用DXT/BC为法线贴图进行压缩,通道信息变更,需要用UnpackNormal()
函数进行解码,范围从[0,1]映射到[-1,1]。
tangent(根据u/v)和binormal的组合坐标系概念,直观的可以这样写:
half3 normal_data = UnpackNormal(normalmap);
normal_dir = normalize(tangent_dir * normal_data.x * _NormalIntensity + binormal_dir * normal_data.y * _NormalIntensity + normal_dir * normal_data.z);
也可以这样:
float3x3 TBN = float3x3(tangent_dir, binormal_dir, normal_dir);
normal_dir = normalize(mul(normal_data.xyz, TBN));
HDR&HDR以及Tone Mapping
HDR = High Dynamic Range
动态范围 = 最高亮度 / 最低亮度
Unity中的HDR设置(在Camera处开启)
- 场景渲染为HDR图像缓冲区
- 屏幕后处理:Bloom & Tonemapping
- 转化HDR->LDR
- LDR图像发送给显示器
最常用的Tone Mapping曲线是ACES(Academic Color Encording System),能提高对比度,保留暗处和亮处的细节。