标签:osi for 意思 img ogr obj ret 显示 ignore
溶解/挖孔
渲染队列
半透明材质
合并反射和半透明
Unity 5.6.6f2
1.1 如何抠掉轮廓外区域(不显示)?
Unity渲染顺序
Unity渲染模式:RenderMode
Opaque - 默认, 适用于所有没有透明区域的固体物体.
Cutout - 创建透明效果(挖孔掏边效果),但该效果在不透明和透明之间过渡具有硬边。 在此模式下,没有半透明区域。 当使用Cutout来创建任何带孔效果(树叶或带有孔和破烂物的布料)。
Transparent - 适用于渲染逼真的透明材料,例如透明塑料或玻璃。 材质本身将具有透明度值(基于纹理的Alpha通道和色调的Alpha),反射和照明高光将保持完全清晰可见。
Fade - 允许透明度值完全淡出对象,包括对象可能具有的任何镜面反射高光或反射。 如果要对淡入或淡出的对象设置动画,此模式很有用。 它不适合渲染逼真的透明材料,因为反射和高光也会由淡出效果。
队列RenderOrder:“Queue”=”Geometry”或“Queue”=”Geometry±1”。指示物体所在的渲染顺序层级
Background
-1000 最先渲染。通常是地面Geometry
(default) – 2000 适用于大多数不透明对象渲染AlphaTest
– 2450 在绘制Geometry
后,渲染需要经过Alpha测试的对象队列。没有通过测试的片段被discard,移动端少用,用Alpha Blending。Transparent
– 3000 适用于任何半透明物体。Overlay
– 4000 此渲染队列用于叠加效果。 最后渲染的所有内容都应放在此处(例如镜头光晕)。RenderType
我理解的上面划分的意思就是,把一个物体的渲染用树型结构指示该shader提前归组划分,以确定渲染顺序。
fixed4 frag (v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.uv);
col.a *= _Tint.a;
clip(col.a - _AlphScale);
return col;
}
下面是用blend混合实现clip,没由clip实现溶解方便
Tags { "Queue" = "AlphaTest" "RenderType"="Opaque" "IgnoreProjector"="True"} Pass { Tags { "LightMode"="ForwardBase"} ZWrite Off Blend SrcAlpha OneMinusSrcAlpha CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" sampler2D _MainTex; float4 _MainTex_ST; float _AlphScale; struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); return o; } fixed4 frag (v2f i) : SV_Target { fixed4 col = tex2D(_MainTex, i.uv); return fixed4(col.rgb, col.a*_AlphScale); } ENDCG }
双面透明,用两个Pass剔除。Pass内部默认是剔除背面
Pass { //。。。 Cull Front //。。。 } Pass { //。。。 Cull Back //。。。 }
标签:osi for 意思 img ogr obj ret 显示 ignore
原文地址:https://www.cnblogs.com/baolong-chen/p/12353282.html