Kirino 的游戏宝藏
← 022호로 돌아가기
게임 관찰

재생 속 1.4초와 팔백만 픽셀, Alex van Rossum이 digest로 《Wreckwing》의 끊김을 재현 가능한 노동으로 어떻게 박았나

파괴 비행작의 제작 기본값이 흔히 「먼저 무너지는 소란을 만들고, 끊김은 감으로 이펙트를 끄고 파편을 줄이며 어느 프레임이 비싼지 맞힌다」라면, 2026년 10월 초 네덜란드 인디 스튜디오 Trilithon Games의 Alex van Rossum이 자체 엔진 개발 로그에 펼쳐 놓은 숫자 묶음은 그 기본값 청구서를 재생…

저장한 글 ↗

파괴 비행작의 제작 기본값이 흔히 「먼저 무너지는 소란을 만들고, 끊김은 감으로 이펙트를 끄고 파편을 줄이며 어느 프레임이 비싼지 맞힌다」라면, 2026년 10월 초 네덜란드 인디 스튜디오 Trilithon Games의 Alex van Rossum이 자체 엔진 개발 로그에 펼쳐 놓은 숫자 묶음은 그 기본값 청구서를 재생 가능한 작업 지시로 다시 쓴 것과 같다. 게임은 《Wreckwing》. Mac Apple silicon에서 돌고, 엔진은 자체 Trilithon Engine, Swift에 Metal에 Jolt Physics. 스토어 페이지는 아직 없고 작품은 개발 중이다. 본고는 완성본을 플레이하지 않았다. 아래 장면과 숫자는 작가 공개 개발 로그와 공식 사이트 자료에서 왔다.

찾을 수 있는 엔진 노트를 맞춰 보았다. 못 박을 수 있는 사실은 복잡하지 않다. 10월 6일, 대도시 플레이에서 여러 번 느려졌고 최악에는 거의 기었다. 텔레메트리는 그것들을 시뮬레이션 쪽에 두고, 구조 부재 140~500조각을 부순 폭발 뒤 0.7~1.4초에 떨어뜨렸다. 플레이 쪽에서 보고된 끊김은 0.2초에서 1.4초. 같은 주 전후로 그들은 결정론 digest, 헤드리스 재생, 그리고 4K 프레임에서 조명이 어떻게 픽셀을 덜 계산하는지도 썼다. 초안은 저장소의 Claude Code가 잡고, Alex van Rossum 본인이 각 숫자를 검토했다.

본고를 관통하는 이미지는 재생이며, digest이기도 하다. 도구 이름처럼 들린다. 제작 윤리로 내리면 검증 가능한 약속이 된다. 먼저 같은 지문으로 세계가 반복되게 한 뒤, 어느 한 칼이 시간을 아꼈는지 ��한다. 절약은 증거를 남겨야 한다. 바뀐 것은 시간. 세계의 지문은 여전히 맞는다.

《Wreckwing》빌딩 붕괴 장면

일, 업계 기본값, 끊김은 감으로, 최적화는 이펙트 끄기

파괴 장면이 비싼 것은 거의 누구나 안다. 폭발로 구조가 부서지고, 파편이 서로를 깨운 채로 두고, 렌더는 이미 끊긴 부품을 아직 치워야 한다. 업계의 기본 절차도 고정되어 있다. 먼저 감으로 「물리겠지」라고 말하고, 파편을 줄이고, 잔해를 더 일찍 얼리고, 빛과 그림자 단계를 내린다. 플레이어도 같은 어휘로 끊김을 읽는다. 폭발 뒤에 한 번 멈춘다, 대도시에서는 고설정을 피한다. 그 묵계가 「감」을 용서되는 제작 문법으로 만든다.

《Wreckwing》은 감의 비용을 높인다. 큰 스케일 도시의 파괴 비행이다. 미사일 한 발이 수십 미터 크레이터를 팔 수 있고, 로켓 일제 사격이 갓 끊긴 강체를 만 단위로 깨울 수 있다. 비싼 순간은 같은 초에 겹치기 쉽다. 제거 훅, 지형 중복 제거, 폭발 표현, 메시 압축, 지지 검사, 각각이 수십에서 이백 밀리초를 더할 수 있다. 어느 프레임이 끊기는지만 느끼면 범인을 틀리기 쉽고, 고쳐도 세계를 바꿔 버리기 쉽다.

갈림길이 여기 있다. 기본값은 프레임레이트를 예뻐 보이게 무엇을 끌지를 묻는다. 그들은 그 1.4초를 먼저 재생 가능한 세션으로 못 박고, 항목별로 재고 고치고, 세계 지문으로 플레이어가 만나는 붕괴가 여전히 같은 붕괴인지 증명할 수 있는지를 물었다.

끊김 재생 개발 로그 히어로 이미지

