UnityShader基础渲染知识点概况
渲染管线
前向渲染
- “LightMode” = “ForwardBase”,
延迟渲染
后处理
灯光设置
- 灯光可以设置Auto/Important/UnImportant,Auto:当满足逐像素光照则为逐像素,不满足则为逐顶点,都不满足则SH处理,Important:逐像素光照,UnImportant:逐顶点光照或SH处理。
- 光源的Cookie:灯光照下的样子,点光源使用立方体贴图CubeMap,聚光灯使用2D贴图,使用时需要将贴图类型设置为Cookie
- 平行光(Directional Light),全局平行光,
- 点光源(Point Light),球形灯光,一般用SH球谐函数在ForwardBase中就算顶点光照
- 聚光灯(Spot Light),锥形灯光,一般用SH球谐函数在ForwardBase中就算顶点光照
伽马(Gamma)
- 显示器用于颜色矫正,通常值为2.2,对颜色进行灰度,亮度矫正
打个比方,功率为50%的灰色,人眼实际感知亮度为:0.5的2.2开根 = 0.7297
而人眼认为的50%中灰色,实际功率为:0.5的2.2次幂 = 0.2176 - Unity中可选择的颜色空间线性空间,伽马空间。
常用API记录
API | 定义 | 注释 |
---|---|---|
EnergyConservationBetweenDiffuseAndSpecular | 定义于UnityStandardUtils.cgine | 漫反射和镜面反射的能力守恒函数 |
DiffuseAndSpecularFromMetallic | 定义于UnityStandardUtils.cgine | 金属性设置,其中金属性参数需要标记[Gamma],受Gamma矫正后的参数 |
UNITY_BDRP_PBS | 定义于UnityPBSLighting.cgine | 基于物理的着色,双向反射率分布函数 |
UNITY_LIGHT_ATTENUATION | 定义于AutoLight.cginc | 光照衰减值 |
#pragma multi_compile | 多重定义宏 | 如#pragma multi_compile DIRECTIONAL POINT SPOT 可以define(..)判断哪些宏被定义了,然后执行特定的逻辑,C#处可以启用/关闭Shader宏:Shader.EnableKeyword(string);Shader.DisableKeyword(string); |
ShadeSH9 | UnityCG.cginc | 球谐函数, |
ComputeScreenPos | 计算屏幕坐标 | 计算屏幕坐标:参数 顶点坐标 |
COMPUTE_EYEDEPTH | 计算视野深度 | 计算视野深度:参数 返回值(视野深度) |
UNITY_DECLARE_DEPTH_TEXTURE(_CameraDepthTexture) | 获取相机深度图 | 获取相机深度图 |
SAMPLE_DEPTH_TEXTURE_PROJ | 采样深度图 | 相当于:tex2Dproj(sampler, uv).r |
LinearEyeDepth | 线性视野深度0-1区间 | |
ddx,ddy | 求当前像素的值其临近像素上的变化率,分别对应x轴/y轴 |
常见效果实现记录
参考
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Skier!