Unity에서 셰이더는 다음 세 가지 방법 중 하나로 작성할 수 있습니다.
표면 셰이더는 셰이더가 광원 및 섀도우에 의해 영향을 받아야 하는 경우 최고의 선택입니다. 표면 셰이더는 Unity의 조명 파이프라인과 상호작용을 위한 고수준의 추상화로 복잡한 셰이더를 간편하게 작성할 수 있습니다. 대부분의 표면 셰이더는 포워드 및 디퍼드 라이팅 모두를 자동으로 지원합니다. 표면 셰이더는 몇 줄의 Cg/HLSL로 작성할 수 있으며, 여기에서부터 더 많은 코드가 자동으로 생성됩니다.
셰이더가 광원의 영향을 받지 않는다면 표면 셰이더를 사용하지 않습니다. 포스트 프로세싱 효과 또는 여러 특수 효과 셰이더의 경우 표면 셰이더는 아무 이유 없이 다수의 조명을 계산하므로 차선책으로 사용합니다.
버텍스 및 프래그먼트 셰이더는 셰이더가 조명과 상호작용할 필요가 없거나 표면 셰이더로 다룰 수 없는 일부 색다른 효과가 필요한 경우 사용합니다. 이 방법으로 작성된 셰이더 프로그램은 필요한 효과를 생성하는 가장 유연한 방법이지만(심지어 표면 셰이더도 수많은 버텍스 및 프래그먼트 셰이더로 자동으로 전환됨) 상대적인 비용이 따릅니다. 많은 코드를 작성해야 하며 조명과 상호작용하도록 만들기가 더 어렵습니다. 이 셰이더도 역시 Cg/HLSL로 작성됩니다.
고정 함수 셰이더는 매우 단순한 효과용 레거시 셰이더입니다. 훨씬 더 유연하게 사용할 수 있으므로 프로그래밍 가능한 셰이더로 작성할 것을 권장합니다. 고정 함수 셰이더는 전적으로 ShaderLab이라고 하는 언어로 작성되며 Microsoft의 .FX 파일 또는 NVIDIA의 CgFX와 유사합니다. 내부적으로 모든 고정 함수 셰이더는 셰이더 임포트 시 버텍스 및 프래그먼트 셰이더로 전환됩니다.
어떤 타입을 선택하는지 관계없이 실제 셰이더 코드는 항상 ShaderLab에서 래핑되며 셰이더 구조를 구성하는 데 사용됩니다. 다음과 유사하게 보입니다.
Shader "MyShader" {
Properties {
_MyTexture ("My Texture", 2D) = "white" { }
// Place other properties like colors or vectors here as well
}
SubShader {
// here goes your
// - Surface Shader or
// - Vertex and Fragment Shader or
// - Fixed Function Shader
}
SubShader {
// Place a simpler "fallback" version of the SubShader above
// that can run on older graphics cards here
}
}
먼저 ShaderLab 레퍼런스 페이지에서 ShaderLab 구문의 기본 개념을 읽어보고 아래 나열된 튜토리얼을 진행할 것을 권장합니다.
튜토리얼에서 다양한 유형의 셰이더에 대한 예를 확인할 수 있습니다. Unity의 포스트 프로세싱 효과를 참고하여 셰이더로 흥미로운 효과를 만들 수 있습니다.
계속해서 셰이더에 대한 소개를 읽고 셰이더 레퍼런스 페이지를 확인합니다!
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.