Unity renderTexture 透明通道问题的解决办法
发表于2018-05-24
大家如果在项目上用过renderTexture,会发现unity的renderTexture有个问题,就是用透明的RGBA贴图设置的时候,它会将所有的透明通道信息单独拿出来全部做个乘法叠加,depth only的渲染机制导致,会分开存储透明信息。
出现透明通道后要如何解决呢?此时只能用裁切透明的方式来做一下处理,可以给个权重值,比如大于0.2的不透明度都设置为透明,而且在开启抗锯齿的情况下,这样的opacity Clip也可以过度很柔和了。
SubShader { Tags { "Queue"="AlphaTest" "RenderType"="TransparentCutout"////裁切透明类型 } Pass { Name "FORWARD" Tags { "LightMode"="ForwardBase" } AlphaToMask On////开启后,可以在MSAA开启的时候,有柔化透明通道边缘作用 CGPROGRAM #pragma vertex vert #pragma fragment frag #define UNITY_PASS_FORWARDBASE #include "UnityCG.cginc" #pragma multi_compile_fwdbase_fullshadows #pragma multi_compile_fog #pragma only_renderers d3d9 d3d11 glcore gles gles3 metal #pragma target 3.0 uniform float4 _Color; struct VertexInput { float4 vertex : POSITION; }; struct VertexOutput { float4 pos : SV_POSITION; UNITY_FOG_COORDS(0) }; VertexOutput vert (VertexInput v) { VertexOutput o = (VertexOutput)0; o.pos = UnityObjectToClipPos( v.vertex ); UNITY_TRANSFER_FOG(o,o.pos); return o; } float4 frag(VertexOutput i) : COLOR { clip(_Color.a - 0.5);////用clip裁切透明通道 ////// Lighting: float3 finalColor = 0; fixed4 finalRGBA = fixed4(finalColor,(_Color.a) * 2.0 - 1.0); UNITY_APPLY_FOG(i.fogCoord, finalRGBA); return finalRGBA; } ENDCG }