셰이더와 GPU 파이프라인 · 정점 셰이더와 프래그먼트 셰이더 · 퀴즈
퀴즈: 셰이더 단계
문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
정점 셰이더가 정점을 만들거나 없앨 수 없도록 되어 있는 이유는 무엇입니까?
- 정점 데이터가 읽기 전용 메모리에 있어서
- 하드웨어가 처리할 개수를 미리 알아야 병렬로 나눌 수 있어서
- 래스터라이저가 삼각형만 받을 수 있어서
- 정점 셰이더에는 반복문을 쓸 수 없어서
attribute 와 uniform 의 차이는 무엇입니까?
- attribute 는 읽기 전용이고 uniform 은 쓸 수 있다
- attribute 는 정점 셰이더만, uniform 은 프래그먼트 셰이더만 쓸 수 있다
- attribute 는 정점마다 다르고 uniform 은 드로우 콜 전체에서 같다
- attribute 는 정수만, uniform 은 실수만 담을 수 있다
프래그먼트와 픽셀의 차이는 무엇입니까?
- 프래그먼트는 삼각형이 그 자리에 만들어 낸 후보이고, 한 픽셀에 여러 개가 생길 수 있다
- 프래그먼트는 색이 없고 픽셀은 색이 있다
- 프래그먼트는 화면 밖에도 존재하고 픽셀은 화면 안에만 있다
- 둘은 같은 말이고 API 마다 이름만 다르다
무거운 계산을 가능하면 정점 셰이더로 옮기라는 조언의 근거는 무엇입니까?
- 정점 셰이더가 더 빠른 코어에서 돌기 때문이다
- 프래그먼트 셰이더는 부동소수점 정밀도가 낮기 때문이다
- 정점 셰이더는 정점 수만큼, 프래그먼트 셰이더는 덮은 넓이만큼 불리기 때문이다
- 정점 셰이더의 결과가 캐시에 남기 때문이다
프래그먼트 셰이더의 discard 가 성능에 부담이 되는 이유는 무엇입니까?
- 버려진 프래그먼트가 메모리에 쌓이기 때문이다
- 색을 계산해 봐야 살아남는지 알 수 있어 깊이 선판정 최적화를 쓸 수 없기 때문이다
- discard 가 있으면 삼각형을 다시 래스터라이즈해야 하기 때문이다
- 버리기가 파이프라인을 통째로 비우기 때문이다
정점 셰이더의 출력이 프래그먼트 셰이더의 입력이 되기까지 그 사이에서 무엇이 일어납니까?
- 아무 일도 없고 값이 그대로 전달된다
- 래스터라이저가 픽셀을 골라내고 세 정점의 값을 무게중심 좌표로 섞는다
- 드라이버가 값을 압축해 GPU 메모리에 저장한다
- 깊이 버퍼가 값을 정렬한다