空间转换
v2f vert (a2v v){
v2f o;
//将顶点从模型空间转换为裁剪空间,因为2d就是平面映射。
o.vertex = UnityObjectToClipPos(v.vertex);
//将顶点从模型空间转换为裁剪空间,因为2d就是平面映射。
o.vertex = UnityObjectToClipPos(v.vertex);
//模型坐标转为世界坐标,因为要计算绝对位置
o.pos = mul(unity_ObjectToWorld, v.vertex);
//将坐标转为裁剪空间,否则就无法正常可视化
o.pos = mul(UNITY_MATRIX_VP, o.pos);
//输出法线 = 转换后的世界坐标法线
float3 worldNormal = UnityObjectToWorldNormal(o.normal);
//从世界坐标转换到裁剪空间的坐标信息
pIn.pos = mul(UNITY_MATRIX_VP, p[0].pos);
//从世界坐标转换到裁剪空间的坐标信息
pIn1.pos = mul(UNITY_MATRIX_VP, pos);
//当前的模型观察矩阵, 用于将顶点/方向数据从模型空间变换到观察空间
float4 pos = mul(UNITY_MATRIX_MV,v.vertex)
//UNITY_MATRIX_MV的逆转置矩阵,用于将法线从模型空间变换到观察空间,也可以用于得到UNITY_MATRIX_MV的逆矩阵
float3 normal = mul((float3x3)UNITY_MATRIX_IT_MV,v.normal);
//获取模型在世界空间的法线向量 计算与输入向量方向相同的单位向量
fixed3 worldNormal = normalize(i.worldNormal);
//仅用于向前渲染中,输入一个世界空间中的顶点位置, 返回世界空间中从该点到光源的光照方向。没有被归一化
fixed3 worldLightDir = normalize(UnityWorldSpaceLightDir(i.worldPos));
//输入一个世界空间中的顶点位置,返回世界空间中从该点到摄像机的观察方向
fixed3 worldViewDir = normalize(UnityWorldSpaceViewDir(i.worldPos));
}
自定义工具函数 随机函数
//获取随机噪点值,这里使用的因子是原x+时间长度
float noise = random(o.pos.x + _Time.y * 0.4);
//噪点/随机数发生器
float random (float n) {
return frac(sin(dot(n, float2(12.9898,78.233)))*43758.5453123);
}
来源:CSDN
作者:千年奇葩
链接:https://blog.csdn.net/lengyoumo/article/details/104091416