unity 在透明物体上投射阴影

unity版本:2019.4.16

创建一个shader,代码如下:

Shader "ChuckLee/ARShadow"
{
	Properties
	{
		_ShadowColor("Shadow Color", Color) = (0.1, 0.1, 0.1, 0.53)
	}
		SubShader
	{
		Tags{ "RenderType" = "Transparent" "Queue" = "Geometry+1" }
		Blend SrcAlpha OneMinusSrcAlpha

		Pass
		{
			Tags{ "LightMode" = "ForwardBase" }

			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			#pragma multi_compile_fwdbase

			#include "UnityCG.cginc"
			#include "AutoLight.cginc" 

			struct appdata
			{
				float4 vertex : POSITION;
			};

			struct v2f
			{
				float4 pos : SV_POSITION;
				SHADOW_COORDS(2)
			};

			fixed4 _ShadowColor;

			v2f vert(appdata v)
			{
				v2f o;
				o.pos = UnityObjectToClipPos(v.vertex);
				TRANSFER_SHADOW(o);
				return o;
			}

			fixed4 frag(v2f i) : SV_Target
			{
				fixed atten = SHADOW_ATTENUATION(i);
				return fixed4(_ShadowColor.rgb,saturate(1 - atten)*_ShadowColor.a);
			}
			ENDCG
		}
	}
		FallBack "Diffuse"
}

将shader添加到材质球,将材质球给到被透明的物体,即地板plane

将相机ClearFlags设置为SolidColor模式即可

最终效果如下:

unity 在透明物体上投射阴影_第1张图片

你可能感兴趣的:(Unity,unity3d,vr,c#)