본 게시물은 Unity Korea 채널의 URP Shader Training 시리즈와 강의에 사용된 도큐먼트를 공부하며 정리한 게시물입니다.
Shader란, 간단하게 말해서 화면에 어떻게 그릴지 정의 된 코드, 즉 프로그래밍 된 코드를 뜻한다.
화면에 배열된 픽셀들이 어떤 색으로 그려질지를 정의된 코드로 각 픽셀별 RGBA 값을 어떻게 지정할 것인지를 계산하는 과정이다.
Unity에서 Shader 작성에 사용되는 건 Shader Lab이며, Universal Rendering Pipeline에서 는 CG와 HLSL을 모두 지원하지만 해당 강의에선 HLSL을 기본으로 설명한다.
우선 해당 프로젝트가 URP로 설정되어 있는지 확인하고 쉐이더 생성을 진행한다.
![]()
쉐이더 생성은 C# 스크립트를 생성하는 것과 비슷하게
Project창 우클릭 - Create - Shader - @@Shader를 선택하면 Shader 생성이 완료된다.
![]()
강의에서는 Standard Surface Shdaer를 생성했다. 이제 생성한 쉐이더를 열어서, 안의 내용을 전부 지우고 강의 교안의 코드 넣어준다.
// Shader 시작. 셰이더의 폴더와 이름을 여기서 결정합니다.
Shader "URPTraining/URPBasic"
{
Properties
{
// Properties Block : 셰이더에서 사용할 변수를 선언하고 이를 material inspector에 노출시킵니다
}
SubShader
{
Tags
{
//Render type과 Render Queue를 여기서 결정합니다.
"RenderPipeline" = "UniversalPipeline"
"RederType" = "Opaque"
"Queue" = "Geometry"
}
Pass
{
Name "Universal Forward"
Tags { "LightMode" = "UniversalForward"}
HLSLPROGRAM
#pragma prefer_hlslcc gles
#pragma exclude_renderers d3d11_9x
#pragma vertex vert
#pragma fragment frag
//cg shader는 .cginc를 hlsl shader는 .hlsl을 include하게 됩니다.
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
//vertex buffer에서 읽어올 정보를 선언합니다.
struct VertexInput
{
float4 vertex : POSITION;
};
//보간기를 통해 버텍스 셰이더에서 픽셀 셰이더로 전달할 정보를 선언합니다.
struct VertexOutput
{
float4 vertex : SV_POSITION;
};
//버텍스 셰이더
VertexOutput vert(VertexInput v)
{
VertexOutput o;
o.vertex = TransformObjectToHClip(v.vertex.xyz);
return o;
}
//픽셀 셰이더
half4 frag(VertexOutput i) : SV_TARGET
{
return half4(0.5, 0.5, 0.5, 1);
}
ENDHLSL
}
}
}
각 코드블럭이 어떤 역할을 하는지는 강의를 진행하며 정리할 것이다.
생성한 쉐이더는 Material-Shader에서 선택할 수 있으며![]()
쉐이더를 적용한 마테리얼을 오브젝트에 적용하면 된다.
![]()
![]()