shader中常见的语义与函数

来源:互联网 发布:discuz怎么调用数据 编辑:程序博客网 时间:2024/06/03 22:54

语义是告诉某个变量是做什么的,存储什么东西。

从应用阶段传递模型给顶点着色器时Unity支持的常用语义:

float4 vertex:POSITION;//告诉UNITY吧模型空间下的顶点坐标填充给vertexfloat3 normal:NORMAL;//把顶点填充给normalfloat4 texcoord:TEXCOORD0;//该顶点的纹理坐标,TEXCO0RD0表示第一组纹理坐标,依次类推fixed3 Color:Color;//顶点颜色

从顶点着色器传递给片元着色器时Unity常用的语义:

        float4 position:SV_POSITION;//表示返回的是剪裁空间下的坐标,必须有float3 temp:COLOR0;//这个语义可以有用户自己定义,一般存储颜色,不一定必须有float4 texcoord:TEXCOORD0;//输出纹理坐标,但不是必须的
片元着色器输出时Unity支持的语义:

                SV_Target //输出值将会存储到渲染目标
当把一个点从各个空间进行变换时是通过矩阵变换,而shader中有些特定方法,例如:

UNITY_MATRIX_MVP    当前模型观察投影矩阵,用于将顶点矢量从模型空间变换到裁剪空间UNITY_MATRIX_MV      当前模型观察矩阵,用于将顶点 / 方向从模型空间变换到观察空间mul(UNITY_MATRIX_MVP,v.ertex);//从模型空间到剪裁空间mul(_World2Object,v.normal);//从世界空间到到模型空间反方向调用的话就正好相反
在shader中对于光照来说,光照强度与光照到一个点上和摄像机的角度还有法线有关。关于如何得到摄像机的角度,法线方向等斗鱼特定的API
UnityCG.cginc中一些常用的函数//摄像机方向(视角方向)float3 WorldSpaceViewDir(float4 v)  根据模型空间中的顶点坐标 得到 (世界空间)从这个点到摄像机的观察方向float3 UnityWorldSpaceViewDir(float4 v) 世界空间中的顶点坐标==》世界空间从这个点到摄像机的观察方向float3 ObjSpaceViewDir(float4 v) 模型空间中的顶点坐标==》模型空间从这个点到摄像机的观察方向//光源方向float3 WorldSpaceLightDir(float4 v) 模型空间中的顶点坐标==》世界空间中从这个点到光源的方向float3 UnityWorldSpaceLightDir(float4 v) 世界空间中的顶点坐标==》世界空间中从这个点到光源的方向float3 ObjSpaceLightDir(float4 v) 模型空间中的顶点坐标==》模型空间中从这个点到光源的方向//方向转换float3 UnityObjectToWorldNormal(float3 norm) 把法线方向 模型空间==》世界空间float3 UnityObjectToWorldDir(float3 dir) 把方向 模型空间=》世界空间