ashen-aetna-ko

Ashen Aetna (애셴 에트나)

— 재로 뒤덮인 화산 위에서 녹슨 채 비틀거리기

(3D 그래픽스, Rust, Vulkan, ash에 대한/속의/관한/과 함께하는 튜토리얼)

계획이 뭔가요? — 앞으로 무엇을 기대할 수 있는지에 대한 몇 가지 힌트.

“따라 해보세요(Follow along)”라는 말은 제가 이 ‘화산’ 위에서 어떻게 비틀거리는지를 따라와 달라는 뜻입니다.

(부제에서 알 수 있듯이) 다루는 범위는 상당히 불분명하고 너무나도 방대합니다. 우선 일반적인 3D 그래픽스가 있습니다. ‘좌표를 이용해 공간상의 점을 기술하는 방법을 안다’, ‘화면에 무엇을 그릴지 안다’에서부터 ‘…그것이 사실적이거나 보기 좋게 만들기’까지는 수많은 단계가 있습니다. 그리고 Vulkan이 있습니다. 이는 본질적으로 “그래픽 카드와 어떻게 대화하는가?”라는 질문과 같습니다. — 이는 상당 부분 첫 번째 문제(3D 그래픽스 일반)와는 별개의 문제입니다. 이와 밀접하게 관련된 질문으로 “이것을 Rust 코드로 어떻게 구현하는가?”(또는 여기서는 “ash를 어떻게 사용하는가?”)가 있습니다. 또한 제가 ‘에트나’를 오르면서 탐험하고 싶을지 모르는 Rust의 다른 측면이나 Rust를 활용할 다른 주제들(아마도 그래픽스와 느슨하게 연결된)이 있을 수도 있습니다… (‘비틀거린다’는 것은 결코 ‘직선으로만 나아간다’는 의미가 아니니까요.)

이 튜토리얼은 기본적으로 소스 코드에 주석을 다는 방식이 아니라, 텍스트를 중심으로 하고 소스 코드가 이를 보조하는 형태가 될 것입니다. 순서는 최종 코드에 나타나는 순서가 아니라, ‘제가 언제 이 문제를 마주쳤고/이 코드를 작성해야 했는가’하는 시간 순서입니다. 소스 코드는 본문에 포함될 것입니다. 따라오면서 복사해서 붙여넣으세요. 종종 코드 조각들이 여러 번 등장하고, 약간의 수정을 거치며 다시 다뤄질 것입니다 (위에서 말한 시간 순서를 생각해보세요). [코드를 어디에 붙여넣어야 할지 충분히 명확하게 전달되기를 바랍니다.] 다른 이야기지만, 초기 부분을 작성하면서도 “아, 지금 다루고 있는 이것을 대비해서 그 부분을 더 잘 만들 수 있었을 텐데”라고 생각한 적이 꽤 많았습니다. 저는 대체로 다시 돌아가서 그것을 ‘수정’하는 것을 자제했습니다. (그렇지 않았다면 저는 여전히 수정 작업에 매달려 앞으로 나아가지 못했을 것이고, 여러분은 분명 아직 이 글을 읽지 못하고 있었을 겁니다.) 나중에 이전 부분으로 돌아가 개선할 수도 있겠지만, 지금으로서는 무언가 써 내려가는 것이 더 중요합니다.

초반부는 Vulkan 측면에 크게 초점을 맞출 것입니다 (‘그래픽스에 대해 배우기’보다는 ‘API 다루기’에 가깝습니다) — 더 흥미로운 응용 프로그램에서 사용하기 전에 먼저 무언가를 설정해야 하니까요. 하지만 결국에는 더 흥미로운 ‘그래픽스 관련 내용’을 실제로 다룰 수 있기를 바랍니다. 이 ‘튜토리얼’이 그 지점까지 도달하지 못하고 몇 개의 초기 챕터 이후에 중단될 가능성도 최소한 그만큼 높습니다. 저는 아무것도 약속하지 않습니다. 글을 쓰는 데는 시간이 걸리고 (예상보다 훨씬 더 많이), 이른바 ‘현실’이 끼어들 수도 있는 등 여러 이유가 있습니다. 그 시점까지 나온 내용만으로도 누군가에게는 도움이 되기를 진심으로 바랍니다. 특히 초반부는 다른 Vulkan 튜토리얼을 이미 읽어보셨다면 새로운 점을 거의 느끼지 못할 가능성이 높습니다.

저는 3D 그래픽스 기초에 대해 일부 자세히 다루고 싶습니다. 비록 저 자신만을 위해 튜토리얼을 쓴다면 이런 내용이 필요 없겠지만요. 그리고 이 분야의 초심자 중 얼마나 많은 분들이 Vulkan으로 시작하는지에 대해서도 완전히 확신하지는 못합니다. (특히 이 분야가 처음이시라면, 챕터를 순서대로 읽을 필요는 없으며, 시간이 꽤 걸릴 Vulkan 설정 부분은 대충 훑어보는 것이 좋을 수 있다는 점을 조언해 드립니다. (해당 부분의 끝에 있는 코드를 먼저 가져다 쓰고, 나중에 세부 사항을 읽기 위해 다시 돌아오세요.))

난이도는 유동적일 것이며, 제 설명의 초점도 마찬가지일 겁니다. 그래서 여러분에게 제시할 수 있는 통일된 선수 지식 목록은 없습니다. (Vulkan과 3D 그래픽스 일반 양쪽 모두에서 ‘완전한 초심자’를 대상으로 하려고 노력할 것입니다. — 적어도 지금 계획은 그렇지만, 바뀔 수도 있습니다.)

그럼에도 불구하고: 즐겁게 배우시길! 그리고: 시작해 봅시다!

(여기까지 제 장황한 글을 읽으셨다면, 상당한 인내심을 가지신 분 같군요.)