Полупрозрачность модели при включении альфаканала - Форум Игроделов
Вс, 05 Май 2024, 18:46 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » ШЕЙДЕРЫ, МАТЕРИАЛЫ И МОДИФИКАТОРЫ » Полупрозрачность модели при включении альфаканала
Полупрозрачность модели при включении альфаканала
NapalmRainДата: Вс, 08 Июн 2014, 19:21 | Сообщение # 1
 
Сообщений: 473
Награды: 0
Репутация: 31
Статус: Offline
Есть шейдер самописный. Достаточно простой Diffuse Bump Specular.
Всё было хорошо. Но решил я добавить в него поддержку альфа канала, что создания неровных краёв объектов но объекты плюс ко всему решили также стать ещё и полупрозрачными...
примерно так:

Код шейдера:
Код
Shader "Bump_Diffuse_Specular" {
     Properties {
         _Diffuse ("Diffuse", 2D) = "white" {}
         _Specular ("Specular", 2D) = "white" {}
         _Normal ("Normal", 2D) = "bump" {}
         [HideInInspector]_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
     }
     SubShader {
         Tags {
             "Queue"="AlphaTest"
             "RenderType"="TransparentCutout"
         }
         LOD 200
         Pass {
             Name "ForwardBase"
             Tags {
                 "LightMode"="ForwardBase"
             }
             Cull Off
              
              
             Fog { Color (0.5,0.5,0.5,1) }
             CGPROGRAM
             #pragma vertex vert
             #pragma fragment frag
             #define UNITY_PASS_FORWARDBASE
             #include "UnityCG.cginc"
             #include "AutoLight.cginc"
             #pragma multi_compile_fwdbase_fullshadows
             #pragma exclude_renderers flash  
             #pragma target 3.0
             uniform float4 _LightColor0;
             uniform sampler2D _Diffuse; uniform float4 _Diffuse_ST;
             uniform sampler2D _Specular; uniform float4 _Specular_ST;
             uniform sampler2D _Normal; uniform float4 _Normal_ST;
             struct VertexInput {
                 float4 vertex : POSITION;
                 float3 normal : NORMAL;
                 float4 tangent : TANGENT;
                 float2 texcoord0 : TEXCOORD0;
             };
             struct VertexOutput {
                 float4 pos : SV_POSITION;
                 float2 uv0 : TEXCOORD0;
                 float4 posWorld : TEXCOORD1;
                 float3 normalDir : TEXCOORD2;
                 float3 tangentDir : TEXCOORD3;
                 float3 binormalDir : TEXCOORD4;
                 LIGHTING_COORDS(5,6)
             };
             VertexOutput vert (VertexInput v) {
                 VertexOutput o;
                 o.uv0 = v.texcoord0;
                 o.normalDir = mul(float4(v.normal,0), _World2Object).xyz;
                 o.tangentDir = normalize( mul( _Object2World, float4( v.tangent.xyz, 0.0 ) ).xyz );
                 o.binormalDir = normalize(cross(o.normalDir, o.tangentDir) * v.tangent.w);
                 o.posWorld = mul(_Object2World, v.vertex);
                 o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
                 TRANSFER_VERTEX_TO_FRAGMENT(o)
                 return o;
             }
             fixed4 frag(VertexOutput i) : COLOR {
                 i.normalDir = normalize(i.normalDir);
                 float3x3 tangentTransform = float3x3( i.tangentDir, i.binormalDir, i.normalDir);
                 float3 viewDirection = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz);
/////// Normals:
                 float2 node_18 = i.uv0;
                 float3 normalLocal = UnpackNormal(tex2D(_Normal,TRANSFORM_TEX(node_18.rg, _Normal))).rgb;
                 float3 normalDirection =  normalize(mul( normalLocal, tangentTransform )); // Perturbed normals
                  
                 float nSign = sign( dot( viewDirection, i.normalDir ) ); // Reverse normal if this is a backface
                 i.normalDir *= nSign;
                 normalDirection *= nSign;
                  
                 float4 node_2 = tex2D(_Diffuse,TRANSFORM_TEX(node_18.rg, _Diffuse));
                 clip(node_2.a - 0.5);
                 float3 lightDirection = normalize(_WorldSpaceLightPos0.xyz);
                 float3 halfDirection = normalize(viewDirection+lightDirection);
////// Lighting:
                 float attenuation = LIGHT_ATTENUATION(i);
                 float3 attenColor = attenuation * _LightColor0.xyz;
/////// Diffuse:
                 float NdotL = dot( normalDirection, lightDirection );
                 float3 diffuse = pow(max( 0.0, NdotL), node_2.rgb) * attenColor + UNITY_LIGHTMODEL_AMBIENT.rgb;
///////// Gloss:
                 float gloss = 0.5;
                 float specPow = exp2( gloss * 10.0+1.0);
////// Specular:
                 NdotL = max(0.0, NdotL);
                 float3 specularColor = tex2D(_Specular,TRANSFORM_TEX(node_18.rg, _Specular)).rgb;
                 float3 specular = (floor(attenuation) * _LightColor0.xyz) * pow(max(0,dot(halfDirection,normalDirection)),specPow) * specularColor;
                 float3 finalColor = 0;
                 float3 diffuseLight = diffuse;
                 finalColor += diffuseLight * node_2.rgb;
                 finalColor += specular;
/// Final Color:
                 return fixed4(finalColor,1);
             }
             ENDCG
         }
         Pass {
             Name "ForwardAdd"
             Tags {
                 "LightMode"="ForwardAdd"
             }
             Blend One One
             Cull Off
              
              
             Fog { Color (0,0,0,0) }
             CGPROGRAM
             #pragma vertex vert
             #pragma fragment frag
             #define UNITY_PASS_FORWARDADD
             #include "UnityCG.cginc"
             #include "AutoLight.cginc"
             #pragma multi_compile_fwdadd_fullshadows
             #pragma exclude_renderers flash  
             #pragma target 3.0
             uniform float4 _LightColor0;
             uniform sampler2D _Diffuse; uniform float4 _Diffuse_ST;
             uniform sampler2D _Specular; uniform float4 _Specular_ST;
             uniform sampler2D _Normal; uniform float4 _Normal_ST;
             struct VertexInput {
                 float4 vertex : POSITION;
                 float3 normal : NORMAL;
                 float4 tangent : TANGENT;
                 float2 texcoord0 : TEXCOORD0;
             };
             struct VertexOutput {
                 float4 pos : SV_POSITION;
                 float2 uv0 : TEXCOORD0;
                 float4 posWorld : TEXCOORD1;
                 float3 normalDir : TEXCOORD2;
                 float3 tangentDir : TEXCOORD3;
                 float3 binormalDir : TEXCOORD4;
                 LIGHTING_COORDS(5,6)
             };
             VertexOutput vert (VertexInput v) {
                 VertexOutput o;
                 o.uv0 = v.texcoord0;
                 o.normalDir = mul(float4(v.normal,0), _World2Object).xyz;
                 o.tangentDir = normalize( mul( _Object2World, float4( v.tangent.xyz, 0.0 ) ).xyz );
                 o.binormalDir = normalize(cross(o.normalDir, o.tangentDir) * v.tangent.w);
                 o.posWorld = mul(_Object2World, v.vertex);
                 o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
                 TRANSFER_VERTEX_TO_FRAGMENT(o)
                 return o;
             }
             fixed4 frag(VertexOutput i) : COLOR {
                 i.normalDir = normalize(i.normalDir);
                 float3x3 tangentTransform = float3x3( i.tangentDir, i.binormalDir, i.normalDir);
                 float3 viewDirection = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz);
/////// Normals:
                 float2 node_19 = i.uv0;
                 float3 normalLocal = UnpackNormal(tex2D(_Normal,TRANSFORM_TEX(node_19.rg, _Normal))).rgb;
                 float3 normalDirection =  normalize(mul( normalLocal, tangentTransform )); // Perturbed normals
                  
                 float nSign = sign( dot( viewDirection, i.normalDir ) ); // Reverse normal if this is a backface
                 i.normalDir *= nSign;
                 normalDirection *= nSign;
                  
                 float4 node_2 = tex2D(_Diffuse,TRANSFORM_TEX(node_19.rg, _Diffuse));
                 clip(node_2.a - 0.5);
                 float3 lightDirection = normalize(lerp(_WorldSpaceLightPos0.xyz, _WorldSpaceLightPos0.xyz - i.posWorld.xyz,_WorldSpaceLightPos0.w));
                 float3 halfDirection = normalize(viewDirection+lightDirection);
////// Lighting:
                 float attenuation = LIGHT_ATTENUATION(i);
                 float3 attenColor = attenuation * _LightColor0.xyz;
/////// Diffuse:
                 float NdotL = dot( normalDirection, lightDirection );
                 float3 diffuse = pow(max( 0.0, NdotL), node_2.rgb) * attenColor;
///////// Gloss:
                 float gloss = 0.5;
                 float specPow = exp2( gloss * 10.0+1.0);
////// Specular:
                 NdotL = max(0.0, NdotL);
                 float3 specularColor = tex2D(_Specular,TRANSFORM_TEX(node_19.rg, _Specular)).rgb;
                 float3 specular = attenColor * pow(max(0,dot(halfDirection,normalDirection)),specPow) * specularColor;
                 float3 finalColor = 0;
                 float3 diffuseLight = diffuse;
                 finalColor += diffuseLight * node_2.rgb;
                 finalColor += specular;
/// Final Color:
                 return fixed4(finalColor * 1,0);
             }
             ENDCG
         }
         Pass {
             Name "ShadowCollector"
             Tags {
                 "LightMode"="ShadowCollector"
             }
             Cull Off
              
             Fog {Mode Off}
             CGPROGRAM
             #pragma vertex vert
             #pragma fragment frag
             #define UNITY_PASS_SHADOWCOLLECTOR
             #define SHADOW_COLLECTOR_PASS
             #include "UnityCG.cginc"
             #include "Lighting.cginc"
             #pragma fragmentoption ARB_precision_hint_fastest
             #pragma multi_compile_shadowcollector
             #pragma exclude_renderers flash  
             #pragma target 3.0
             uniform sampler2D _Diffuse; uniform float4 _Diffuse_ST;
             struct VertexInput {
                 float4 vertex : POSITION;
                 float2 texcoord0 : TEXCOORD0;
             };
             struct VertexOutput {
                 V2F_SHADOW_COLLECTOR;
                 float2 uv0 : TEXCOORD5;
             };
             VertexOutput vert (VertexInput v) {
                 VertexOutput o;
                 o.uv0 = v.texcoord0;
                 o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
                 TRANSFER_SHADOW_COLLECTOR(o)
                 return o;
             }
             fixed4 frag(VertexOutput i) : COLOR {
                 float2 node_20 = i.uv0;
                 float4 node_2 = tex2D(_Diffuse,TRANSFORM_TEX(node_20.rg, _Diffuse));
                 clip(node_2.a - 0.5);
                 SHADOW_COLLECTOR_FRAGMENT(i)
             }
             ENDCG
         }
         Pass {
             Name "ShadowCaster"
             Tags {
                 "LightMode"="ShadowCaster"
             }
             Cull Off
             Offset 1, 1
              
             Fog {Mode Off}
             CGPROGRAM
             #pragma vertex vert
             #pragma fragment frag
             #define UNITY_PASS_SHADOWCASTER
             #include "UnityCG.cginc"
             #include "Lighting.cginc"
             #pragma fragmentoption ARB_precision_hint_fastest
             #pragma multi_compile_shadowcaster
             #pragma exclude_renderers flash  
             #pragma target 3.0
             uniform sampler2D _Diffuse; uniform float4 _Diffuse_ST;
             struct VertexInput {
                 float4 vertex : POSITION;
                 float2 texcoord0 : TEXCOORD0;
             };
             struct VertexOutput {
                 V2F_SHADOW_CASTER;
                 float2 uv0 : TEXCOORD1;
             };
             VertexOutput vert (VertexInput v) {
                 VertexOutput o;
                 o.uv0 = v.texcoord0;
                 o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
                 TRANSFER_SHADOW_CASTER(o)
                 return o;
             }
             fixed4 frag(VertexOutput i) : COLOR {
                 float2 node_21 = i.uv0;
                 float4 node_2 = tex2D(_Diffuse,TRANSFORM_TEX(node_21.rg, _Diffuse));
                 clip(node_2.a - 0.5);
                 SHADOW_CASTER_FRAGMENT(i)
             }
             ENDCG
         }
     }
     FallBack "Diffuse"
     CustomEditor "ShaderForgeMaterialInspector"
}