이, 방법, 4096프레임 링 버퍼, 마커 키, 헤드리스 재생, digest

10월 6일 아침, 그들은 먼저 끊김을 가리킬 도구를 만들었다. 게임은 최근 4096프레임의 현장을 메모리에 남긴다. 120 fps면 약 34초. 프레임 안 각 부분과 시뮬레이션 각 단계의 소요 시간도 적는다. 키보드 X 또는 패드 Y를 누르면 Marked 카운트가 나오고, 카메라 위치와 그 앞 20초·뒤 5초가 저장된다. 40 ms를 넘긴 프레임은 마커가 없어도 내역과 함께 자동 저장된다. 한 프레임 기록의 메인 스레드 중앙값 비용은 5 µs 미만. 기록 온오프에서 종료 상태는 일치했다.

링 버퍼만으로는 부족하다. 게임은 원래 플레이 세션을 기록한다. 재생 도구는 창 없이, 기록된 폭발과 포격을 원래 게임 시간에 다시 쏠 수 있다. 도시는 그 세션이 마지막으로 로드한 것. 어떤 혼합 도시 재생은 단일 물리 스텝에서 836 ms에 달했다. 물리 스텝은 엔진이 한 번에 계산하는 1/60초 시뮬레이션 조각이다. 끊김은 재현 가능한 실험이 되었다. 아래 각 수정은 기록 세션을 재생하고 상태 digest(런 종료 시 전 세계 지문)를 대조해 검증되었다. 일치하면 그 한 칼은 시간만 바꾼 것이다.

결정론은 그 방법의 토대로, 며칠 앞의 다른 노트에 쓰여 있다. 9월 29일, 같은 사무실 폭파 테스트의 두 녹화는 어긋났다. 한쪽은 696부재가 쓰러졌고, 다른 쪽은 1123. 그들은 물리 엔진 문서에 따라 쿼리, 활동체 목록, 충격 이벤트, 접촉점을 안정 순서로 맞추고, 파단도 요청 순으로 적용했다. 고친 뒤 같은 장면은 1266부재가 쓰러졌고, 캡처·녹화·헤드리스 계측에서 같은 digest를 냈다. digest는 각 강체 위치를 밀리미터까지 지문화한다. 1밀리미터만 어긋나도 지문이 바뀐다.

10월 1일, 그들은 시뮬레이션, 파단, 스텝을 재사용 가능한 엔진 모듈로 옮기기 시작했다. 각 단계에서 세계는 원상태여야 한다. 그래서 `tools/digests.sh`가 생겼다. 테스트 장면 13개, 실기 플레이 재생 2개, 격 tick 스텝, 소리 켜기, 전 장면 화면 캡처를 돌리고, 환경 스위치를 지운 release 빌드 기준선과 비교한다. 한 바퀴는 약 10분. 헤드리스는 창·렌더·소리를 끈다. 10장면은 약 1분에 끝나고 지문은 렌더 있는 앱과 일치했다. 화면이 시뮬레이션으로 되흘러들지 않는다는 증거다.

재생 스스로도 거짓말한다. 도심 세션은 약 7번에 1번, 구역 도시는 약 5번에 1번 종료가 달랐다. 원인은 테스트 창이 시작 때 포커스를 빼앗아, 다른 앱에서 친 키가 시뮬레이션에 들어간 것. 중간에 T를 한 번 누르면 화질 단계가 고에서 중으로 떨어진다. 고침은 투박하다. 오프라인 실행은 창을 띄워도 포커스를 잡지 않고, 키와 클릭을 버리며, 품질 단계를 커맨드라인으로 고정한다. 전원 상태 알림과 600스텝 뒤의 T를 넣어도 지문은 깨끗한 런과 같다. 도심 재생을 세 번 연속으로 돌려도 종료는 같다.

여기까지 방법이 갖춰졌다. 링 버퍼가 가리킨다. 헤드리스 재생이 다시 한다. digest가 증명한다. 십 분 스크립트가 증명을 일상이게 한다.

삼, 죄목표, 훅, 해시, 폭발, 압축, 그리고 1.4초의 제품 결정

재생 가능한 세션이 생긴 뒤, 원인을 표로 나누고 한 번에 하나만 움직였다.

렌더러 제거 훅은 끊긴 부품마다 장면의 그려진 부품을 전부 걸었다. 가구, 몰딩, 차, 배. 도시에 미사일 두 발로, 끝난 파단 적용에 124와 134 ms. 고친 뒤 7.9와 8.1 ms.

지형 정점 중복 제거 해시는 곱의 하위 비트만 읽었다. 정수 미터와 사분의 일 미터 격자에서는 하위가 자주 0이라 정점이 소수 슬롯에 쌓인다. 미사일 한 발의 크레이터가 192 ms, 재생 최악 시뮬레이션 프레임은 202 ms. Murmur3 finalizer로 비트를 섞은 뒤 최악 심은 31.5 ms가 되었다.

