ashen-aetna-ko

잿빛 에트나 (Ashen Aetna)

— 재 덮인 화산 위를 녹슬게 비틀거리며 헤매기

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

소개 및 면책 조항 건너뛰기

서문

왜 또 다른 그래픽스 프로그래밍 튜토리얼일까요? 저는 Vulkan 튜토리얼이 이미 너무 많다고는 생각하지 않습니다. 특히 Rust로 된 것은 더욱 그렇습니다. 어쨌든, 약간 다른 방식의 설명이 (Vulkan에 대한 것이든, Rust에 대한 것이든, 혹은 3D 기초 전반에 대한 것이든) 도움이 될 수도 있을 겁니다. 이 튜토리얼에 대한 제 계획은 아래에 몇 자 적어두고, 먼저 “저자”에 대해 몇 마디 하겠습니다.

제가 이런 튜토리얼을 쓸 자격이 있냐고요? 솔직히 말해, 거의 전무합니다. 저는 시간이 날 때, 주로 휴일에 작은 프로그래밍 프로젝트를 시작했다가, 시간과 기분이 허락할 때 몇 달 뒤에야 그 프로젝트로 돌아오는 취미 프로그래머입니다. 이 때문에 이전에 했던 프로그래밍 실험의 상당 부분을 다시 잊어버려서 (어느 정도는) 새로 시작해야 하는 일이 벌어지곤 합니다. 이 튜토리얼이 다음에 제가 그래픽스/Vulkan을 시작하려 할 때 도움이 되기를 바랍니다. (이 튜토리얼은 코드에 주석을 다는 것을 더 높은 수준에서 대체하는 역할도 합니다.)

그럼 최소한 숙련된 Rust 프로그래머는 되냐고요? 아닙니다. 위에 말했듯이, 가끔씩 프로그래밍에 손을 대는 취미 프로그래머일 뿐입니다. 지난 몇 번 동안 제가 선택한 프로그래밍 언어는 Rust였습니다. 제 친구 같은 컴파일러는 제가 멍청한 짓을 하고 있다고 미리 알려주고 프로그램 컴파일을 거부해서, (숙련된 C++ 프로그래머라면 애초에 만들지도 않았을 거라고 주장할) 버그를 찾느라 몇 시간을 절약해 줍니다. 그 버그가 없었다면 프로그램은 그냥 충돌했을 테니까요. 동시에 Rust는 강력하고 빠릅니다. 저는 시간이 지나면서 좋은 아이디어 한두 개를 배웠을지도 모르지만, 정식으로 Rust 교육을 받은 적도 없고, 대규모 Rust 프로젝트나 Rust 코드 협업 경험도 없습니다. 그래서 제가 작성할 코드는 때때로 전혀 관용적이지 않을(unidiomatic) 수 있으며, 여전히 나쁜 아이디어를 포함하고 있을 수 있습니다. 하지만 코드가 너무 흉해 보이지는 않을 겁니다. 왜냐하면 언젠가 rustfmt를 설치하고 저장할 때마다 실행되도록 설정해 뒀기 때문이죠. 다른 몇몇 문제에 대해서는 Clippy가 저에게 소리칠 수도 있는데, 저도 보통은 그걸 피하려고 노력합니다. 저는 아마도 완전히 명백하고 사소한 문제들에 대해 가끔씩 코멘트를 달거나(단지 제가 실제로 알게 된 것보다 더 일찍 알았으면 좋았을 것이라거나, 저에게는 새로운 발견이기 때문에), 다른 사람이 더 잘 알았을 법한 내용에 대해 오해의 소지가 있는 설명을 할지도 모릅니다. 그럼에도 불구하고, 저는 종종 어떤 프로그래밍 선택이나 변경에 대한 이유가 설명된 것을 보는 것이 꽤 도움이 된다는 것을 알게 되었습니다. 어쩌면 제 논리가 누군가에게 도움이 될 한두 군데를 짚어낼 수도 있겠죠. 그리고 만약 제가 무언가에 대해 완전히 틀렸거나 엄청나게 어리석은 방식으로 코드를 작성한다면, 물론 코멘트를 남겨주시면 감사하겠습니다.

“3D 관련 작업”에 필수적으로 따라오는 수학에 관해서는 사정이 좀 더 낫습니다. 기초적인 수학만으로도 충분하며, 그 부분에 대해서는 어느 정도 자신 있습니다.

몇 군데에 (아주 큰) 감사를 표해야겠습니다.

이 튜토리얼이 존재할 수 있는 것은 부분적으로 (당연하게도) Vulkan과 Rust, 그리고 ash, vulkan-tutorial.com, github.com/unknownue/vulkan-tutorial-rust, learnopengl.com, github.com/SaschaWillems/Vulkan의 (제작자들) 덕분이며, 또한 glium과 nehe.gamedev.net 덕분이기도 합니다. (그리고 지금 당장 생각나지 않는 더 많은 분들 덕분입니다.)

감사합니다!

(분명히 하자면, 그분들은 어떤 식으로든 이 프로젝트를 보증하지 않았으며, 제가 저지를 (아마도 많을) 실수에 대해 책임이 없습니다.)

어떤 부분은 언급된 튜토리얼 사이트들에서 더 잘 설명되어 있을 수 있고, 어떤 부분은 그 내용과 매우 유사하거나 그대로 복사한 것일 수도 있습니다 (하지만 저는 정보를 한곳에 모아두고 싶습니다. 다음에 그래픽스 프로그래밍을 시작할 때 저 자신을 위한 출발점으로 삼으려는 제 동기를 참고해주세요).

계속하기