달 지도를 그리기 위한 펜 플로터 제작 시도
요약
본 기사는 펜 플로터(pen plotter)를 이용해 달 표면의 높이 지도(height map)를 그리는 과정을 다룹니다. 구형 좌표계를 위도/경도로 변환하고, 이를 셰이더에 적용하여 메시 정점을 변위시키고 색상을 입히는 기술적 시도를 보여줍니다. 이 과정은 지형학적 특징을 시각화하는 데 초점을 맞추고 있습니다.
핵심 포인트
- 구형 좌표를 위도/경도로 변환하여 높이 맵 샘플링 가능
- 셰이더를 이용해 구 메시 정점 변위 및 색상 입히기 구현
- 높이에 따른 그라디언트 텍스처 샘플링으로 지형 명확화
- 지형의 가파른 정도(경사)를 흰색으로 강조하는 테스트 진행
여러분 안녕하세요, 여기가 달입니다. 아니, 곧 그렇게 될 겁니다. 제가 여기에서 높이 지도(height map)를 다운로드했고, 예전 지리 게임의 함수를 빌려 구형 좌표(sphere point)를 위도와 경도로 변환한 다음, 0과 1 사이로 스케일링하여 지도를 샘플링할 수 있게 했습니다. 저는 이것을 달의 셰이더(shader)에 사용하여 구 메시(sphere mesh)의 정점들을 변위시키고, 일부 스케일링 계수와 함께 멋지고 울퉁불퉁하게 만들 것이며, 높이에 따라 검은색에서 흰색으로 메시에 색상을 입힐 것입니다.
좋습니다, 작업할 수 있는 몇 백만 개의 정점을 갖도록 구의 해상도(sphere resolution)를 설정하고, 이제 높이 승수(height multiplier)를 늘려보겠습니다. 여기가 지구에서 보이는 달의 면입니다 — 그리고 이곳은 꽤 평평하다는 것을 알 수 있습니다. 북쪽에는 매우 인상적인 산맥 고리 쌍이 있습니다 — 하지만 그 거대한 크레이터들을 한때 둘러쌌던 곳들은 이후 용암으로 채워졌습니다. 그래서 이 마리아(maria)들에는 더 작고 최근의 충돌 자국들이 흔적을 남기고 있을 뿐입니다.
마리아는 라틴어로 '바다'를 의미할 수 있습니다 — 예전에는 이 평원들이 바다라고 생각되었기 때문이죠. 하지만 반대편으로 돌아가면, 라틴어 바다는 적고... 스위스 치즈 같은 곳이 많습니다. 겉보기에는 이유가 있는 듯한 두꺼운 지각을 가지고 있어서 용암이 관여할 가능성이 적은 것 같습니다. 제가 어디로 가고 있는지 모르겠습니다. 그냥 얼마 전에 달 근접 비행(lunar fly-by)에 영감을 받아 이것저것 만져보며 우리 달에 대해 좀 더 잘 알아보고 싶었나 봅니다.
현재 높이에 기반하여 그라디언트 텍스처에서 샘플링하도록 셰이더를 빠르게 수정하고 싶습니다. 이렇게 하면 고도를 더 명확하게 구별하는 데 도움이 될 것입니다. 가장 깊은 분지에서는 검은색, 저지대에서는 보라색으로 시작해서 중간 지대에서는 파란색에서 녹색으로 점차 변하며, 봉우리에서는 노란색과 빨간색까지 올라갑니다. 그래서 여기 남쪽에는 이 거대한 분지가 있는데, 우리 태양계에서 가장 큰 충돌 분화구 중 하나인 것 같고, 달의 가장 낮은 지점은 그 안에 있는 작은 분화구 중 한 곳에 있습니다.
한편, 가장 높은 지점은 저기 위에 있어서 에베레스트보다도 더 높으며, 평균 표면 위로 대략 11km에 달합니다. 우리는 아직 북극을 제대로 본 적이 없으니, 저쪽으로 가봅시다. 여기 역시 분화구들로 뒤덮여 있지만, 남부 분지만큼 극적이지는 않습니다. 그리고 여기 평지로 돌아왔는데, 제가 하늘에서 자주 응시하고 있다는 것을 깨달았지만, 실제로 우리가 그것들을 무엇이라고 명명했는지 알지는 못합니다. 그래서 이 광대한 지역이 폭풍의 바다(ocean of storms)라는 것을 배웠습니다. 이곳은 우리가 비의 바다(sea of rains)에서 감탄했던 산맥 고리들과 평온의 바다(sea of serenity)로 구분되어 있습니다.
그 아래에는 고요의 바다(sea of tranquility)가 있습니다. 물론 최초의 달 착륙지였던 곳으로 유명하죠. 저는 착륙선에서 내려 평지를 가로질러 달 산맥 속으로 작은 하이킹을 하는 모습을 상상해 봅니다. 실제로 하이킹을 생각하니 항상 멋져 보인다고 생각했던 이러한 종류의 지형도(topographic map)가 떠올랐습니다. 비록 지옥 바닥 습지(Hell Bottom Swamp)가 제가 첫 번째 목적지로 선택할 곳은 아닐지라도 말입니다. 어쨌든, 저는 달 표면이 이렇게 등고선으로 그려진 것을 보고 싶었습니다.
그래서 여기 간단한 테스트를 해봤는데, 현재 픽셀의 네 모서리에서 높이 값을 읽어온 다음, 그 높이 중 관심 있는 특정 높이 값보다 높은 것이 있는지, 그리고 낮은 것이 있는지를 테스트합니다. 만약 그렇다면, 이 지형이 해당 픽셀에서 그 높이 값을 통과하고 있다는 의미이며, 저는 그것을 흰색으로 강조할 것입니다. 좋습니다, 이제 높이 값을 따라 스캔하면서 어떻게 보이는지 봅시다.
이를 통해 지형의 가파른 정도에 대한 인상을 얻을 수 있습니다. 영역이 평평할수록 선이 더 빠르게 스캔될 것이기 때문입니다. 달의 근접면도 살펴보겠습니다. 이것의 좀 더 실용적인 버전은 대신 일정한 간격으로 스냅샷을 찍고, 그것들을 한 번에 모두 표시하는 것입니다. 좋습니다, 여기 임의의 지점으로 확대해 봤는데, 우리의 선들이 어떻게 보이는지 봅시다. 하나, 둘, 셋, 넷, 다섯, 여섯, 일곱, 여덟, 아홉, 열 개의 선이 있습니다.
그래서 전에는 시간적으로 가까운 선들이 지형이 더 평평한 곳을 보여주었다면, 이제 공간적으로 가까운 선들은 물론 지형이 더 가파른 곳을 보여줍니다. 이런 종류의 지도는 매우 유용할 것이라고 확신합니다—하지만 더 중요한 것은 정말 예쁘게 보인다는 것입니다. 저는 사실 달의 등고선 인쇄물을 벽에 걸어두는 것을 즐길 것 같다고 생각했습니다. 그래서 오래된 프린터를 꺼냈지만, 불행하게도 잉크가 부족해서 결과물이 얼룩덜룩한 난장판이었습니다.
좋아 — 그럼 새로운 계획이야. 나만의 작은 펜 플로터(pen plotter)를 만들어서 달 지도를 그려보려고 해. 컴퓨터 외부에서 어느 정도는 작업할 수 있는 프로젝트가 한동안 없었거든. 그래서 재미있는 변화가 될 것 같기도 하고, 아니면 완전히 재앙이 될지도 모르겠어... 어떻게 될지 보자고! 자, 몇 가지 부품들을 샀는데 — 아주 정밀하게 제어할 수 있을 만한 스텝 모터(stepper motors) 한 쌍이랑, 그 회전을 선형 운동으로 변환해서 펜을 움직일 벨트도 필요해. 물론 여기 있는 작은 바퀴의 이빨에 물릴 수 있도록 벨트를 따라 작은 이가 나 있어 — 아니면 정확히 어떤 단어가 맞지? 그래서 저걸 샤프트(shaft) 각각에 하나씩 붙여야 해. 지금은 느슨하게 돌아가니까, 이걸 조일 나사들이 필요해. 그리고 이런 아주 작은 것들을 어디서 찾을 수 있을지 여기저기 찾아다니는 데 반 시간밖에 안 걸렸는데, 알고 보니 이미 안에 들어있었어. 좋아, 조금 바보 같다는 느낌이 들지만, 이제 이빨들이 모터와 함께 돌아가게 했어.
그래서 이걸 모두 조립할 기발한 계획을 Blender에서 짜보고 있어. 그래서 이렇게 두 개의 타워를 생각하고 있고, 그 사이에 모터를 넣고, 반대편에도 또 다른 타워 쌍을 배치해서 이 두 막대를 지지하게 하려고 해. 벨트는 그 사이를 지나가면서, 내가 아직 알아내야 할 다른 쪽 끝에 무언가에 연결될 거야. 하지만 벨트가 루프(loop)를 그리며 돌아가면, 이 플레이트를 함께 끌어당겨서, 바라건대 막대 위를 부드럽게 미끄러지게 만들려고 해.
이 접시는 종이가 놓일 받침대예요. 왜냐하면 제가 페이지를 한 축을 따라 움직이고 펜은 다른 축에서 움직이는 게 더 쉬울 것 같아서요. 펜이 두 가지를 다 하도록 시도하는 것보다는요. 좋아요, 막 봉의 직경을 재봤는데—7mm 정도인 것 같아요. 그래서 그걸 바탕으로 작은 3D 프린팅 작업을 진행했어요. 자, 여기 있어요. 움직여 보는 걸 봅시다. 어, 별로 잘 안 되네요. 하지만 간단히 조정한 후에 다시 테스트를 해봤고, 이번에는 적어도 맞기는 하는데—좀 흔들거려요.
우선 더 정확하게 측정하는 법을 배워야 하고, 두 번째로는 좋은 결합을 얻기 위해 일반적으로 어떤 공차(tolerance)가 필요한지 알아내야 해요. 그래도 약간의 시행착오만으로도 이제는 만족할 만한 것을 갖게 된 것 같아요. 그리고 탑들(towers)도 출력했으니, 이 하부 구조를 조립하기 시작할 거예요. 이게 끝나면 모터를 넣을 건데, 예전에 만들었던 작은 레이트레이싱(raytracing) 참고 상자에서 남은 발사 나무(balsa wood)가 있어서 그걸 대략 A5 크기로 잘라 페이지 받침대로 쓸 거예요.
솔직히 이 프로젝트에 대해서는 제가 조금 부족하다고 느끼지만, 다행히 보강재들이 방금 도착했어요. 좋아요, 다음 단계는 아마도 접시를 슬라이더(sliders)에 붙이는 것일 거예요. “감사합니다! 바로 이게 제가 필요했던 것이네요…” 불행하게도 접착제 캡은 물리적으로 제거할 수 없었어요. 그리고 결국 전체가 오래전에 말라버렸다는 것을 알게 되었죠. 하지만 짧은 장보기 끝에 다시 작업에 착수했어요. 이제 이 받침대를 가지런하고 평평하게 맞춰야 해요…
아! 저는 이런 것에 정말 형편없어요… 하지만 마침내 어느 정도는 곧게 고정시켰다고 할 수 있겠네요. 자, 여기 모터 반대쪽 끝에 벨트를 부착할 만한 의심스러운 디자인을 보여드릴게요. 이 레일들을 따라 미끄러지면서 장력을 조절할 수 있는 작은 물건이에요. 그리고 제자리에 고정하기 위해 끈을 감는 나사(knobs)도 추가했어요. 산업적으로 일반적으로 처리되는 방식은 아닐 것 같지만, 제대로 어떻게 해야 할지 생각하는 데 어려움을 겪고 있어요. 우리의 목적에는 괜찮기를 바라요.
여기서 벨트를 시험해보고 있는데, 모터 홀더가 모터를 제대로 잡아주지 않는 것을 알게 되었어요. 그 작은 테두리로는 충분할 거라고 왜 생각했는지 모르겠네요. 그래서 이번에는 더 높은 외함(enclosure)이 있는 새 버전을 출력하고 있어요. 이 기계가 돌아가는 동안, 아까 페이지 플레이트에 붙이고 싶은 부품을 출력했는데, 벨트가 이렇게 통과하게 될 거예요. 한쪽은 자유롭게 미끄러지게 하고, 다른 쪽은 접착해서 플레이트를 함께 당기도록 할 거예요.
원래 계획은 그랬지만, 이제는 벨트가 지나가면서 마모될까 봐 걱정돼서, 한쪽으로만 통과시키고 다른 쪽은 자유롭게 남겨둘 생각이에요. 이게 작동할 것 같아요. 그래서 접착제를 듬뿍 바르고, 손가락에 붙지 않게 여기 다시 끼워보려고 해요. 사실 좀 어려운 작업이네요. 휴, 아슬아슬했어요! 좋아요, 그럼 제 측정값이 맞다면 이 부품을 여기에 있는 플레이트 위에 올려놓으면 되겠네요.
그리고 큰 모터 홀더가 방금 완성되었으니, 이제 모터를 안에 밀어 넣겠습니다. 오, 사실 좀 빡빡하네요. 하지만 괜찮겠어요. 그래서 벨트를 양쪽 끝에 감고 이걸 뒤로 밀어서 장력을 가하겠습니다. 지금은 마찰만으로도 괜찮게 유지되는 것 같지만, 나중에 미끄러지기 시작하면 실로 묶을 거예요. 이건 유망해 보이는데, 모터를 수동으로 돌리는 건 좀 지루할 테니 전기를 이용하는 게 좋겠어요.
우선 이 장치를 빠르게 열어보겠습니다. 우리가 실제로 무엇을 다루고 있는지 보는 것이 재미있다고 생각해서요. 그리고 저는 이런 것을 사용한 적이 없거든요. 자, 여기 중앙의 회전 가능한 영구자석 주변에 8개의 전자석이 배열되어 있습니다. 8개의 전자석은 두 그룹으로 배선되어 있어서, 이 4개를 함께 활성화하고 저 4개를 함께 활성화할 수 있습니다. 각 그룹 내에서 권선(winding)이 감긴 방향이 실제로 교차되는데, 한 쌍은 북극(north pole)을 안쪽으로 향하게 하고 다른 쌍은 남극(south pole)을 안쪽으로 향하게 합니다. 저는 이것을 각각 빨간색과 파란색으로 표현하겠습니다.
하지만 전류의 방향만 바꾸면 뒤집을 수 있습니다. 그리고 로터에서 튀어나온 50개의 작은 이빨도 볼 수 있습니다. 사실 더 자세히 보면... 영구자석의 북쪽 끝과 남쪽 끝에 각각 두 세트의 이빨이 정확하게 어긋나 있음을 알 수 있습니다. 이것은 전자석을 따라 보이는 총 48개의 이빨과 함께 작동합니다. 하지만 모든 것이 정확히 어떻게 맞물리는지 이해하는 데 도움을 주기 위해, 간단한 시각화 도구를 만들기 위해 코딩 휴식을 잠시 가졌습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 YouTube Sebastian Lague (절차적 생성)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기