본문 바로가기

vulkan

Vulkan tutorial #7 Fragment Interpolation

이제 vertex shader로 데이터를 옮길 수 있게 되었다. 하지만 vertex shader와 fragment 사이에는 rasterize 부분이있고 그 부분에서는 우리가 이제  그 중간 지점들에 대해서 색깔을 어떻게 주어야 하는지에 대해서 의문이 쌓일 수 있다. 이는 바로 linear interpolation 파트가 도와줄 것이다. 

 

 linear interpolation은 각 직선의 중간값을 구해주는 방법이라 생각하면 된다.(중고등학교 때 내분점 생각하면 쉽다)

일차원에서는 다음과 같이 중간지점의 값을 생각할 수 있다.

 

마찬가지로 2차원에서는 다음과 같이 확장해서 사용할 수 있다. 

그러면 세가지 점은 어떻게 interpolation을 시켜야할까? 

 

대학생때 선형대수를 보면 약간의 답이 나올거다. 영상에는 Barycentric coordination을 사용하는 느낌으로 나온다. 

 

다음과 같이 vector -> ab와 vector ac를 기저벡터로 하는 좌표평면을하면 두 벡터가 선형적으로 독립하면 (ab로 ac를 표현할 수 있지않으면) 두벡터는 2차원적으로 span하다고 할 수 있다. (즉 두벡터로 2차원공간의 모든 점은 유일한 값 두개로 표현이 된다) 

 

https://adioshun.gitbooks.io/linear-algebra/content/09c120-d615-b3c5-b9bd-span-ae30-c800-cc28-c6d0.html

 

09 선형 독립(Linear independence), Span, 기저(Basis) 그리고 차원(Dimension) · linear algebra

 

adioshun.gitbooks.io

위의 url를 참고하면 이 영상을 이해하기가 쉬울거다. 

 

위와같은 방식으로 결국 우리는 삼각형 내부 혹은 외부의 어떤점의 값을 두개의 값과 세개의 점으로 표현할 수 있게 된다.

 

raterization stage을 통해 triangle과 overlap되는 부분의 pixel을 알려준다음 barycentric coordinate를 이용해 표현할 색을 선정해준다.

 

코드는 다음 url을 보면됨 

https://github.com/comwitch/VulkanStudy/tree/tutorial7

 

GitHub - comwitch/VulkanStudy: this is VulkanStudy code

this is VulkanStudy code. Contribute to comwitch/VulkanStudy development by creating an account on GitHub.

github.com

 

생각보다 바꿔줄 것이 많이 없다. .frag 파일 바꿔준 다음 vertexinputattributeDescription 쪽 바꿔주고 color 변수 넣어주면된다.

 

결과물

추가적으로 swapchain부분에서 chooseSwapSurfaceFormat 파트를 바꿔주면 

다음과 같이 바뀐다.