Unity에서는 보통 HLSL에서 셰이더 프로그램을 작성합니다. 셰이더 에셋에 HLSL 코드를 추가하려면 셰이더 코드 블록 내에 코드를 넣습니다.
이 페이지는 셰이더 코드 블록을 사용하는 방법에 대한 정보를 포함합니다. HLSL 자체를 작성하는 방법을 알아보려면 Unity에서 HLSL 사용을 참조하십시오.
참고: 비록 필요하거나 권장되지는 않으나, Unity는 다른 언어로 셰이더 프로그램을 작성하는 것도 지원합니다. 자세한 내용은 셰이더 작성을 참조하십시오.
기능 | 빌트인 렌더 파이프라인 | 유니버설 렌더 파이프라인(URP) | 고해상도 렌더 파이프라인(HDRP) | 커스텀 스크립터블 렌더 파이프라인 |
---|---|---|---|---|
HLSLPROGRAM | 지원 | 지원 | 지원 | 지원 |
HLSLINCLUDE | 지원 | 지원 | 지원 | 지원 |
CGPROGRAM | 지원 | 지원 안 함 | 지원 안 함 | 지원 SRP Core 패키지를 사용하는 커스텀 렌더 파이프라인과 호환 불가 |
CGINCLUDE | 지원 | 지원 안 함 | 지원 안 함 | 지원 SRP Core 패키지를 사용하는 커스텀 렌더 파이프라인과 호환 불가 |
다음 셰이더 코드 블록 타입을 사용하여 HLSL 코드를 추가할 수 있습니다.
언제 어느 타입을 사용해야 하는지 이해하려면 타입의 프리픽스(HLSL
또는 CG
)와 접미사(PROGRAM
또는 INCLUDE
)를 모두 이해해야 합니다.
HLSL
과 CG
로 시작하는 블록의 차이는 다음과 같습니다.
CG
로 시작하는 셰이더 코드 블록이 더 오래되었습니다. 이러한 코드 블록은 기본적으로 Unity의 빌트인 셰이더 include 파일을 여러 개 포함하므로 이 기능이 필요한 경우 매우 편리합니다. 빌트인 include는 빌트인 렌더 파이프라인과만 호환됩니다.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
}
}
}
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.