5주차 · 2026-02-09 ~ 15
네이티브 프로토타입
네이티브 스택 위에서 시작한 첫 실제 주차. Blender에서 3D 도시를 모델링하고, 피보나치 나선 외부를 유체 모션으로 교체했고, 코드가 계속 움직이는 동안 논문 초안도 쓰기 시작했다.
지난 주 나는 플랫폼 이주를 끝냈다. 네이티브 애플리케이션이 창을 열고, 파티클을 렌더했고, 내가 쓸 수 있는 속도로 손 추적을 돌렸다. 그것은 기반이었지 경험이 아니었다. 이번 주부터는 질문이 바뀌었다. “애플리케이션이 돌아가기나 할까”에서 “그 안에 실제로 무엇이 있을까”로. 세 개의 트랙이 동시에 움직이기 시작했다. 파티클이 놓일 3D 도시, Week 4의 피보나치 나선을 대체할 재작성된 외부 비주얼, 그리고 논문의 첫 초안.
플랫폼 로드맵
- 종료 단계 01
웹 브라우저 프로토타입
1주차 ~ 3주차브라우저 안의 Three.js. 세 가지 축이 함께 돌 수 있다는 것을 확인했다. 지연시간, 성능, 시각적 천장 모두 브라우저 환경으로 귀결되는 벽에 부딪혔다.
- 정립됨 단계 02
네이티브 애플리케이션
4주차Python, ModernGL, OpenGL 4.3. 컴퓨트 셰이더와 SSBO를 통한 GPU 직접 접근. 프로젝트의 나머지가 머물 플랫폼.
- 진행 중 단계 03
네이티브 애플리케이션 발전
5주차 이후플랫폼 위에 실제 경험을 쌓아 올리기. 도시 모델링, 유체 외부 모션, 오디오 통합, 그리고 프로젝트의 이후 모든 단계.
Week 5 시작 시점에서 프로젝트가 놓여 있는 자리는 위 타임라인의 세 번째 단계다. 플랫폼은 정착됐다. 그 위에 무엇이 얹히는지는 아직 열려 있다.
도시 모델링
네이티브 애플리케이션에는 공간이 필요했다. 이 시점까지 파티클은 어떤 건축적 맥락도 없는 추상적인 3D 공간 안에 존재했다. 주변에 아무것도 없는 파티클 구름은 장소를 전달하지 못한다. 그래서 이번 주에 Blender에서 첫 번째 도시 모델링을 시작했다.
모델은 의도적으로 단순하다. 대략적인 건물 형태, 평평한 지면. 파티클과 경쟁하지 않으면서 공간의 감각을 전달하는 정도. 이렇게 둔 이유는 두 가지다. 첫째, 나는 Blender 전문가가 아니고 정교한 건축 모델링은 내가 가지고 있지 않은 몇 주를 쓰게 만들었을 것이다. 둘째, 파티클이 주된 시각 요소다. 건물이 너무 사실적으로 보이면 파티클과 주의를 두고 싸울 것이고, 이 작품의 핵심은 건축이 아니라 파티클이다.
Cadmapper를 써서 OpenStreetMap에서 기본적인 건물 풋프린트를 가져왔고, 그 형태를 Blender에서 손으로 다시 쌓았다. Cadmapper는 정확한 풋프린트 위치를 주지만 건축적 변주가 없는 평평한 익스트루전을 생성한다. 배치에는 유용하지만 최종 형태로 쓰기엔 부족하다.
같은 모델이 네이티브 애플리케이션에 정적 플레이스홀더로 들어온 모습. 바닥에는 그리드가 보인다.
지역은 아직 정해지지 않았다. 부기스와 래플스 플레이스 두 곳 모두의 앰비언트 오디오 녹음을 가지고 있고, 어느 쪽이든 첫 번째 내부가 될 수 있다. 이번 주의 모델링 작업은 특정 장소를 확정하는 것이 아니라 파이프라인을 제대로 갖추는 일에 관한 것이었다. 3D 모델은 컨테이너가 되고, 오디오와 파티클이 그 컨테이너가 어떤 장소인지를 정의한다.
이 두 녹음은 내부가 응답해야 하는 원재료다. 파이프라인에서 이후 벌어지는 모든 일은 이 트랙들이 실제로 어떻게 들리는지에서 출발해야 한다.
공간 안의 파티클
도시 컨테이너가 존재하자, 다음 차례는 그것을 파티클 시스템으로 채우고 두 레이어가 서로 어떻게 읽히는지를 보는 일이었다. 이 작업은 여러 번의 이터레이션을 거쳤다. 첫 번째 시도는 너무 빽빽했다. 파티클이 모든 틈을 메워 건축이 뒤에서 가라앉았다. 두 번째 시도는 밀도를 낮춰 공간의 형태가 숨을 쉴 수 있게 했다. 세 번째는 움직임을 풀어 파티클이 고정된 경로를 따라가지 않고 오디오에 반응하도록 했다. 네 번째에서 작동하는 조합이 자리 잡혔다. 건물은 여전히 시야를 고정해 주지만 파티클이 시각적으로 가장 두드러지는 사건으로 남는다.
피보나치에서 유체로
Week 4의 외부 비주얼은 파티클이 그리는 피보나치 나선 패턴이었다. 수학적으로는 깔끔했지만 시각적으로는 정적이었다. 새 플랫폼에서 파티클을 렌더할 수 있다는 증명으로서는 기능했지만, 이 프로젝트에는 맞는 움직임이 아니었다. 나선은 기하학적이다. 장소의 소리는 그렇지 않다.
이번 주에는 외부 모션을 유체적 드리프트로 재구축했다. 파티클은 이제 고요한 방 안에서 연기가 움직이는 방식, 또는 빛줄기를 통과하는 먼지가 움직이는 방식으로 움직인다. 더 느리고, 덜 정의되어 있고, 정밀한 궤도가 아니라 진폭과 확산으로 오디오에 반응한다.
Week 4 외부. 수학적으로 생성된 파티클 나선. 시각적으로는 일관되지만 기계적이고, 그것이 표현해야 할 소리와 아무런 관계를 맺지 못했다.
Week 5 외부. 파티클이 고요한 공기 속을 연기가 떠다니듯 드리프트한다. 움직임이 자신의 미리 정해진 경로를 달리는 대신 오디오를 따라간다.
이것을 제대로 느껴지게 만드는 데 이번 주의 대부분이 걸렸다. 파티클을 구동하는 힘 값은 사용 가능한 범위가 아주 좁다. 힘이 너무 작으면 파티클은 가만히 있는다. 너무 크면 관객이 무슨 일이 벌어지고 있는지 알아채기도 전에 화면 밖으로 흩어져 나간다. 작동하는 대역은 내가 예상했던 것보다 좁았다. 튜닝이 끝났을 때 이전 외부와 새 외부의 차이는 명확했다. 나선은 내가 만든 것이었다. 유체는 반응하는 것처럼 보이는 것이었다.
논문 첫 초안
코드 작업과 함께 이번 주에 논문 초안도 쓰기 시작했다. 최종 텍스트가 아니라 구조적 골격이다. 섹션들의 아웃라인, 각 섹션의 단어 예산, 그리고 내가 받쳐 줘야 할 주장들에 대한 1차 패스.
이 일은 생각보다 어려웠다. 나는 네 주 동안 코드로 생각했고, 셰이더 유니폼과 버퍼 레이아웃 사이를 오갔다. 온전한 문단의 영어 글쓰기로 전환하는 일은 다른 종류의 주의를 요구했고, 한국어로 사고한 것을 영어로 옮기는 번역 비용이 그 위에 한 층 더 얹혔다. 글쓰기의 첫 세 시간은 나중에 다시 고쳐 쓰게 될 두 문단 정도를 만들었다. 다음 날이 더 생산적이었는데, 첫날의 구조적 결정들이 이미 자리 잡혀 있었기 때문이다.
지도교수와의 주간 미팅이 이 한가운데에 떨어졌다.
이 시점에 받기에 알맞은 피드백이었다. 플랫폼 결정은 방어 가능했고 문서화되어 있었다. 프로젝트 자체, 즉 지역들의 구체적 디자인과 상호작용의 구체적 시스템은 아직 풀어 나가는 중이었다. 그 사실을 정직하게 인정하는 편이 디자인이 실제보다 더 진전된 척하는 것보다 유용했다. 논문의 초안은 이제 내가 아직 완전히 내리지 못한 결정들을 위한 자리를 품고 있어야 했고, 그것이 내가 예상했던 것보다 더 강하게 구조를 형성했다.
최종 결과 · 주차 마감 상태