Unity에서는 보통 HLSL에서 셰이더 프로그램을 작성합니다. 셰이더 에셋에 HLSL 코드를 추가하려면 셰이더 코드 블록 내에 코드를 넣습니다.
이 페이지는 셰이더 코드 블록을 사용하는 방법에 대한 정보를 포함합니다. HLSL 자체를 작성하는 방법을 알아보려면 Unity에서 HLSL 사용을 참조하십시오.
참고: 비록 필요하거나 권장되지는 않으나, Unity는 다른 언어로 셰이더 프로그램을 작성하는 것도 지원합니다. 자세한 내용은 셰이더 작성을 참조하십시오.
기능 | 빌트인 렌더 파이프라인 | 유니버설 렌더 파이프라인(URP) | 고해상도 렌더 파이프라인(HDRP) | 커스텀 스크립터블 렌더 파이프라인 |
---|---|---|---|---|
HLSLPROGRAM | 지원 | 지원 | 지원 | 지원 |
HLSLINCLUDE | 지원 | 지원 | 지원 | 지원 |
CGPROGRAM | 지원 | 지원 안 함 | 지원 안 함 | 지원 SRP Core 패키지를 사용하는 커스텀 렌더 파이프라인과 호환 불가 |
CGINCLUDE | 지원 | 지원 안 함 | 지원 안 함 | 지원 SRP Core 패키지를 사용하는 커스텀 렌더 파이프라인과 호환 불가 |
다음 셰이더 코드 블록 타입을 사용하여 HLSL 코드를 추가할 수 있습니다.
언제 어느 타입을 사용해야 하는지 이해하려면 타입의 프리픽스(HLSL
또는 CG
)와 접미사(PROGRAM
또는 INCLUDE
)를 모두 이해해야 합니다.
HLSL
과 CG
로 시작하는 블록의 차이는 다음과 같습니다.
HLSL
로 시작하는 셰이더 코드 블록은 보다 최근의 것으로, Unity의 빌트인 셰이더 include 파일을 기본적으로 포함하지 않으므로 사용할 라이브러리 코드를 수동으로 포함해야 합니다. 이 코드 블록은 모든 렌더 파이프라인과 함께 사용할 수 있습니다.Unity의 빌트인 셰이더 include 파일에 대한 내용은 빌트인 셰이더 include 파일을 참조하십시오.
PROGRAM
과 INCLUDE
로 시작하는 블록의 차이는 다음과 같습니다.
PROGRAM
으로 끝나는 셰이더 코드 블록을 셰이더 프로그램 블록이라고 하며, 셰이더 프로그램을 작성하는 데 사용합니다. HLSL 셰이더 코드를 이러한 블록 내에 작성한 다음 ShaderLab 코드의 패스 블록 안에 넣습니다.INCLUDE
로 끝나는 셰이더 코드 블록을 셰이더 include 블록이라고 하며, 같은 소스 파일 내 셰이더 프로그램 블록 간 일반적인 코드를 공유하는 데 사용합니다. 이러한 블록 내에서 공유할 HLSL 셰이더 코드를 작성한 다음 ShaderLab 코드 내 패스, 서브셰이더 또는 셰이더 블록 안에 넣습니다. HLSL 코드에서 include를 사용하는 방법과 비슷하게 작동합니다.서명 | 기능 |
---|---|
HLSLPROGRAM [source code for shader programs, written in HLSL] ENDHLSL
|
이 셰이더 프로그램 블록을 포함하는 패스에 HLSL 셰이더 프로그램을 추가합니다. Unity의 빌트인 셰이더 include 파일은 포함하지 않습니다. |
CGPROGRAM [source code for shader programs, written in HLSL] ENDCG
|
이 셰이더 프로그램 블록이 포함된 패스에 HLSL 셰이더 프로그램을 추가합니다.Unity의 빌트인 셰이더 Include 파일 몇 가지가 기본적으로 포함되어 있어 빌트인 변수와 함수를 사용할 수 있습니다. |
Shader "Examples/ExampleShader"
{
SubShader
{
Pass
{
Name "ExamplePassName"
Tags { "LightMode" = "ExampleLightModeTagValue" }
// ShaderLab commands to set the render state go here
HLSLPROGRAM
// HLSL shader code goes here
ENDHLSL
}
}
}
서명 | 기능 |
---|---|
HLSLINCLUDE [HLSL code that you want to share] ENDHLSL
|
Unity는 이 소스 파일 어디에서든 이 코드를 HLSLPROGRAM 블록에 정의된 모든 셰이더 프로그램에 포함합니다. |
CGINCLUDE [HLSL code that you want to share] ENDCG
|
Unity는 이 소스 파일 어디에서든 이 코드를 CGPROGRAM 블록에 정의된 모든 셰이더 프로그램에 포함합니다. |
Shader "Examples/ExampleShader"
{
SubShader
{
HLSLINCLUDE
// HLSL code that you want to share goes here
ENDHLSL
Pass
{
Name "ExampleFirstPassName"
Tags { "LightMode" = "ExampleLightModeTagValue" }
// ShaderLab commands to set the render state go here
HLSLPROGRAM
// This HLSL shader program automatically includes the contents of the HLSLINCLUDE block above
// HLSL shader code goes here
ENDHLSL
}
Pass
{
Name "ExampleSecondPassName"
Tags { "LightMode" = "ExampleLightModeTagValue" }
// ShaderLab commands to set the render state go here
HLSLPROGRAM
// This HLSL shader program automatically includes the contents of the HLSLINCLUDE block above
// HLSL shader code goes here
ENDHLSL
}
}
}