본문 바로가기

공부/아티스트를 위한 유니티 URP 셰이더 입문

[아티스트를 위한 유니티 URP 셰이더 입문] - 02 셰이더란 무엇인가?

728x90
반응형

 

 

01. 셰이더(Shader)의 간단 정의

  • 셰이더모니터 화면에 그려지는 픽셀의 색을 결정하는 프로그램이고, GPU 내부에서 실행된다.

 

 

02. CPU vs GPU

Mythbusters Demo GPU versus CPU - YouTube
  • 위의 영상은 CPU와 GPU의 차이를 재미 있게 설명하는 NVIDIA의 영상이다.

 

  • CPU -  복잡하고 다양한 연산을 수행하지만 순차적으로 하나씩 처리한다.
  • GPU -  단순하고 정해진 연산을 수행하지만 동시에 병렬 처리한다.
  • 셰이더란 위의 영상과 같이 모나리자를 구성하는 여러 픽셀들 하나마다 수행되는 작은 프로그램이라고 생각하면 되며, GPU에서 실행되기 때문에 여러 픽셀에 대해서 동일한 셰이더가 동시에 실행된다.

 

 

3D 폴리곤이 화면에 그려지는 과정

 

  • 1~2번은 그래픽 리소스를 준비하는 단계
  • 3~8번렌더링(Rendering) 과정이다.
  • 5번7번셰이더이다.

 

 

04. 렌더링과 셰이더

  • 셰이더가 픽셀의 색을 결정하는데 필요한 정보는 다음과 같다.

셰이더의 정의

 

  • 폴리곤을 비추는 빛의 방향(각도) - 노란 화살표
  • 픽셀이 위치한 3D 폴리곤 표면의 방향(각도) - 초록 화살표
  • 폴리곤 주변 환경의 밝기 - Ambient
  • 픽셀이 위치한 3D 폴리곤 표면의 재질 정보 - Smoothness, metallic

 

 

06. 버텍스 셰이더와 프래그먼트 셰이더

버텍스 셰이더(Vertex Shader)

  • 버텍스 셰이더픽셀 셰이더보다 앞서 실행된다.
  • 버텍스 셰이더의 역할은 3D 폴리곤의 정점(Vertex) 위치가 2D 모니터 화면의 어디인지 2D 위치를 계산한다.
  • 계산된 위치는 래스터라이저(Rasterizer)에 전달되어서 어느 픽셀이 폴리곤 내부의 픽셀인지 자동 계산해서 프래그먼트 셰이더에 픽셀들을 전달한다.

 

래스터라이저의 역할. 좌측부터 버텍스 셰이더, 래스터라이저, 프래그먼트 셰이더

 

  • 버텍스 셰이더아웃라인(Outline) 셰이더, 파도치는 바다 표면이나 바람에 흔들리는 나무의 표현에도 사용된다.

 

  • 버텍스 셰이더픽셀 셰이더의 중요한 차이 중 하나는 실행되는 횟수이다.
  • 화면 해상도가 고해상도여서 픽셀 수가 많아져도 버텍스 셰이더의 실행횟수는 일정하다. 하지만, 프래그먼트 셰이더는 늘어난 픽셀 수만큼 더 많이 실행된다.
  • 대부분의 경우 3D 화면 안에는 버텍스보다 픽셀이 더 많기 때문에 최적화를 목적으로 UV 연산이나 간단한 라이팅 등을 버텍스 셰이더에서 처리하는 경우도 있다.

 

  • 버텍스 기준으로 계산된 값들은 래스터라이저의 보간기(Interpolator)에 의해 모든 픽셀에 적절한 값으로 보간(Interpolation)되어서 전달된다.
  • 보간된 값은 부정확하므로 주의해서 사용해야한다.
  • 가장 일반적으로 보간되는 값들은 UV, 버텍스 컬러, 노멀 벡터 등이다.

 

  • 자세한 내용은 [OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 7 - 래스터라이저 참고
 

[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 7 - 래스터라이저

정점 쉐이더가 출력한 정점들은 프리미티브로 다시 조립된다. 스크린에 그려질 형태로 변환된 후 프래그먼트로 분해되는데 이를 래스터화(rasterization)라고 부른다. (GPU 파이프라인의 래스터라이

j1y00h4.tistory.com

 

08. 픽셀 셰이더 vs 프래그먼트 셰이더

 

  • 픽셀
    • 최종적으로 모니터에 보이는 점
  • 프래그먼트
    • 래스터라이저에서 생성한 점
    • 래스터라이저에서 만들어진 이 파편(프래그먼트)은 아직 최종적으로 모니터에 픽셀이 되기 전의 조각들

 

  • 픽셀이 되기 위해 다른 조각에 의해 가려졌는지 비교도 해야 하고 스텐실 검사도 통과하고 안티 앨리어싱(Anti-Aliasing)처리도 해야 최종적으로 픽셀이 될 자격을 갖추게 된다.

 

 

09. 셰이더는 시뮬레이션이 아닌 단순화 연산

  • 대부분의 실시간 렌더링. 특히 게임 그래픽 렌더링은 높은 프레임 래이트를 유지하기 위해 복잡한 셰이더 연산을 최대한 자제한다.
  • 다소 부정확하더라도 빠르고 가벼운 셰이더 연산을 사용한다.

 

 

 

 

 

  • <아티스트를 위한 유니티 URP 셰이더 입문>을 읽고 정리한 내용입니다.

 

 

728x90