본 게시물은 Unity Korea 채널의 URP Shader Training 시리즈와 강의에 사용된 도큐먼트를 공부하며 정리한 게시물입니다.
// Shader 시작. 셰이더의 폴더와 이름을 여기서 결정합니다.
Shader "URPTraining/19_Object Color"
{
Properties
{
// Properties Block : 셰이더에서 사용할 변수를 선언하고 이를 material inspector에 노출시킵니다
_TintColor("Test Color", Color) = (1, 1, 1, 1)
_Intensity("Range Sample", Range(0, 1)) = 0.5
_MainTex("Main Texture", 2D) = "white"{}
}
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;
float3 color : COLOR;
};
half4 _TintColor;
float _Intensity;
//버텍스 셰이더
VertexOutput vert(VertexInput v)
{
VertexOutput o;
o.vertex = TransformObjectToHClip(v.vertex.xyz);
o.color = TransformObjectToWorld(v.vertex.xyz);
return o;
}
//픽셀 셰이더
half4 frag(VertexOutput i) : SV_TARGET
{
float4 color = float4(1, 1, 1, 1);
color.rgb *= _TintColor * _Intensity * i.color;
return color;
}
ENDHLSL
}
}
}
![]()
Vertex Shader에서 이를 응용하여 변형할 수 있음
VertexOutput vert(VertexInput v)
{
VertexOuput o;
float4 positionWS = TransformObjectToHClip(v.vertex.xyz);
float3 color = TransformObjectToWorld(v.vertex.xyz);
o.vertex = positionWS + float4(sin(color + _Time.y), 1);
o.color = color;
return o;
}
![]()