-
前言:
U3d URP阴影大场景,消耗大,可以使用只接受,不投射影,特别是大平面场景。
思路如下:
做一个shaderGraph,设一个颜色,让阴影投下来,可以单一调节阴影强度
步聚如下:
以2022.3.14为例,其他版本有所不同,思路都差不多,URP是主流了
- 先自定义一个函数,取得阴影强度输值,shadowAtten
自定义函数代码如下:
void MainLight_half(half3 WorldPos, out half3 Direction, out half3 Color, out half DistanceAtten, out half ShadowAtten)
{
#if SHADERGRAPH_PREVIEW
Direction = half3(0.5, 0.5, 0);
Color = half3(0.5, 0.5, 0.5);
DistanceAtten = 1;
ShadowAtten = 1;
#else
#if SHADOWS_SCREEN
half4 clipPos = TransformWorldToHClip(WorldPos);
half4 shadowCoord = ComputeScreenPos(clipPos);
#else
half4 shadowCoord = TransformWorldToShadowCoord(WorldPos);
#endif
Light mainLight = GetMainLight(shadowCoord);
Direction = mainLight.direction;
Color = mainLight.color;
DistanceAtten = mainLight.distanceAttenuation;
//ShadowAtten = mainLight.shadowAttenuation;
ShadowSamplingData shadowSamplingData = GetMainLightShadowSamplingData();
half shadowStrength = GetMainLightShadowStrength();
ShadowAtten = SampleShadowmap(shadowCoord, TEXTURE2D_ARGS(_MainLightShadowmapTexture, sampler_MainLightShadowmapTexture), shadowSamplingData, shadowStrength, false);
#endif
}
- 新建最单的ShaderGraph的unlit,再如图所示制作
- 自定义阴影颜色混合,合成到alpha上
问题总结:
1.光线必须同时照到物品与阴影面片
2.镜头需打开阴影
3.灯光需要打开阴影
4.如果第一次用shaderGraph自定义方法,注意顺序与数据参数对齐,与使用HLSL文件方法
下载地址: