유니티의 렌더 파이프라인에서는 실시간 Shadow Casting을 약간 다른 방식으로 구현한다.
Shadow Casting은 새로운 쉐이더를 스크래치부터 작성할 필요는 없다.
URP에서는 Depth Texture를 렌더링하여 Shadow Caster Pass를 사용한다.
Pass
{
Name "ShadowCaster"
Tags
{
"LightMode" = "ShadowCaster"
}
ZWrite On
ZTest LEqual
HLSLPROGRAM
#pragma vertex ShadowPassVertex
#pragma fragment ShadowPassFragment
#pragma multi_compile_instancing
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonMaterial.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SurfaceInput.hlsl"
#include "Packages/com.unity.render-pipelines.universal/Shaders/ShadowCasterPass.hlsl"
ENDHLSL
}
(1)
LightMode가 ShadowCaster로 되어있다.
그래픽 파이프라인에서 옳바른 포인트에서 돌아가도록 ShadowCasting Pass를 지정해준 것이다.
ZWrite, ZTest는 각각 Depth Buffer 읽기/쓰기 사용 유무를 나타낸 것이다.
(2)
#pragma vertex ShadowPassVertex
#pragma fragment ShadowPassFragment
둘 다 각각 Shadow 관련 쉐이더이다.
Vertex Shader에서는 오브젝트의 위치를 Screen Space에 맞게 맞춰준다.
Fragment Shader는 Shader Map 으로 렌더링하도록 한다.
(3)
#include "Packages/cohttp://m.unity.render-pipelines.universal/Shaders/ShadowCasterPass.hlsl"
ShadowCasterPass는 URP Package에서 Shaders에 있다.
위의 Vertex, Fragment 함수를 지원하고 있다.
이 쉐이더를 사용하려면 나머지 include 된 HLSL 파일들을 요구한다.
(4)
#pragma multi_compile_instancing
GPU 인스턴싱을 작동할 수 있게 해준다.

마치며
원래 Lighting And Shadows, PBR 포스팅과 함께 작성해야 할 내용이지만
분량이 맞지 않아서 따로 포스팅을 뺐다.
어렵지 않은 부분이니 쉬어가는셈 치자
'Game Dev > Unity Shader' 카테고리의 다른 글
| 20. Tessellation Shader - 다니엘 릿 쉐이더 프로젝트 (0) | 2025.10.26 |
|---|---|
| 19. Image Effects, Post-Processing Effects - 다니엘 릿 쉐이더 프로젝트 (0) | 2025.10.24 |
| 17. Physically Based Rendering (PBR) - 다니엘 릿 쉐이더 프로젝트 (0) | 2025.10.21 |
| 16. Flat Shading, Gouraud Shading, Phong Shading - 다니엘 릿 쉐이더 프로젝트 (1) | 2025.10.19 |
| 15. Lighting And Shadow - 다니엘 릿 쉐이더 프로젝트 (1) | 2025.10.18 |