Код написан не в ручну. Создаю шейдеры шейдер форжем, в нём это выглядит так:

Прошу подсказать, где я что сделал неправильно и как это исправить?
Заранее благодарю!

Добавлено (08 Июн 2014, 18:32)
---------------------------------------------
Проблема исчезает, при отключении в шейдере поддержки двусторонних полигонов, но, хотелось сохранить и двусторонность и альфа... если это конечно возможно

Добавлено (08 Июн 2014, 19:21)
---------------------------------------------
Вопрос снят. Путём научного тыка настроил.

 
СообщениеЕсть шейдер самописный. Достаточно простой Diffuse Bump Specular.
Всё было хорошо. Но решил я добавить в него поддержку альфа канала, что создания неровных краёв объектов но объекты плюс ко всему решили также стать ещё и полупрозрачными...
примерно так:

Код шейдера:
Код
Shader "Bump_Diffuse_Specular" {
     Properties {
         _Diffuse ("Diffuse", 2D) = "white" {}
         _Specular ("Specular", 2D) = "white" {}
         _Normal ("Normal", 2D) = "bump" {}
         [HideInInspector]_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
     }
     SubShader {
         Tags {
             "Queue"="AlphaTest"
             "RenderType"="TransparentCutout"
         }
         LOD 200
         Pass {
             Name "ForwardBase"
             Tags {
                 "LightMode"="ForwardBase"
             }
             Cull Off
              
              
             Fog { Color (0.5,0.5,0.5,1) }
             CGPROGRAM
             #pragma vertex vert
             #pragma fragment frag
             #define UNITY_PASS_FORWARDBASE
             #include "UnityCG.cginc"
             #include "AutoLight.cginc"
             #pragma multi_compile_fwdbase_fullshadows
             #pragma exclude_renderers flash  
             #pragma target 3.0
             uniform float4 _LightColor0;
             uniform sampler2D _Diffuse; uniform float4 _Diffuse_ST;
             uniform sampler2D _Specular; uniform float4 _Specular_ST;
             uniform sampler2D _Normal; uniform float4 _Normal_ST;
             struct VertexInput {
                 float4 vertex : POSITION;
                 float3 normal : NORMAL;
                 float4 tangent : TANGENT;
                 float2 texcoord0 : TEXCOORD0;
             };
             struct VertexOutput {
                 float4 pos : SV_POSITION;
                 float2 uv0 : TEXCOORD0;
                 float4 posWorld : TEXCOORD1;
                 float3 normalDir : TEXCOORD2;
                 float3 tangentDir : TEXCOORD3;
                 float3 binormalDir : TEXCOORD4;
                 LIGHTING_COORDS(5,6)
             };
             VertexOutput vert (VertexInput v) {
                 VertexOutput o;
                 o.uv0 = v.texcoord0;
                 o.normalDir = mul(float4(v.normal,0), _World2Object).xyz;
                 o.tangentDir = normalize( mul( _Object2World, float4( v.tangent.xyz, 0.0 ) ).xyz );
                 o.binormalDir = normalize(cross(o.normalDir, o.tangentDir) * v.tangent.w);
                 o.posWorld = mul(_Object2World, v.vertex);
                 o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
                 TRANSFER_VERTEX_TO_FRAGMENT(o)
                 return o;
             }
             fixed4 frag(VertexOutput i) : COLOR {
                 i.normalDir = normalize(i.normalDir);
                 float3x3 tangentTransform = float3x3( i.tangentDir, i.binormalDir, i.normalDir);
                 float3 viewDirection = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz);
/////// Normals:
                 float2 node_18 = i.uv0;
                 float3 normalLocal = UnpackNormal(tex2D(_Normal,TRANSFORM_TEX(node_18.rg, _Normal))).rgb;
                 float3 normalDirection =  normalize(mul( normalLocal, tangentTransform )); // Perturbed normals
                  
                 float nSign = sign( dot( viewDirection, i.normalDir ) ); // Reverse normal if this is a backface
                 i.normalDir *= nSign;
                 normalDirection *= nSign;
                  
                 float4 node_2 = tex2D(_Diffuse,TRANSFORM_TEX(node_18.rg, _Diffuse));
                 clip(node_2.a - 0.5);
                 float3 lightDirection = normalize(_WorldSpaceLightPos0.xyz);
                 float3 halfDirection = normalize(viewDirection+lightDirection);
////// Lighting:
                 float attenuation = LIGHT_ATTENUATION(i);
                 float3 attenColor = attenuation * _LightColor0.xyz;
/////// Diffuse:
                 float NdotL = dot( normalDirection, lightDirection );
                 float3 diffuse = pow(max( 0.0, NdotL), node_2.rgb) * attenColor + UNITY_LIGHTMODEL_AMBIENT.rgb;
///////// Gloss:
                 float gloss = 0.5;
                 float specPow = exp2( gloss * 10.0+1.0);
////// Specular:
                 NdotL = max(0.0, NdotL);
                 float3 specularColor = tex2D(_Specular,TRANSFORM_TEX(node_18.rg, _Specular)).rgb;
                 float3 specular = (floor(attenuation) * _LightColor0.xyz) * pow(max(0,dot(halfDirection,normalDirection)),specPow) * specularColor;
                 float3 finalColor = 0;
                 float3 diffuseLight = diffuse;
                 finalColor += diffuseLight * node_2.rgb;
                 finalColor += specular;
/// Final Color:
                 return fixed4(finalColor,1);
             }
             ENDCG
         }
         Pass {
             Name "ForwardAdd"
             Tags {
                 "LightMode"="ForwardAdd"
             }
             Blend One One
             Cull Off
              
              
             Fog { Color (0,0,0,0) }
             CGPROGRAM
             #pragma vertex vert
             #pragma fragment frag
             #define UNITY_PASS_FORWARDADD
             #include "UnityCG.cginc"
             #include "AutoLight.cginc"
             #pragma multi_compile_fwdadd_fullshadows
             #pragma exclude_renderers flash  
             #pragma target 3.0
             uniform float4 _LightColor0;
             uniform sampler2D _Diffuse; uniform float4 _Diffuse_ST;
             uniform sampler2D _Specular; uniform float4 _Specular_ST;
             uniform sampler2D _Normal; uniform float4 _Normal_ST;
             struct VertexInput {
                 float4 vertex : POSITION;
                 float3 normal : NORMAL;
                 float4 tangent : TANGENT;
                 float2 texcoord0 : TEXCOORD0;
             };
             struct VertexOutput {
                 float4 pos : SV_POSITION;
                 float2 uv0 : TEXCOORD0;
                 float4 posWorld : TEXCOORD1;
                 float3 normalDir : TEXCOORD2;
                 float3 tangentDir : TEXCOORD3;
                 float3 binormalDir : TEXCOORD4;
                 LIGHTING_COORDS(5,6)
             };
             VertexOutput vert (VertexInput v) {
                 VertexOutput o;
                 o.uv0 = v.texcoord0;
                 o.normalDir = mul(float4(v.normal,0), _World2Object).xyz;
                 o.tangentDir = normalize( mul( _Object2World, float4( v.tangent.xyz, 0.0 ) ).xyz );
                 o.binormalDir = normalize(cross(o.normalDir, o.tangentDir) * v.tangent.w);
                 o.posWorld = mul(_Object2World, v.vertex);
                 o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
                 TRANSFER_VERTEX_TO_FRAGMENT(o)
                 return o;
             }
             fixed4 frag(VertexOutput i) : COLOR {
                 i.normalDir = normalize(i.normalDir);
                 float3x3 tangentTransform = float3x3( i.tangentDir, i.binormalDir, i.normalDir);
                 float3 viewDirection = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz);
/////// Normals:
                 float2 node_19 = i.uv0;
                 float3 normalLocal = UnpackNormal(tex2D(_Normal,TRANSFORM_TEX(node_19.rg, _Normal))).rgb;
                 float3 normalDirection =  normalize(mul( normalLocal, tangentTransform )); // Perturbed normals
                  
                 float nSign = sign( dot( viewDirection, i.normalDir ) ); // Reverse normal if this is a backface
                 i.normalDir *= nSign;
                 normalDirection *= nSign;
                  
                 float4 node_2 = tex2D(_Diffuse,TRANSFORM_TEX(node_19.rg, _Diffuse));
                 clip(node_2.a - 0.5);
                 float3 lightDirection = normalize(lerp(_WorldSpaceLightPos0.xyz, _WorldSpaceLightPos0.xyz - i.posWorld.xyz,_WorldSpaceLightPos0.w));
                 float3 halfDirection = normalize(viewDirection+lightDirection);
////// Lighting:
                 float attenuation = LIGHT_ATTENUATION(i);
                 float3 attenColor = attenuation * _LightColor0.xyz;
/////// Diffuse:
                 float NdotL = dot( normalDirection, lightDirection );
                 float3 diffuse = pow(max( 0.0, NdotL), node_2.rgb) * attenColor;
///////// Gloss:
                 float gloss = 0.5;
                 float specPow = exp2( gloss * 10.0+1.0);
////// Specular:
                 NdotL = max(0.0, NdotL);
                 float3 specularColor = tex2D(_Specular,TRANSFORM_TEX(node_19.rg, _Specular)).rgb;
                 float3 specular = attenColor * pow(max(0,dot(halfDirection,normalDirection)),specPow) * specularColor;
                 float3 finalColor = 0;
                 float3 diffuseLight = diffuse;
                 finalColor += diffuseLight * node_2.rgb;
                 finalColor += specular;
/// Final Color:
                 return fixed4(finalColor * 1,0);
             }
             ENDCG
         }
         Pass {
             Name "ShadowCollector"
             Tags {
                 "LightMode"="ShadowCollector"
             }
             Cull Off
              
             Fog {Mode Off}
             CGPROGRAM
             #pragma vertex vert
             #pragma fragment frag
             #define UNITY_PASS_SHADOWCOLLECTOR
             #define SHADOW_COLLECTOR_PASS
             #include "UnityCG.cginc"
             #include "Lighting.cginc"
             #pragma fragmentoption ARB_precision_hint_fastest
             #pragma multi_compile_shadowcollector
             #pragma exclude_renderers flash  
             #pragma target 3.0
             uniform sampler2D _Diffuse; uniform float4 _Diffuse_ST;
             struct VertexInput {
                 float4 vertex : POSITION;
                 float2 texcoord0 : TEXCOORD0;
             };
             struct VertexOutput {
                 V2F_SHADOW_COLLECTOR;
                 float2 uv0 : TEXCOORD5;
             };
             VertexOutput vert (VertexInput v) {
                 VertexOutput o;
                 o.uv0 = v.texcoord0;
                 o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
                 TRANSFER_SHADOW_COLLECTOR(o)
                 return o;
             }
             fixed4 frag(VertexOutput i) : COLOR {
                 float2 node_20 = i.uv0;
                 float4 node_2 = tex2D(_Diffuse,TRANSFORM_TEX(node_20.rg, _Diffuse));
                 clip(node_2.a - 0.5);
                 SHADOW_COLLECTOR_FRAGMENT(i)
             }
             ENDCG
         }
         Pass {
             Name "ShadowCaster"
             Tags {
                 "LightMode"="ShadowCaster"
             }
             Cull Off
             Offset 1, 1
              
             Fog {Mode Off}
             CGPROGRAM
             #pragma vertex vert
             #pragma fragment frag
             #define UNITY_PASS_SHADOWCASTER
             #include "UnityCG.cginc"
             #include "Lighting.cginc"
             #pragma fragmentoption ARB_precision_hint_fastest
             #pragma multi_compile_shadowcaster
             #pragma exclude_renderers flash  
             #pragma target 3.0
             uniform sampler2D _Diffuse; uniform float4 _Diffuse_ST;
             struct VertexInput {
                 float4 vertex : POSITION;
                 float2 texcoord0 : TEXCOORD0;
             };
             struct VertexOutput {
                 V2F_SHADOW_CASTER;
                 float2 uv0 : TEXCOORD1;
             };
             VertexOutput vert (VertexInput v) {
                 VertexOutput o;
                 o.uv0 = v.texcoord0;
                 o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
                 TRANSFER_SHADOW_CASTER(o)
                 return o;
             }
             fixed4 frag(VertexOutput i) : COLOR {
                 float2 node_21 = i.uv0;
                 float4 node_2 = tex2D(_Diffuse,TRANSFORM_TEX(node_21.rg, _Diffuse));
                 clip(node_2.a - 0.5);
                 SHADOW_CASTER_FRAGMENT(i)
             }
             ENDCG
         }
     }
     FallBack "Diffuse"
     CustomEditor "ShaderForgeMaterialInspector"
}

Код написан не в ручну. Создаю шейдеры шейдер форжем, в нём это выглядит так:

Прошу подсказать, где я что сделал неправильно и как это исправить?
Заранее благодарю!

Добавлено (08 Июн 2014, 18:32)
---------------------------------------------
Проблема исчезает, при отключении в шейдере поддержки двусторонних полигонов, но, хотелось сохранить и двусторонность и альфа... если это конечно возможно

Добавлено (08 Июн 2014, 19:21)
---------------------------------------------
Вопрос снят. Путём научного тыка настроил.


Автор - NapalmRain
Дата добавления - 08 Июн 2014 в 19:21
Форум Игроделов » UNITY3D » ШЕЙДЕРЫ, МАТЕРИАЛЫ И МОДИФИКАТОРЫ » Полупрозрачность модели при включении альфаканала
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024