首页 > 代码库 > Shader 1:能接受阴影的透明shader
Shader 1:能接受阴影的透明shader
第一次接触Shader,项目需要,直接说需求吧,需要一个透明并且能接受阴影的shader。unity系统自带的shader已经满足不了了。上一段代码吧
Shader "GreenArch/Transparent Plane Shadow2" { Properties { } SubShader { Tags { "RenderType"="Opaque" } Pass { Name "DEFERRED" Tags { "LightMode"="Deferred" } CGPROGRAM #pragma vertex vert #pragma fragment frag #define UNITY_PASS_DEFERRED #include "UnityCG.cginc" #include "UnityPBSLighting.cginc" #include "UnityStandardBRDF.cginc" #pragma fragmentoption ARB_precision_hint_fastest #pragma multi_compile_shadowcaster #pragma multi_compile ___ UNITY_HDR_ON #pragma multi_compile_fog #pragma exclude_renderers gles3 metal d3d11_9x xbox360 xboxone ps3 ps4 psp2 #pragma target 3.0 struct VertexInput { float4 vertex : POSITION; float3 normal : NORMAL; }; struct VertexOutput { float4 pos : SV_POSITION; float4 posWorld : TEXCOORD0; float3 normalDir : TEXCOORD1; }; VertexOutput vert (VertexInput v) { VertexOutput o = (VertexOutput)0; o.normalDir = UnityObjectToWorldNormal(v.normal); o.posWorld = mul(unity_ObjectToWorld, v.vertex); o.pos = mul(UNITY_MATRIX_MVP, v.vertex ); return o; } void frag( VertexOutput i, out half4 outDiffuse : SV_Target0, out half4 outSpecSmoothness : SV_Target1, out half4 outNormal : SV_Target2, out half4 outEmission : SV_Target3 ) { i.normalDir = normalize(i.normalDir); float3 viewDirection = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz); float3 normalDirection = i.normalDir; float3 viewReflectDirection = reflect( -viewDirection, normalDirection ); ////// Lighting: float3 finalColor = 0; outDiffuse = half4( 0, 0, 0, 1 ); outSpecSmoothness = half4(0,0,0,0); outNormal = half4( normalDirection * 0.5 + 0.5, 1 ); outEmission = half4(0,0,0,1); #ifndef UNITY_HDR_ON outEmission.rgb = exp2(-outEmission.rgb); #endif } ENDCG } Pass { Name "FORWARD" Tags { "LightMode"="ForwardBase" } CGPROGRAM #pragma vertex vert #pragma fragment frag #define UNITY_PASS_FORWARDBASE #include "UnityCG.cginc" #include "UnityPBSLighting.cginc" #include "UnityStandardBRDF.cginc" #pragma multi_compile_fwdbase_fullshadows #pragma multi_compile_fog #pragma exclude_renderers gles3 metal d3d11_9x xbox360 xboxone ps3 ps4 psp2 #pragma target 3.0 struct VertexInput { float4 vertex : POSITION; float3 normal : NORMAL; }; struct VertexOutput { float4 pos : SV_POSITION; float4 posWorld : TEXCOORD0; float3 normalDir : TEXCOORD1; UNITY_FOG_COORDS(2) }; VertexOutput vert (VertexInput v) { VertexOutput o = (VertexOutput)0; o.normalDir = UnityObjectToWorldNormal(v.normal); o.posWorld = mul(unity_ObjectToWorld, v.vertex); o.pos = mul(UNITY_MATRIX_MVP, v.vertex ); UNITY_TRANSFER_FOG(o,o.pos); return o; } float4 frag(VertexOutput i) : COLOR { i.normalDir = normalize(i.normalDir); float3 viewDirection = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz); float3 normalDirection = i.normalDir; float3 viewReflectDirection = reflect( -viewDirection, normalDirection ); ////// Lighting: float3 finalColor = 0; fixed4 finalRGBA = fixed4(finalColor,1); UNITY_APPLY_FOG(i.fogCoord, finalRGBA); return finalRGBA; } ENDCG } } FallBack "Diffuse" CustomEditor "ShaderForgeMaterialInspector" }
Shader 1:能接受阴影的透明shader
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。