# 1-1 [쉐이더란]

Ricon·2024년 8월 3일

URP Shader Basic

목록 보기
1/17

본 게시물은 Unity Korea 채널의 URP Shader Training 시리즈와 강의에 사용된 도큐먼트를 공부하며 정리한 게시물입니다.

강의 링크
도큐먼트 링크


Shader란?

Shader란, 간단하게 말해서 화면에 어떻게 그릴지 정의 된 코드, 즉 프로그래밍 된 코드를 뜻한다.
화면에 배열된 픽셀들이 어떤 색으로 그려질지를 정의된 코드로 각 픽셀별 RGBA 값을 어떻게 지정할 것인지를 계산하는 과정이다.

Unity에서 Shader 작성에 사용되는 건 Shader Lab이며, Universal Rendering Pipeline에서 는 CG와 HLSL을 모두 지원하지만 해당 강의에선 HLSL을 기본으로 설명한다.

Shader 생성하기

우선 해당 프로젝트가 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에서 선택할 수 있으며

쉐이더를 적용한 마테리얼을 오브젝트에 적용하면 된다.

0개의 댓글