unity shader 空间坐标转换

萝らか妹 提交于 2020-01-27 11:53:46
空间转换
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);
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!