2d shader unity 阴影_[Shader]最简单的Unity投射和接收阴影代码

这篇博客介绍了一种在Unity中为2D图形实现阴影效果的自定义Shader方法。通过`FullShadowShader`,文章展示了如何创建投射和接收阴影的Pass,以及如何在顶点和片段着色器中处理光照和阴影的计算,从而实现2D对象的阴影效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Shader "Custom/FullShadowShader"

{

Properties

{

_MainTex ("Texture", 2D) = "white" {}

}

SubShader

{

Tags { "RenderType"="Opaque" }

LOD 100

Pass

{

Tags

{

"LightMode"="ForwardBase"

}

Cull Off

CGPROGRAM

#pragma vertex vert

#pragma fragment frag

#pragma multi_compile_fwdbase_fullshadows

#include "UnityCG.cginc"

#include "AutoLight.cginc"

struct appdata

{

float4 vertex : POSITION;

float2 uv : TEXCOORD0;

};

struct v2f

{

float4 vertex : SV_POSITION;

float2 uv : TEXCOORD0;

float3 wpos: TEXCOORD1;

SHADOW_COORDS(2)

};

sampler2D _MainTex;

v2f vert (appdata v)

{

v2f o;

o.vertex = UnityObjectToClipPos(v.vertex);

o.wpos = mul(unity_ObjectToWorld, v.vertex);

o.uv = v.uv;

TRANSFER_SHADOW(o);

return o;

}

fixed4 frag (v2f i) : SV_Target

{

UNITY_LIGHT_ATTENUATION(atten, i, i.wpos);

atten = saturate( atten* 2 );

fixed4 col = tex2D(_MainTex, i.uv);

return fixed4( col.rgb * atten, col.a);

}

ENDCG

}

Pass

{

Tags

{

"LightMode"="ShadowCaster"

}

Offset 1, 1

Cull Off

CGPROGRAM

#pragma vertex vert

#pragma fragment frag

#include "UnityCG.cginc"

struct app_data

{

float4 vertex : POSITION;

};

struct v2f

{

V2F_SHADOW_CASTER;

};

v2f vert (app_data v)

{

v2f o;

TRANSFER_SHADOW_CASTER(o)

return o;

}

float4 frag(v2f i) : COLOR

{

SHADOW_CASTER_FRAGMENT(i)

}

ENDCG

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值