unity shader不同光源位置及颜色信息

1、pass块中lightmode为vertex时,不管camera rendering path如何,光源信息存储在unity_LightPosition[4] unity_LightColor[4]中,且数据是在视图空间中;

2、lightmode为forwardbase、forawardadd的pass内,_WorldSpaceLightPos0只会含有pixel光源,在forwardbase pass内,只有场景中存在rendermode为important的pixel平行光时,才会含有有效的_WorldSpaceLightPos0和_LightColor0的组合;除了第一个平行光(forward base内执行),每一个pixel光源都会在forwardadd pass内执行一次;

3、对于既含有forwardbase又含有forwardadd的pass的shader来说,unity会在forwardbase pass内的unity_4LightPos[x,y,x]0中只放置vertex点光源,且都是在世界坐标内;

4、列出一些UnityCG.cginc中常用函数:

float3 WorldSpaceViewDir(float4 v)  输入一个模型空间中的顶点位置,返回世界空间中从该点到摄像机的观察方向。

float3 UnityWorldSpaceViewDir(float4 v)  输入一个世界空间中的顶点位置,返回世界空间中从该点到摄像机的观察方向。

float3 ObjSpaceViewDir(float4 v)   输入一个模型空间中的顶点位置,返回模型空间中从该点到摄像机的观察方向。

 float3 WorldSpaceLightDir(float4 v)    尽可用于前向渲染中。输入一个模型空间中的顶点位置,返回世界空间中从该点到光源的光照方向。内部实现使用了 UnityWorldSpaceLightDir 函数。没有被归一化。

float3 UnityWorldSpaceLightDir(float4 v)    仅可用于前向渲染中。输入一个世界空间中的顶点位置,返回世界空间中从该点到光源的光照方向。没有被归一化。

float3 ObjSpaceLightDir(float4 v)     仅可用于前向渲染中。输入一个模型空间中的顶点位置,返回模型空间中从该点到光源的光照方向。没有被归一化。

float3 UnityObjectToWorldNormal(float3 norm)    把法线方向从模型空间转换到世界空间中。

float3 UnityObjectToWorldDir(flaot3 dir)    把方向矢量从模型空间变换到世界空间中。

float3 UnityWorldToObjectDir(float dir)     把方向矢量从世界空间变换到模型空间中。

来源:CSDN,作者:Captain_CoCo_X,转载此文目的在于传递更多信息,版权归原作者所有。
原文:https://blog.csdn.net/SwenV5/article/details/55817103
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章