안녕하세요. TA 새벽 언덕입니다.
01 - 쉐이더란?
쉐이더란 소프트웨어 명령어를 통해서 모니터상에 어떻게 렌더링 할지 프로그래밍 연산을 해주는 것을 말합니다. 프로그래밍을 할 때 C, C++, C# 등의 언어가 있듯이 쉐이더에는 CG, HLSL 등의 언어가 존재합니다. 저는 Unity Engine에서 쉐이더를 프로그래밍하는 것을 알려드리고자 합니다.
01.1 - 쉐이더의 사전적 의미는 무엇일까요?
쉐이더(셰이더, Shader)
참고 링크 : https://terms.naver.com/entry.naver?docId=3482344&cid=58439&categoryId=58439
물체 표면의 색 변화를 생성해내기 위한 알고리즘이다. 기본적으로 객체 (오브젝트) 표면의 normal(법선, 수직방향) 값에 대한 정보와 투명도나 반사도, 물체 색상 등의 일반적인 표면 속성, 조명의 종류와 개수와 방향 등에 대한 정보들을 이용해 계산한다.
01.2 - 쉐이더는 왜 필요할까요?
쉐이더가 필요한 이유는 사람의 상상력이 무한하기 때문이라고 생각합니다. 아티스트분들이 머릿속에 그리고 있는 아름다운 그림, 그래픽 스타일 등을 3D, 2D상에서 표현해줄 수 있는 것이 쉐이더이기 때문입니다. 간략하게 예시를 들면 일본 애니풍, 디즈니풍, 실사풍 여기서 풍이란 그래픽 스타일을 말하는데요, 잘 만들어진 쉐이더는 많은 사람들에게 같은 그래픽 스타일의 느낌을 줄 수 있습니다.
아래의 이미지는 카툰풍의 예시를 들기 위해서 간단하게 모작한 이미지입니다.
1) 외곽선(Out Line)이 존재한다. (배경과 캐릭터를 구분 지어 줍니다.)
2) 명암에 단계가 간략하다 (보통 2~3단계입니다.)
2D, 3D로 움직이는 많은 그래픽 작업물이 쉐이더 연산의 결과물입니다. 알고 계시는 여러 게임, 애니, 영화 등을 검색해보시면서 그래픽스타일의 차이와 쉐이더의 목적에 대해서 생각해보시면 좋을 것 같습니다.
01.3 - 쉐이더의 종류는 어떻게 될까요?
참고 링크 : https://terms.naver.com/entry.naver?docId=3482344&cid=58439&categoryId=58439
1 ) Vertex Shader(꼭짓점 쉐이더)
점 단위에서 연산을 하는 쉐이더입니다. 2D, 3D 모두 점, 선, 면으로 이루어질 수밖에 없는데, Vertex(점) 단위에서 x, y, z좌표를 움직이거나, 색상을 바꾸는 등의 계산을 해주는 쉐이더입니다. Vertex를 움직여서 물결을 치게 하거나, 나뭇잎을 흔들리게 하는 등의 대표적인 사용 예시가 있습니다.
2) Pixel Shader(Fragement Shader, 표면 쉐이더)
픽셀 단위에서 연산을 하는 쉐이더입니다. 픽셀 셰이더는 Vertex쉐이더와 같이 공간상의 움직임을 연산할 수는 없습니다. 화면상에 렌더링 되는 각각의 픽셀의 색을 계산하고, 빛을 받거나, 그림자를 만드는 등의 계산을 하게 됩니다. 쉐이더란 모니터에 어떻게 렌더링 하여 보이느냐에 대한 내용이므로, 대부분의 연산은 Pixel쉐이더에서 이뤄진다고 할 수 있습니다.
* Geometry Shader, Fixed Rendering PipeLine에 대한 내용은 생략합니다. 궁금하신 분은 해당 단어를 검색하셔서 공부하시면 도움이 될 것 같습니다. 생략을 하는 이유는 해당 내용이 중요하지 않기보다는, 현재 내용 중에서 더 중요한 내용을 전달드리기 위해서입니다.
01.4 - 유니티 쉐이더를 하기 위해서는 무엇이 필요할까요?
1. 유니티 엔진의 설치가 필요합니다. (Unity엔진의 버전은 2020 이상을 사용해주세요.)
*CG Programming(Legacy, 전통적인 코딩 방식), ShaderGraph(Node, 노드 방식) 두 가지 모두 알려드리고자 합니다.
2. Visual Studio Code 또는 Visual Studio의 설치가 필요합니다.
3. 프로그래밍 지식, 수학적 지식이 있으면 좋지만, 없어도 괜찮습니다. 저도 처음 쉐이더를 접했을 때 두 가지 모두 없었습니다. 관련 지식이 아예 없더라도 이해하실 수 있도록 쉽게 설명드릴 수 있도록 하겠습니다.
* 쉐이더에 대해서 궁금하신 점은 언제든 댓글로 남겨주시면 친절히 설명드릴 수 있도록하겠습니니다.
4. 렌더링 파이프라인에 대한 지식이 필요합니다. 하지만 저는 렌더링 파이프라인에 대한 지식을 먼저 말씀드리지 않을 것입니다. Unity Shader를 설명드리면서 같이 한 부분씩 알려드리고자 합니다.
*렌더링 파이프라인을 먼저 공부하게 되면 왜 이것을 공부하는지 방향성을 잃기가 쉽습니다. Unity Shader로 결과물을 만들어가면서 렌더링 파이프라인에 대한 설명이 필요할 때 설명드리면서 Shader 만드는 것에 먼저 재미를 붙여가면 좋을 것 같습니다.
쉐이더가 무엇인지에 대해서 알아보았습니다.
감사합니다.
* 오탈자 및 잘못된 내용 등 의견은 댓글로 남겨주시면 감사드리겠습니다. 피드백 주시는 내용 통해서 더 좋고, 도움 될 수 있는 내용으로 보답할 수 있도록 하겠습니다.
'유니티엔진 > 유니티쉐이더' 카테고리의 다른 글
Shader의 Struct, SubShader, Pragma (0) | 2022.02.23 |
---|---|
Properties & Shader 경로지정 (0) | 2022.02.16 |
UV와 Sampler2D (0) | 2022.02.09 |
쉐이더의 Culling, Queue, RenderType (0) | 2022.01.26 |
SRP Batcher (0) | 2022.01.26 |