40 m 폭발 표현층은 도달 100 m 전체를 검색하고 강체마다 소속 구조를 조회한다. 재생에서 52와 83 ms. 실기 164 ms 프레임 중 86 ms를 차지한 적도 있다. 고친 뒤 재생은 5.1과 6.1 ms.

도시 드로우 메시를 한 프레임에 압축하면 재생 221 ms, 실기 233~311. 한 바퀴에 87 ms. 10월 7일 세션의 두 번째 바퀴에서 125와 134 ms가 60과 65 ms가 되었다. 저설정 대도시 재생에서 33 ms 넘는 스텝이 회당 40~79회에서 4~48회로. 크레이터 지지 검사도 32 ms(64 m 크레이터, 그중 약 30 ms가 검사)에서 12.6 ms.

다른 용의자 부류는 다섯 칼 모두 시간을 아끼지 못했다. 첫 도시의 가장 무거운 창, Low Power Mode 기준선에서 로켓 일제 사격은 최대 약 22000개 활동 강체를 남겼고 99%가 파단 잔해. 약 절반은 거의 가만히 있지만 7000~9800개 접촉 집단에 묶여 물리 엔진은 한꺼번에만 재울 수 있다. 스텝은 84~114 ms. 잡 스레드 줄이기, 솔버 반복 줄이기, 접촉 캐시 완화, 수면 임계 완화, 폭발 바닥, 다섯이 거의 헛일. 잔해 동결을 2초에서 1초로 바꾸자 최느린 스텝이 62~70 ms가 되었다.

제품 결정은 여기서 모습을 드러낸다. 부하를 줄이는 길은 둘. 잔해를 더 일찍 얼리거나, 파편을 줄이거나. 그들은 현재 파단 밀도를 남기고, 테스트의 1초가 아니라 1.4초로 동결하기로 했다. 고설정 2초에서 1.4초로의 변경은 두 번째 재생 확인을 기다린다. 10월 7일 아침, 대도시 십 분 플레이가 새 재생 기준선이 되었다. 일 초급 동결은 거의 사라졌다. 거대 미사일이 도심에 떨어지고 다른 큰 착탄도 동결을 일으키지 않았다. 그들은 떠 있는 파편에 한 시각만 표시했다.

이 표의 힘은 한 줄의 화려한 백분율에서 오는 경우가 적다. 각 줄의 전후 숫자와 「digest가 맞았다」는 차가운 수락어에서 온다. 범인 오인의 비용이 줄었다. 세계를 망가뜨릴 위험은 지문이 막았다.

4K 프레임 해체 개발 로그 히어로

사, 또 한 칼, 팔백만 픽셀 위의 빛, 「덜 계산」이 바이트 일치를 어떻게 지키나

끊김 표가 가라앉은 뒤, 칼은 4K 프레임으로 들어갔다. 최대 도시, High, Low Power Mode. 벤치에서 GPU는 약 30 ms/프레임, 약 33 fps. 최대 단일 단계는 표면 플러스 조명으로 13.1 ms.

어블레이션은 솔직하다. 조명을 전부 빼면 8.7, 그래서 조명 자체는 약 4.5. 최대 12개의 동적 소형 라이트를 빼면 10.7, 그래서 소형 라이트는 약 2.5, 조명의 절반 이상. 하늘 가시도 약 0.9, 지면 바운스 약 0.5, 실내등·PCSS 소프트 그림자 가장자리는 노이즈 안에서 ≈0. 팔백만 픽셀이 최대 12등을 각 3회 평가한다. 본체, 스페큘러, 연기 글로우. 빛의 도달은 최원 약 16 m. 거리의 대다수 픽셀은 모든 공 밖에 있는데도 빈 검사를 돌리고 있었다.

고침은 각 등의 여백 있는 화면 사각형을 먼저 구하고, 픽셀은 자기를 덮는 등만 본다. 세 등으로 벽을 비추는 대조 테스트에서 고치기 전후 이미지가 바이트 일치. 같은 단계는 평균 13.8에서 11.8 ms, 30 ms 프레임에서 약 2 ms를 깎았다. 한계도 분명히 적혀 있다. 플레이어 엔진은 종종 추적 카메라 바로 앞에 있어 그 등의 사각형이 전 화면이 되고, 모든 픽셀이 여전히 그것을 본다. 다른 등은 건너뛴다.

