LabHub
배우기 러닝패스 코스

셰이더와 GPU 파이프라인 · 정점 셰이더와 프래그먼트 셰이더 · 실습

셰이더 두 개와 그 사이

LabHub 에서 이어서 보기

목표

정점 셰이더와 프래그먼트 셰이더를 파이썬 함수로 쓰고, 그 사이에 래스터라이저를 놓아 실제로 그림을 뽑습니다. 이 실습이 끝나면 GLSL 코드를 읽을 때 각 값이 어디서 와서 어디로 가는지 보이게 됩니다.

왜 중요한가

셰이더는 파이프라인 아무 데나 열어 준 것이 아닙니다. 구조는 그대로 두고 정점 단계와 프래그먼트 단계만 열었습니다. 그래야 나머지(래스터라이즈, 깊이 판정, 혼합)를 하드웨어가 계속 병렬로 처리할 수 있습니다.

그 제약이 셰이더의 규칙을 만듭니다. 정점 셰이더는 정점을 만들거나 없앨 수 없고, 프래그먼트 셰이더는 이웃 픽셀의 결과를 볼 수 없습니다. 대신 두 단계 사이의 통로가 명확합니다 — 정점 셰이더가 varying 으로 내보내면 래스터라이저가 무게중심 좌표로 섞어 프래그먼트 셰이더에 넘겨 줍니다. 이 구조를 손으로 한 번 만들어 보면 GPU 프로그래밍의 제약이 왜 그 모양인지 이해됩니다.

단계

1. /root/stages 에 도구 상자를 놓습니다.
2. /root/stages/vs.py — 정점 셰이더.
3. /root/stages/varying.py — 값 보간.
4. /root/stages/fs.pypipeline.py — 프래그먼트 셰이더와 out/uv.png.
5. /root/stages/out/u1.png, u2.png, u3.png — 유니폼만 바꾸기.
6. /root/stages/out/discard.png — 프래그먼트 버리기.
7. /root/stages/out/final.pngout/07-counts.txt — 호출 횟수.

참고

단계 7개

  1. 그리기 도구 상자를 놓는다
  2. 정점 셰이더
  3. 래스터라이저가 값을 섞는다
  4. 프래그먼트 셰이더와 첫 그림
  5. 유니폼만 바꾼다
  6. 프래그먼트를 버린다
  7. 어느 단계가 몇 번 불렸나