UNITY_FOG_COORDS(1) float4 vertex : SV_POSITION; }; sampler2D _MainTex; float4 _MainTex_ST; fixed _GrayEffect; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); UNITY_TRANSFER_FOG(o,o.vertex); return o; } fix...
UNITY_APPLY_FOG(i.fogCoord, col); return col; } ENDCG } } } 提示: 这里“环境光”Ao 与 “太阳光”Sun,使用相加混合,遵循光照相加混合原理。 使用相乘的方法混合光照与颜色纹理,相当于给白色模型添加彩色颜料,遵循油墨相乘原理。 参见: 想法来源 文章中提到了 用[NoScaleOffset]隐藏贴图偏移与重复 1、...
UNITY_TRANSFER_FOG(o,o.vertex); return o; } fixed4 frag (v2f i) : SV_Target { // 采样纹理 fixed4 col = tex2D(_MainTex, i.uv); // 应用模糊效果 UNITY_APPLY_FOG(i.fogCoord, col); return col; } ENDCG } } } 创建新材质,指定着色器,然后设置纹理属性为默认粒子纹理。 现在我们创...
float4 ApplyFog(float4 color , v2f i){ float viewDistance = length(_WorldSpaceCameraPos - i.worldPos); UNITY_CALC_FOG_FACTOR_RAW(viewDistance); color.rgb = lerp(unity_FogColor.rgb, color.rgb, saturate(unityFogFactor)); return color ; } 1. 2. 3. 4. 5. 6. 7. 8. 这个函数计算...
UNITY_TRANSFER_FOG(o,o.vertex); return o; } fixed4 frag (v2f i) : SV_Target { // sample the texture fixed4 col = tex2D(_MainTex, i.uv); // apply fog UNITY_APPLY_FOG(i.fogCoord, col); return _Color*col; } ENDCG
// apply fog UNITY_APPLY_FOG(i.fogCoord, col); returncol; } 照例,我们对上述代码中某些函数进行说明: 1、ComputeScreenPos函数是将经过透视投影的顶点变换到屏幕坐标系中,然后就可以使用xy/w的值作为UV取屏幕坐标系下的深度图的值。 具体细节可以参看UnityCG.cginc文件,这里也将代码贴出来: ...
//SM3.0 and PC/console: calculate fog factor and lerp fog color #define UNITY_APPLY_FOG_COLOR(coord,col,fogCol) UNITY_CALC_FOG_FACTOR(coord);UNITY_FOG_LERP_COLOR(col,fogCol,unityFogFactor) #endif #else #define UNITY_APPLY_FOG_COLOR(coord,col,fogCol) ...
UNITY_APPLY_FOG(i.fogCoord, col); // 返回经过处理后的最终色彩 returncol; } ENDCG } } } 实战案例 VertexShader 找到VertexShader,这里将通过调整顶点的 Y 轴位置实现一个简单的压扁效果 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
float4 ApplyFog (float4 color, Interpolators i) { floatviewDistance = length(_WorldSpaceCameraPos - i.worldPos); returncolor; } 然后我们使用这个信息作为雾密度函数的雾坐标,它由UNITY_CALC_FOG_FACTOR_RAW宏计算。 这个宏创建了unityFogFactor变量,我们可以使用这个变量在雾和片段颜色之间进行插值。雾的...
UNITY_APPLY_FOG(i.fogCoord, col); return fixed4(i.ase_texcoord3.x, i.ase_texcoord3.y, 0, 1); } ENDCG } } } 然后随便建一个Plane,把材质赋值上去,预览的效果是这样的: 但问题也就来了,对于这个普通的Plane,它的顶点数据中应该只有Vertex、UV这两个数据。