Home [Unity Shader] ShaderLab과 Shader 작성 방식
Post
Cancel

[Unity Shader] ShaderLab과 Shader 작성 방식

1. ShaderLab(쉐이더랩)

ShaderLab이란 유니티에서 모든 Shader 파일을 작성할 때 사용하는 선언형 언어이고 중첩 중괄호 구문을 이용해 다양한 요소로 선언이 가능합니다.

유니티에서 Shader 파일을 만들어서 열어보면 평소 우리가 사용하는 언어와 비슷하지만 조금씩 다른 점을 확인하실 수 있습니다.

자세한 내용은 공식 문서에 잘 나와 있으므로 자세한 내용은 아래 링크 참고해 주세요.

ShaderLab 구문 - Unity 매뉴얼

1-1. 왜 ShaderLab?

유니티는 왜 ShaderLab을 통해 Shader를 작성하게 했을까요??

유니티는 멀티 플랫폼 제작이 자동으로 지원되는 엔진입니다.

즉,

모바일, PC, 콘솔기기에 따라 제작되는 Shader가 다르고 그림자가 있을 때 없을 때 라이트맵이 있을 때 없을 때 등 여러 가지 경우의 수에 따라 제작 방식이 달라집니다.

이렇게 다양한 경우의 수가 있고 그 수에 따라 Shader를 만들어 관리한다면 유지보수 차원에서 너무 효율적이지 못하게 됩니다.

그러므로, 유니티는 Shader 작성 언어를 ShaderLab이란 언어로 하고 각 상황에 따른 분기를 자동으로 작성해 줌으로써

사용자가 ShaderLab이란 하나의 언어를 통해 다양한 상황에 맞추어 개발할 수 있게 하였습니다.


2. ShaderLab을 이용한 제작 방식

2-1. ShaderLab으로만 작성

  • 매우 가볍고 하드웨어 호환성이 좋지만, 기능이 상당히 부족하기에 고급 효과를 기대하기엔 어렵습니다.
  • 자체 문법으로 이루어져 있어 다른 쉐이더 문법과 거의 호환되지 않는 단점을 가집니다.
  • 추천 X (지원 중단 예정)

2-2. Surface Shader(서피스 쉐이더)로 작성

  • ShaderLab 스크립트와 함께 일부분은 CG쉐이더 코드를 사용하는 방법입니다.
  • 기본적인 조명 코드와 버텍스 쉐이더의 복잡한 부분은 스크립트를 이용하여 자동으로 처리되고 있습니다.
  • 픽셀 쉐이더 부분만 간편하게 작성할 수 있어 편리합니다.
  • 비주얼 쉐이더 에디터와도 비슷한 개념을 가지고 있어 초보자가 공부하기에 좋고 응용하기 좋습니다.
  • 최적화에 다소 무리가 있고, 일정 수준 이상의 고급 기법을 구현하기에는 어려운 면이 있습니다.

Unity - Manual: Writing Surface Shaders

2-3. Vertex & Fragment Shader로 작성

  • ShaderLab 스크립트와 함께 CG쉐이더 코드를 사용하지만 좀 더 본격적인 쉐이더 작성 방법입니다.
  • 자동으로 처리해 주는 부분이 없어 제대로 된 CG 쉐이더 방식으로 버텍스의 좌표 변환부터 제대로 처리해야 작동합니다.
  • 배우기 힘들지만 완전히 수동으로 제어가 가능해 최적화와 고급 기법을 표현할 때 좋습니다.

커스텀 셰이더 기초 - Unity 매뉴얼

This post is licensed under CC BY 4.0 by the author.

[C++] 스마트 포인터 - unique_ptr

[Unity] Coroutine은 비동기가 아니다