阴影
自定义阴影
原理
平面阴影
Pass
{
Name "Shadow"
Blend SrcAlpha OneMinusSrcAlpha
Stencil//避免阴影重影
{
Ref 255
Comp NotEqual
Pass Replace
}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
};
struct v2f
{
float4 PositionClip : SV_POSITION;
};
float4 _ShadowColor;
float4 _Offset;
v2f vert (appdata v)
{
v2f o;
float4 PositinWS=mul(unity_ObjectToWorld,v.vertex);//世界坐标
float WorldPosY=PositinWS.y;//未被污染的Y值
PositinWS.y=_Offset.y;//平面
PositinWS.xz+=_Offset.xz*(WorldPosY-_Offset.y);//控制轴点
o.PositionClip = mul(UNITY_MATRIX_VP,PositinWS);//裁剪坐标
return o;
}
half4 frag (v2f i) : SV_Target
{
return _ShadowColor;
}
ENDCG
}
宏阴影
Unity自带的用来渲染阴影的三个宏,分别是SHADOW_COORDS, TRANSFER_SHADOW以及SHADOW_ATTENUATION。
//引入头文件
#include "AutoLight.cginc"
//输出结构体:
struct v2f {
//其他属性的声明
...
//声明阴影纹理坐标
SHADOW_COORDS(2)
};
//顶点Shader:
struct v2f {
//其他属性的声明
...
//声明阴影纹理坐标
SHADOW_COORDS(2)
};
//片元Shader:
fixed4 frag(v2f i) : SV_Target {
//物体表面光照、着色计算
//使用内置宏对阴影进行采样
fixed shadow = SHADOW_ATTENUATION(i);
return fixed4(ambient + (diffuse + specular) * atten * shadow, 1.0);
}
//结束
Fallback "Diffuse"
Shadow Mask
Shadowmask是一种特定于URP的阴影渲染技术。Shadowmask通过使用两个渲染通道来处理实时阴影,其中一个通道用于渲染实时阴影,另一个通道用于渲染静态阴影。这种技术有助于提高渲染性能并减少实时阴影的计算成本。
https://docs.unity3d.com/Manual/LightMode-Mixed-Shadowmask.html
https://cloud.tencent.com/developer/article/1764847
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)