[Unity]/[Unity]

[Unity] Shader(셰이더)와 Rendering Pipeline(렌더링 파이프라인)

극꼼 2021. 12. 16. 01:06
반응형


1. 셰이더란?

: 3D 컴퓨터 그래픽에서 다양한 시각적 효과(위치, 색상, 텍스쳐, 조명 등)를 계산하여 최종적으로 화면에 출력할 픽셀의 위치와 색상을 계산하는 함수.

 

- 셰이더의 특징 : 다수의 정점을 한 번에 계산하지 않고, 하나의 정점이 입력되면 그 하나의 정점에 대해서만 계산과 처리를 한다. (각 정점의 수만큼 셰이더가 개별적으로 계산을 실행하는 것)

 


2. 렌더링이란?

: 정점(Vertex)으로 정의된 물체를 그려내는 과정

 

3. 렌더링 파이프라인이란?

: GPU를 이용해 3D 이미지 리소스를 2D 래스터 이미지로 표현하기 위한 단계적인 과정.

* 래스터 이미지 : 픽셀로 표현되는 이미지

 

4. 렌더링 파이프라인의 과정

1) Vertex 데이터 : Vertex 데이터들을 받아옴(index number, position, normal color, UV 등등)

 

2) Vertex shader : 행렬 변환을 통해 모델로 존재하는 정점들을 카메라 상의 정점으로 변환. x,y값은 -1~1로 카메라 상의 위치를 나타내고, z는 0~1로 깊이를 나타낸다.

 

3) 래스터 변환(Rasterization) : 화면에 보이기 직전의 픽셀로 변환하는 과정. 뷰포트 변환, 프래그먼트 생성, 정점 간의 보간으로 이뤄진다.

 

4) Pixel shader : 래스터 변환에서 생성된 프래그먼트에 어떤 색을 채울지 결정. 컬러 값과 깊이 값(멀리 있는 물체가 가려짐)을 결과로 내보낸다.

 


5. 유니티 셰이더

: 유니티 셰이더는 3가지가 있습니다.

1) Surface Shader : 빛과 그림자의 영향을 받는 셰이더

- 일반적으로 가장 많이 사용됨

- 복잡한 표면 셰이더를 간결한 방식(짧은 코드)으로 쉽게 작성

- 유니티의 라이팅 파피프라인과 상호작용하는, 높은 추상화 레벨이 적용된 셰이더

- 사용 언어 : ShaderLab + CG or HLSL

 

2) Vertex and Fragment Shader : 셰이더가 조명과 상호작용할 필요가 없거나 Surface 셰이더로 처리할 수 없는 경우 

- 셰이더 작성 자유도가 높은 대신 코드 작성량이 많음

- 빛과 상호작용하기 어려움

- 사용언어 : CG or HLSL

 

3) Fixed Function Shader : 간단한 효과를 위한 레거시 셰이더 문법

- 사용언어 : ShaderLab

 

 


참조

https://dreamzelkova.tistory.com/entry/SRP-%EA%B0%9C%EB%85%90%EC%9E%A1%EA%B8%B0

https://dev-nicitis.tistory.com/6

 

 

반응형