재질 디테일도 같은 식으로 쪼개졌다. 전체 디테일 재질 약 2.9 ms. 그중 절차적 콘크리트 노이즈 한 층이 약 1.3. 건물 간 색 변이 약 0.55, 풍화와 쌓인 먼지가 각 약 0.3. 도시 삼백만 삼각형을 G-buffer에 쓰는 데 약 3.5 ms. 화면 밖 건물을 일찍 건너뛰는 시도는 약 0.4 ms를 아꼈지만 75픽셀 셰이딩이 달라 넣지 않았다. 그림을 바꾸는 최적화는 전후 정지 화면 비교를 거친 뒤 본선에 들어간다.

곁가지에는 에셋과 로드도 있다. 텍스처 Sniper 함은 약 303458 삼각형, 구모델 약 8800. Sniper 여섯 기, 3840×2160 High에서 프레임은 7.16에서 10.39 ms. 그림자를 약 3만 삼각형 LOD로 바꾸면 그림자 비용은 1.9에서 0.2 ms. 넓은 도시 로드는 9.7초에서 3.1초. 건십 잔해 조립 끊김은 290에서 12 ms. 이들은 0.15계 후속 노트에 있고 본선과 같은 방향이다. 먼저 재고, 형태를 바꾸고, 겉모습이나 세계가 조용히 바뀌지 않았음을 증명한다.

수렴, 인디란 재현 가능성에 십 분을 낼 의사다

이 10월 노트 묶음을 2026년 가을 인디 엔진 현장으로 되돌리면, 먼저 치는 것은 숨은 제작 관성이다. 끊김은 감으로, 최적화는 이펙트 끄기, 「고쳐서 돌아간다」면 충분하다, 고친 뒤 세계가 여전히 같은 극인지 묻지 않는다. Alex van Rossum은 다른 길을 펼쳤다. 도구는 마커 키만큼 투박해도 된다. 수락은 밀리미터 지문만큼 딱딱해도 된다. 십 분의 `digests.sh`는 결정론을 슬로건에서 일일 게이트로 바꿀 수 있다.

작은 팀에게 이 재료는 특히 쓸모 있다. Swift 자체 엔진이 없어도, 깨어 있는 잔해 22000개가 없어도 된다. 각자의 「이미 충분하다」 목록은 있다. 폭발 뒤 끊김을 감만으로 귀속시키기. 평균 프레임만 보고 최악 스텝을 보지 않기. 헤드리스 대조 없는 리팩터. 포커스를 빼앗는 테스트 창으로 flaky 재생을 「물리가 비결정」이라 부르기. Trilithon의 공개 숙제는 비용을 투박하게 적는다. 한 프레임 기록은 5 µs 미만이면 된다. 헤드리스 10장면은 약 1분. 전체 digests는 약 10분. 비싼 것은 그 십 분을 매일 낼 의사, 그리고 제품으로서 1.4초 동결이 파단 밀도를 남긴 뒤의 명시적 선택임을 인정할 의사다.

실행 가능한 안내는 짧다.

  • 먼저 끊김에 「가리킬 수 있는」 능력을 준다. 링 버퍼, 임계 초과 자동 저장, 전후 창 있는 마커. 최적화 회의 전에 적어도 하나를 착지시킨다.
  • 성능 수정마다 두 질문을 고정한다. 전후 숫자는 얼마인가. 세계 지문은 여전히 맞는가. 맞지 않는 「빨라짐」은 승리가 아니라 결함으로 다룬다.
  • 렌더가 시뮬레이션으로 되흘러든다는 의심이 있으면 헤드리스와 렌더 있음을 각 한 바퀴. 지문이 맞으면 화질에 칼을 넣는다.
  • 그림을 바꾸는 컬링과 베이크는 바이트급 또는 정지 화면 대조를 먼저. 동일 바이트로 2 ms면 본선에 넣어도 된다. 75픽셀이 달라 0.4 ms면 기록을 남기고 먼저 바꾸지 않는다.

1.4초의 끊김, 836 ms의 단일 스텝, 팔백만 픽셀 위의 빛, 십 분의 digests. 스토어 페이지가 열리기 전에, 제작자는 감사 기준을 공개 로그에 이미 썼다. 먼저 붕괴가 재현되게 한다. 그다음 시간을 싸게 만든다.

小光

출처와 더 읽기

Alex van Rossum / Trilithon Games(2026-10-07)Finding 1.4-second stalls by replaying play

Alex van Rossum / Trilithon Games(2026-10-01)Making a collapse repeat exactly

Alex van Rossum / Trilithon Games(2026-10-13)Skipping pixels and tearing down a 4K frame

Alex van Rossum / Trilithon Games(2026-10-10)Textured ship models

Trilithon Games(2026-10-07)Release 0.15

Trilithon Games Since 0.15.5

《Wreckwing》제품 페이지 https://trilithon.games/games/wreckwing/

Press kit https://trilithon.games/press/

로그인하고 읽기 기록을 남겨 보세요.

다른 기기에서도 좋아요와 저장한 글을 확인하세요.

로그인