13주차 · 2026-04-06 ~ 12
숲을 짓는다
이스트 코스트 파크의 첫 주. 부기스 시스템을 복사해 와 자연 장소에 맞게 다시 지었다. 절차적 하늘, 편집 가능한 지형 위의 연못, 여덟 개의 트리 모델. ECP 는 몸을 갖게 되었다, 아직 빛도 생명도 없었지만.
지난 주에 Open Studios 가 부기스를 온전한 지구로 돌아가게 한 채로 끝났다. 유리 인테리어, 네 가지 종교 모티프, 13 트랙 오디오 믹스, 파티클 유체, 모두 서로를 지탱해 주고 있었다. 이제 프로젝트가 답해야 하는 질문은, 같은 시스템이 첫 지구와 공유하는 아이디어가 하나도 없는 두 번째 지구를 담을 수 있는가였다. 이번 주가 그 답의 시작이었다. 프로젝트의 두 번째 장소, 이스트 코스트 파크가 열린다.
바탕이 되는 시스템 대부분은 손대지 않고 넘어왔다. 다시 지어야 하는 것은 그 위에 얹히는 모든 것이었다. 하늘. 땅. 장소 자체의 아키텍처. 이번 주가 ECP 에게 몸을 주었다. 절차적 하늘, 실제 지형 위에 놓인 연못, 공간을 채우는 여덟 개의 트리 모델. 조명, ECP 전용 오디오, 파티클 재작성은 모두 다음 주의 일이다. 이번 주는 그것들이 설 바닥을 까는 작업이었다.
다른 종류의 장소
부기스는 건축이다. 종교다. 밀집한 거리다. 네 문화가 서로를 투과하며 포개지는 장소에 대한 이야기이기 때문에 유리가 비주얼 언어다. 이 중 어느 것도 이스트 코스트 파크에는 적용되지 않는다. ECP 는 싱가포르 동쪽의 해안 공원이다. 사람들은 달리기 위해, 자전거를 타기 위해, 피크닉을 하기 위해, 창이에 착륙하는 비행기를 보기 위해, 파도 소리를 듣기 위해 이곳에 온다. 건물이 없다. 부기스의 종교 구조물이 나무, 물, 하늘, 거리감으로 대체된다.
그래서 이번 주는 하나의 질문으로 열렸다. ECP 는 어떤 비주얼 언어를 가져야 하는가. 부기스 트리트먼트를 공원 위에 복사하는 것은 부조리했을 것이다. 투명한 유리, 네 가지 공존 모티프, 홀로그램 스캔라인은 문화가 가시성을 두고 협상하는 동네에 속한 것이다. 공원은 문화 사이의 협상이 아니다. 사람이 가로지르는, 끊기지 않은 자연 표면이다. ECP 가 결국 어떤 모습이 되든, 그것은 부기스가 썼던 시스템이 아니라 장소 자체에서 나와야 했다.
이번 주가 향한 방향은 해질녘의 숲이었다. 아키텍처적이고 레이어드된 것이 아니라, 연속적이고 대기적인 무언가. ECP 가 실제로 무엇인지에 맞추기 위해. 열린 공간, 서로 다른 거리감에 놓인 나무들, 날씨가 들어 있는 하늘. 이번 주는 숲이 빛을 얻기 전에 끝났다. 그러나 숲이 지어진 채로 끝났다.
숲의 바닥
하늘이 첫 조각이었다. 부기스에서 하늘은 실제 싱가포르 황혼의 사진 기반 HDRI 였다. 부기스가 실제 도시 해질녘의 알아볼 수 있는 무게를 필요로 했기 때문이다. ECP 는 HDRI 가 줄 수 없는 것을 필요로 했다. 정적 이미지는 분위기를 바꾸지 못한다. 반응하지도 못한다. 거기 그대로 있을 뿐이다. 그래서 ECP 의 하늘은 셰이더 안에서 처음부터 작성됐다. 세 개의 대기 밴드(지평선 헤이즈, 하늘 중간, 천정) 가 해안선이 아니라 숲 공터를 위해 선택된 색 그라디언트로 쌓인다. 천정 밴드에 흩어진 FBM 노이즈 구름이 느리게 움직인다. 지평선 근처에 저고도 포그 층이 레이 마칭으로 합성되어, 그려진 것이 아니라 볼류메트릭으로 느껴진다. 모든 파라미터가 유니폼이라, 하늘은 나중에 내가 원하는 무엇으로든 구동될 수 있다. 이번 주에는 하늘이 기본 상태로 그냥 자리에 있어, 그 앞에서 씬의 나머지를 지을 수 있게 했다.
다음은 연못이었다. 256 천 삼각형, glTF 포맷, 네 개의 서브메시를 가진 단일 메가 에셋. 부기스에서 연못은 빛을 굴절시키는 유리 오브젝트다. ECP 에서 연못은 그 위의 하늘을 반사하는 자연 수면이다. 임포트하고, 배치하고, 곧 도착할 파티클 시스템이 유체적으로 점유할 볼륨을 갖도록 시뮬레이션 영역에 페어런트로 묶었다.
연못 아래의 땅이 그냥 평평한 평면이어서는 안 됐다. 평평한 평면은 해안이 아니라 영화 세트처럼 읽힌다. 1000×1000 편집 가능한 바닥 메시를 추가하고, 풀 인스턴싱 시스템을 그 메시의 하이트맵에 바인딩해 모든 풀잎이 그 아래 지형의 정확한 높이에 앉게 했다. 씬 안에서 지형을 편집하면 그 변화가 실시간으로 풀에 전파된다. 약 100만 개의 풀 인스턴스가 표면을 채운다. 위치 지터와 스케일 변주가 랜덤으로 주어지고, 풀이 사각형이 아니라 잎처럼 읽히도록 알파 컷아웃 실루엣으로 렌더된다. 지금까지 프로젝트에서 단일 인스턴싱 시스템으로 가장 큰 것이고, 각 잎이 저렴했기 때문이 아니라 인스턴싱 파이프라인 덕분에 프레임레이트를 유지한다.
두 개의 작은 조각이 기반을 마무리했다. Real Shadow Map 패스를 추가해 씬을 태양 방향에서 2048×2048 깊이 아틀라스로 렌더링하고 PCF 3×3 필터링으로 샘플링해 부드러운 가장자리를 얻었다. GGX 스페큘러 모델을 메시 셰이더에 작성해, 연못 수면·풀·나무 표면이 자신들의 러프니스 맵을 통해 올바른 스페큘러 응답을 가질 수 있게 했다. SSAO 패스도 하프 해상도에서 구현하고, 테스트하고, 비활성화했다. ECP 에서는 SSAO 의 비용이 파이프라인에 유지할 만큼의 가시적 개선을 만들어 내지 않았다. 코드가 써지자마자 제거된 드문 경우.
여덟 그루의 나무
숲에는 나무가 필요했고, 공간이 반복적으로 읽히지 않을 만큼 다양한 종류의 나무가 필요했다. 여덟 개의 에셋이 세 그룹으로 통합됐다.
첫 번째 그룹 Tree 1 에서 Tree 3 는 같은 소스에서 온 세 개의 나무 모델이다. 다중 머티리얼 OBJ 파일로, 줄기와 잎이 별도 머티리얼을 갖고, 잎은 기하적으로 모델링되지 않고 알파 컷아웃 마스크로 실루엣을 만든다. 대부분의 실시간 숲 렌더링이 작동하는 방식이다. 폴리곤 카운트가 적당해서, Tree 1 에서 3 은 공간을 채우기 위해 군집으로 배치되는 인구(population) 나무다.
Tree 1 에서 3 은 또한 다중 머티리얼 OBJ 로더가 작성되어야 했던 지점이기도 하다. 프로젝트가 쓰고 있던 OBJ 로더는 메시당 단일 머티리얼을 전제했다. 부기스 아키텍처에서는 통했고, 첫 나무에서 곧바로 깨졌다. 새 로더는 동반되는 MTL 파일을 파싱하고, 명시 경로가 틀렸을 때 파일명 폴백으로 텍스처를 자동 발견하며, 잎 컷아웃을 위한 알파 합성을 처리하고, 첫 로드에서 파싱 결과를 압축된 NumPy 아카이브로 캐시한다. 같은 메시의 두 번째 로드는 캐시에서 읽어 거의 즉시다.
두 번째 그룹은 두 그루의 고디테일 앵커 나무다. Big Tree 1 은 100만 삼각형 OBJ 로, 세트에서 가장 기하적 디테일이 많은 에셋이자 개별 가지가 지각되어야 하는 전경 샷에서 읽히는 나무다. Big Tree 2 는 236만 삼각형의 glTF 이고, 프로젝트가 로드한 첫 glTF 메시다. 임포트를 처리하기 위해 정적 glTF 로더를 작성했다. 각 프리미티브의 정점 위치·노멀·UV·머티리얼 할당을 추출하고, 머티리얼별로 프리미티브를 병합해 VAO 카운트를 낮게 유지한다. glTF 포맷은 OBJ 가 줄 수 없는 것을 준다. 올바르게 작성된 정점 노멀, 별도 MTL 파일을 요구하지 않는 머티리얼 바인딩. 두 경로 모두 작동한다는 것은, 이제부터 어떤 소스의 트리 모델이든 로드된다는 뜻이다.
세 번째는 단일 에셋 Wood Stump. 28만 2천 삼각형 OBJ 로, 캐노피 요소가 아니라 지면 레벨 디테일로 배치된다. 나무와 그 위에 자라는 이끼에 대한 별도 머티리얼을 갖고 있어, 네 모델 그룹 중 가장 작지만 머티리얼은 가장 풍부하다.
합쳐서 보면, 새 다중 머티리얼 로더가 더한 캐싱이 ECP 씬의 로드 시간을 고통스러운 수준에서 감당 가능한 수준까지 낮춘다. 여덟 그루의 나무가 합쳐 수백만 삼각형이 넘는 씬을, 애초에 실무적으로 다룰 수 있게 만드는 것이 이 캐싱이다.
최종 결과 · 주차 마감 상태