분류 전체보기(30)
-
Vulkan - 8. 여러 서브패스에 걸친 렌더 패스
개요여러 서브패스에 걸친 렌더 패스는 여러 개의 결과를 합칠 경우에 쓸만합니다. 아직은 수학 라이브러리를 제대로 갖춰 놓은 상황도 아니고 하니 대단한 건 일단 됐고, 기존에 그리던 것에다가 간단하게 반전(negative) 필터링해보는 시간을 가져 봅시다. 이 코드는 여기를 참고하였습니다. 당장 디퍼드 렌더링이 필요하다면 저길 참고하시는 게 좋겠죠. 목차1. 렌더패스에서 여러 서브 패스를 쓰게 구성하기2. 프레임버퍼 재구성3. 후처리용 파이프라인 만들기4. 또 또 기술자 집합5. 2번째 서브패스를 사용하도록 명령 작성하기요약과제 본문1. 렌더패스에서 여러 서브 패스를 쓰게 구성하기단순히 메시를 프레임버퍼에 그리는 패스는 이미 준비돼 있어. 그에 대해 필터링을 적용하려면 뭐가 더 필요할까?이전 프레임버퍼의 ..
2022.06.26 -
Vulkan - 7. 텍스처
개요그래픽스 프로그램에서 텍스처는 모델의 표면 색을 결정하는 데 아주 많이 사용되는 방식입니다. 이걸 하면 사실상 게임 개발에 꼭 필요한 마지막 조각을 맞춘 셈이 되겠죠. GL에서는 텍스처 객체를 생성한 뒤에 glActiveTexture로 바인드할 샘플러를 정하고 텍스처를 바인드, 그리고 샘플러 번호는 uniform 정수로 보냈었습니다. 벌칸에서는 지난 시간에 설명한 자원 기술자를 사용해야 하는데요, 일반 2D 이미지 텍스처와 큐브맵 텍스처를 쓰는 방법을 자세하게 알아봅시다. 이번 글에서는 밉맵을 직접 다루지 않겠습니다. (이후의 글에서 다룰 가능성은 있습니다.) KTX 형식에서 밉맵이 생성되어 있는 텍스처를 불러오는(자주 사용됨) 방법은 여기를, 이미지를 불러온 후 블릿으로 밉맵을 생성하는 방법은 여기..
2022.06.23 -
Vulkan - 6. 깊이와 스텐실 버퍼
개요그래픽 프로그램에서, 물체의 앞뒤를 가리는 깊이 테스트는 폴리곤으로 논리적 세계를 만드는 데에 아주 중요한 도구입니다. 스텐실 테스트는 사용하기에 따라 유용한 도구가 될 수 있습니다. 현재 우리의 벌칸 프로그램에서는 프레임버퍼가 색 첨부물 이미지 뷰만 참조하고 있었죠. 이를 확장하여 파이프라인에서 깊이/스텐실 테스트를 할 수 있게 만들어 봅시다. 목차1. 버퍼를 위한 이미지 뷰2. 이미지를 깊이 버퍼로 사용하기3. 이미지를 스텐실 버퍼로 사용하기요약과제 본문1. 버퍼를 위한 이미지 뷰잠시 이전의 그림을 떠올려 봅시다. 우리는 왜 여러 개의 프레임버퍼를 만들어 스왑체인에서 받아온 이미지 번호와 맞춰서 사용했던가요? 더블/트리플 버퍼링을 위해서였습니다. 요컨대 보여줄 이미지는 보여주고 새로 그리는 건 다..
2022.06.21 -
Vulkan - 5. 인덱스 버퍼와 스테이징 버퍼
개요대표적으로 삼각형 단위로 정점을 그릴 땐 인덱스 버퍼를 사용하여 동일한 데이터를 여러 번 사용하도록 할 수 있습니다. 아무래도 정점 셰이더에서 처리할 양도 줄일 수 있고 대부분의 경우 메모리도 크게 아낄 수 있을 테니 그래픽 렌더링을 한다면 인덱스 버퍼링을 기본으로 한다고 봐도 되겠죠. GL에서는 VBO와 IBO를 바인드하여 VAO를 만들고 glDrawElements로 그렸었는데, 벌칸에서는 이들을 어떻게 연관지을까요? 또, 지금 프로그램에서는 CPU에서 메모리 맵을 이용하여 GPU가 읽을 수 있는 위치에 값을 씁니다. 하지만 정점 버퍼는 많은 경우에 해제되기 전까지 데이터가 변할 일이 없고, GPU에서만 사용할 수 있는 곳에 데이터를 밀어넣는 방식으로 하여 효율을 올릴 수 있다고 합니다. 이 방법을..
2022.06.21 -
Vulkan - 4. 공유(uniform) 변수
개요셰이더 프로그램에는 한 번의 그리기 명령의 모든 실행(invocation)에 대하여 공유되는 uniform이라는 변수가 있습니다. 주로 선형 공간에서의 변환을 주거나 조건, 샘플러 등을 주는 용도가 있었죠. GL에서는 glGetUniformLocation에 변수 이름을 넣어 얻어낸 위치를 저장해 두었다가 glUniform 계열 함수로 값을 지정했었는데요, 벌칸에서는 어떻게 할까요? 목차1. 리소스 기술자(descriptor)2. 공유 버퍼를 위해 리소스 기술자 사용하기 2.1. 버퍼 준비하기 2.2. 기술자 집합 2.3. 파이프라인에서 기술자 집합 참조하기 2.4. std1403. 푸시 상수4. 버퍼 관리에 대하여요약과제 본문1. 리소스 기술자(descriptor)벌칸 사양에서 사실상 공유 ..
2022.06.16 -
Vulkan - 3. 세마포어와 펜스
개요지난 시간에는 벌칸 API 함수를 불러와 쓸 수 있는 그래픽 카드를 찾고, 추상화 객체를 만들고, 창 시스템에 연결하여 삼각형을 그려 전달해 보았습니다. 글의 끄트머리에 잠시 동기화가 필요하다며 이미지를 받아온 다음에야 세마포어로 신호를 주고 그리기를 시작해야 한다고 했었는데요, 이번 글에서는 명시적으로 사용할 수 있는 동기화의 유형에 대하여 간단히 알아보고, 활용해 보겠습니다.이 글은 사양의 7장을 기반으로 작성됩니다. 밑바닥부터 알지 않다면 쉬운 개념은 아닌 모양이니, 최대한 겉부분만 보고 나머지는 간단한 활용을 통해 알아봅니다. 따라서 이론을 알고자 한다면 해당 링크를 이용해 주세요. 목차1. 동기화의 필요성 1.1. 수행 종속성 1.2. 메모리 종속성2. 동기화 객체3. 펜스와 세마포어 활..
2022.06.15