JHB의 프로그래밍 삽질기

[Open GL] Color 정보를 넘길 때 왜 Fragment Shader로 바로 넘기는게 안될까? 본문

PROGRAMMING/Etc

[Open GL] Color 정보를 넘길 때 왜 Fragment Shader로 바로 넘기는게 안될까?

jhbaek 2019.05.10 21:24

Opengl-tutorial 4 : 색깔이 입혀진 육면체

http://www.opengl-tutorial.org/kr/beginners-tutorials/tutorial-4-a-colored-cube/

위의 튜토리얼 따라가다가 궁금한게 생겼다.

Position 정보는 Vertex Shader에서 처리하니 Vertex Shader로 넘겨주는게 맞는 것 같은데

Color 정보는 Fragment Shader로 바로 넘기면 되는 것을 뭐하러 Vertex Shader로 넘긴 다음에 다시 Fragment Shader 로 넘기는 것인가?

    // TransformVertexShader.vertexshader

    // Output data ; will be interpolated for each fragment.
    out vec3 fragmentColor;

    ...

    void main() {
        ...
        fragmentColor = vertexColor;
    }

왜 굳이 위 처럼 해주는지 도저히 이해가 가질 않았다.

이 점은 Shader의 Pipeline을 보고 나서 이해 할 수 있었다.

렌더링 파이프 라인 구조가 위와 같다.

즉 최초의 Input Data는 Vertex Shader로 갈 수 밖에 없는 구조인 것이다.

따라서 cpu 코드에서 파이프라인으로 전달하는 코드는 우선적으로 Vertex Shader로 전달하는 것이 맞다.

 

사족)

아직 잘은 모르겠지만

렌더링 파이프라인과 컴퓨트 파이프라인이 있고..

렌더링 파이프 라인에 여러 쉐이더가 있는데 이게 컴퓨트 쉐이더로 구현돼 있다고 한다.

단지 렌더링 파이프라인을 쓰면 일련의 순차적인 작업(버텍스→프래그먼트)대로 실행이 되는 거고,

컴퓨트 파이프라인을 쓰면 렌더링 파이프라인과는 별도로 그래픽 카드에서 컴퓨트 쉐이더를 쓸 수 있는 것 같다.

https://docs.unity3d.com/kr/2017.4/Manual/class-ComputeShader.html

0 Comments
댓글쓰기 폼