이 예시의 Unity 셰이더는 머티리얼에 Base Color 프로퍼티를 추가합니다. 해당 프로퍼티를 사용하여 컬러를 선택하면 셰이더가 메시 셰이프를 컬러로 채웁니다.
URP unlit basic shader 섹션의 Unity 셰이더 소스 파일을 사용하고__ ShaderLab__셰이더 오브젝트의 구조를 정의하기 위한 Unity 언어입니다. 자세한 정보
See in Glossary 코드에 다음 변경 사항을 적용하십시오.
프로퍼티 블록에 _BaseColor 프로퍼티 정의를 추가합니다.
Properties
{
[MainColor] _BaseColor("Base Color", Color) = (1, 1, 1, 1)
}
이 선언은 Base Color 레이블이 있는 _BaseColor 프로퍼티를 머티리얼에 추가합니다.
[MainColor] 속성을 사용하여 프로퍼티를 선언할 때 Unity는 이 프로퍼티를 머티리얼의 메인 컬러로 사용합니다.
참고: 호환성의 이유로
_Color프로퍼티 이름은 예약된 이름입니다. Unity는[MainColor]속성이 없더라도 이름이_Color인 프로퍼티를 메인 컬러로 사용합니다.
프로퍼티 블록에서 프로퍼티를 선언할 경우 HLSL 코드에서도 선언해야 합니다.
참고: Unity 셰이더가 SRP 배처와 호환되도록 만들려면
UnityPerMaterial이라는 이름으로 단일CBUFFER블록 내에서 모든 Material 프로퍼티를 선언하십시오. SRP 배처에 대한 상세 내용은 SRP(스크립터블 렌더 파이프라인) 배처에 대한 기술 자료를 참조하십시오.
버텍스 셰이더 앞에 다음 코드를 추가하십시오.
CBUFFER_START(UnityPerMaterial)
half4 _BaseColor;
CBUFFER_END
프래그먼트 셰이더의 코드를 변경하여 _BaseColor 프로퍼티를 반환하도록 만듭니다.
half4 frag() : SV_Target
{
return _BaseColor;
}
이제 인스펙터 창의 Base Color 필드에서 컬러를 선택할 수 있습니다. 프래그먼트 셰이더가 메시를 선택한 컬러로 채웁니다.
아래는 이 예제의 완전한 ShaderLab 코드입니다.
// This shader fills the mesh shape with a color that a user can change using the
// Inspector window on a Material.
Shader "Example/URPUnlitShaderColor"
{
// The _BaseColor variable is visible in the Material's Inspector, as a field
// called Base Color. You can use it to select a custom color. This variable
// has the default value (1, 1, 1, 1).
Properties
{
[MainColor] _BaseColor("Base Color", Color) = (1, 1, 1, 1)
}
SubShader
{
Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" }
Pass
{
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
struct Attributes
{
float4 positionOS : POSITION;
};
struct Varyings
{
float4 positionHCS : SV_POSITION;
};
// To make the Unity shader SRP Batcher compatible, declare all
// properties related to a Material in a a single CBUFFER block with
// the name UnityPerMaterial.
CBUFFER_START(UnityPerMaterial)
// The following line declares the _BaseColor variable, so that you
// can use it in the fragment shader.
half4 _BaseColor;
CBUFFER_END
Varyings vert(Attributes IN)
{
Varyings OUT;
OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
return OUT;
}
half4 frag() : SV_Target
{
// Returning the _BaseColor value.
return _BaseColor;
}
ENDHLSL
}
}
}
텍스처 드로우하기 섹션에서는 메시에 텍스처를 그리는 방법을 설명합니다.