Unity ShaderLab 光照随笔
2016-12-16 11:14
169 查看
unity camera默认3种渲染路径,unity5.50里面有4种
2 forward (前向渲染,简单说就是只渲染影响力比较大的几个光源)
3 Deferred(延迟渲染,逐像素,一般在frag中处理,目前已知就是surface里默认的光照处理)
2 ForwardBase(用来渲染场景中最重要光源,pixel平行光)
3 ForwardAdd(用来渲染场景中其他pixel光源)
4 PrePassBase(以后补充)
5 PrePassFinl(以后补充)
6 Always(默认LightMode就是Always)
位置相关
前三位是光源位置如 _WorldSpaceLightPos0.xyz
最后一位比如_WorldSpaceLightPos0.w如果是0代表平行光(向量),1代表点光源(点)
具体可以看下齐次坐标
1 float4 _WorldSpaceLightPos0
2 float4 unity_4LightPosX0,unity_4LightPosY0,unity_4LightPosZ0
3 float4 unity_LightPositon[4]
颜色相关
1 floar4 _LightColor0
2 float4 unity_4LightAtten
3 float4 unity_LightColor[4]
RenderPath LightMode
VertexLit 只有Vertex的shader生效,Always生效,同时有Vertex和Always时都生效,顺序与代码顺序一致
Forward Deferred不生效,forward不生效,vertex在没有forward的时候生效,单独Always生效,
针对forward的Always生效(顺序同代码顺序),针对DeferredAlways不生效
Deferred Deferred生效,Forward没有Deferred时生效,vertex在没有deferred和forward时生效,Always不会执行
2 如果只有ForwardBase(没有ForwardAdd)
_WorldSpaceLightPos0,_LightColor0中存储最重要平行pixel光源位置颜色(如果没有pixel平行光_WorldSpaceLightPos0存储pixel点光源位置,_LightColor0中无数据)
unity_4LightPos[X,Y,Z]0和unity_LightColor[4]中包含pixel点光源数据(不含平行光)
3 如果同时有ForwardBase和ForwardAdd
对于ForwardBase
_WorldSpaceLightPos0,_LightColor0作用不变
unity_4LightPos[X,Y,Z]0和unity_LightColor[4]只包含Vertex光源数据
对于ForwardAdd
ForwardAdd执行次数取决于除主要pixel光源外pixel光源的个数
每多一个pixel光源就多执行一次ForwardAdd
这些多出的pixel光源数据都存在_WorldSpaceLightPos0,_LightColor0中
在ForwardAdd中unity_4LightPos[X,Y,Z]0不存在有效数据
camera Rendering Path
1 vertexLit(逐顶点,一般在vert中处理)2 forward (前向渲染,简单说就是只渲染影响力比较大的几个光源)
3 Deferred(延迟渲染,逐像素,一般在frag中处理,目前已知就是surface里默认的光照处理)
shader LightMode
1 Vertex(渲染vertex光源)2 ForwardBase(用来渲染场景中最重要光源,pixel平行光)
3 ForwardAdd(用来渲染场景中其他pixel光源)
4 PrePassBase(以后补充)
5 PrePassFinl(以后补充)
6 Always(默认LightMode就是Always)
内置存取光源变量
(所有这些变量都可能存在无效数据,出于效率考虑,当RenderPath切换时,无用的变量不会立刻清除)位置相关
前三位是光源位置如 _WorldSpaceLightPos0.xyz
最后一位比如_WorldSpaceLightPos0.w如果是0代表平行光(向量),1代表点光源(点)
具体可以看下齐次坐标
1 float4 _WorldSpaceLightPos0
2 float4 unity_4LightPosX0,unity_4LightPosY0,unity_4LightPosZ0
3 float4 unity_LightPositon[4]
颜色相关
1 floar4 _LightColor0
2 float4 unity_4LightAtten
3 float4 unity_LightColor[4]
渲染路径与LightMode组合时shader的执行情况
RenderPath LightModeVertexLit 只有Vertex的shader生效,Always生效,同时有Vertex和Always时都生效,顺序与代码顺序一致
Forward Deferred不生效,forward不生效,vertex在没有forward的时候生效,单独Always生效,
针对forward的Always生效(顺序同代码顺序),针对DeferredAlways不生效
Deferred Deferred生效,Forward没有Deferred时生效,vertex在没有deferred和forward时生效,Always不会执行
渲染路径与LightMode组合时光源变量的情况
VertextLit时
unity_LightPositon[4]和unity_LightColor[4]有vertex光源数据 其中position是CameraSpaceForward时
1 unity_LightPositon[4],unity_LightColor[4]在forward中不包含有效数据2 如果只有ForwardBase(没有ForwardAdd)
_WorldSpaceLightPos0,_LightColor0中存储最重要平行pixel光源位置颜色(如果没有pixel平行光_WorldSpaceLightPos0存储pixel点光源位置,_LightColor0中无数据)
unity_4LightPos[X,Y,Z]0和unity_LightColor[4]中包含pixel点光源数据(不含平行光)
3 如果同时有ForwardBase和ForwardAdd
对于ForwardBase
_WorldSpaceLightPos0,_LightColor0作用不变
unity_4LightPos[X,Y,Z]0和unity_LightColor[4]只包含Vertex光源数据
对于ForwardAdd
ForwardAdd执行次数取决于除主要pixel光源外pixel光源的个数
每多一个pixel光源就多执行一次ForwardAdd
这些多出的pixel光源数据都存在_WorldSpaceLightPos0,_LightColor0中
在ForwardAdd中unity_4LightPos[X,Y,Z]0不存在有效数据
相关文章推荐
- unity3D ShaderLab <五>漫反射光照改善技巧之使用2D ramp texture来创建一个假的BRDF(双向反射分布函数)
- Unity3D ShaderLab Half Lambert光照模型
- UnityShader从入门到放弃(五)漫反射—逐片元光照
- 用unity shaderlab 实现「影之诗」中的闪卡特效(一)
- Unity|ShaderLab笔记整理-三(逐像素漫反射+环境光)
- Unity ShaderLab 学习笔记(一)
- unity shader中点光源(point light)的光照衰减处理
- Unity Shader渲染顺序 坐标系 和光照模型
- Unity Shader入门精要学习笔记 - 第6章 开始 Unity 中的基础光照
- Unity Shader 学习笔记(十二)漫反射卷积光照模型
- Unity Shader-兰伯特光照模型与Diffuse Shader
- unity shader 入门之路(五)标准光照模型理论
- Unity ShaderLab学习总结
- <unity shader入门精要> - unity shader 中实现漫反射光照模型
- [Unity Shader]光照模型对物体的假设
- 从一个shader剖析unity混合光照和pbr
- Unity shader教程-第五课:自定义光照模型之Half Lambert模型
- UnityShader初级篇——实现逐顶点高光反射光照模型
- BindChannels纹理绑定详解[Unity ShaderLab]
- vert fragment shader在unity中如果实现光照阴影