셰이더(shader)란 무엇인가?

2023. 8. 21. 13:16하고싶은거 하thㅔ요/3D

이 글은 유투브 레트로 retr0 채널의 '유니티 셰이더&렌더링 에센스 E01 셰이더는 무엇인가?' 를 문자로 변환한 글로 제가 훗날 알아보기 위해 정리해서 씁니다^^

 

자, 먼저 3D를 하다보면 메쉬, 라이트, 카메라, 메터리얼 등 여러가지 요소들을 접하게 된다.

이번 프로젝트에서 WebGL(Three.js)를 사용하면서 여러가지 요소를 봤고, GLSL 이나 3D 렌더링 파이프라인을 잠깐 공부하면서 쉐이더(셰이더, shader) 라는 용어는 많이 접했다. (이하, 쉐이더라 칭함)

WebGL은 살짝쿵 맛봤고, 이참에 유니티를 공부하려던 찰나 든 생각

'그런데, 나는 쉐이더가 무엇인지 정확히 설명할 수 있는가?' 에 대한 원초적 질문으로 다시 공부해보기로 한다.

 

셰이더

  • 화면에 색을 칠하는(shading) 프로그램
  • 렌더링 파이프라인의 일부를 유연하게 변경하는 프로그램

보통 익숙한 두 셰이더를 많이 떠올리게 된다.

  • 버텍스 셰이더 : 드로잉
  • 프래그먼트 셰이더 : 컬러링

버텍스 셰이더는 입력된 값은 정점의 위치를 화면에 그리는 것이고, 프래그먼트 셰이더는 버텍스 셰이더가 그린 화면에 색을 칠하는 작업한다. 현실에 빗대어 표현해보자면 빈 종이에 삼각형을 이루는 세 개의 점을 그리고, 점선을 잇고, 그 안에 색을 칠하는 것이다.

 

자, 3D로 삼각형을 표현하고 싶을 때, GPU에서는 무슨 일이 일어날까?

한 화면에 세 개의 점을 그려 프래그먼트 셰이더에게 넘기는 것일까? 아니다.

GPU의 병렬 구조 작업 특징에 기인해, 세 개의 점을 나누어 즉, 각 하나의 종이에 하나의 점을 찍어 세 장을 이루고 그것을 삼각형으로 합체시키는 일을 한다.

 

셰이더를 완전하게 이해하려면 렌더링 파이프라인을 이해해야 한다.

자 그럼 다음 글로.

반응형