디지털 가든
상주 위성 영상의 성: 한 번의 데이터 원정과 세 개의 납품 열쇠
‘사진측량’과 ‘수작업 모델링’이 모두 막혔을 때, 한 성은 오히려 어떻게 진실에 다가갈 수 있는가? 상주의 답은——손에 넣을 수 있는 고정밀 네트워크 데이터로 데이터 원을 전부 바꾸고, Agent에게 전자동 관로를 돌리는 것. 여섯 노선, 하루에 다 걸었다.
1. 노선의 분기
이야기는 저 제약에서 시작된다——‘우리는 네트워크 데이터나 해당 데이터를 찾는 것만 할 수 있고, 촬영도 수작업 랜드마크도 할 수 없으니, 노선은 어떻게 가야 해? AI와 agent로만 완성하는 것뿐.’ 모사는 먼저 천장을 그었다——사진측량이 없으면 실제 입면 텍스처는 영영 손에 넣지 못하고, 도달 가능한 한계는 ‘윤곽 정밀 + 고도 실제 + 지붕에 정사영 텍스처 + 입면이 중원경에서 가짜도 진짜처럼 절차화’——구글 어스 3D 백모 + 영상 텍스처 효과. 그리고 여섯 노선을 순위 매김——Overture 건물 고도, Esri/천지도 위성 영상, 패각小区 층수 재입, 고덕 POI 자동 표시, Mapillary 거경 입면, 학술 고도 데이터셋 교차 검증. 사용자의 한 마디——1부터 6 노선으로开工해, 전부 완료할 때까지.
2. 노선 1의 좌절과 노선 2의 진군
노선 1(고도)은 네트워크 환경에 차단돼 정직히 기록——Overture의 DuckDB/libcurl OpenSSL 악수가 투명 프록시에 가로막히고(curl의 schannel은 정상이지만 258GB parquet은 전량 내려받을 수 없고); 구글 Open Buildings는 S2 분편으로 상주 파일을 특정할 수 없고; GHSL의 JRC 서버는 도달 불가. 건물 고도는 여전히 OSM 태그 + 발견식 추정——이것이 현재 모델의 가장 큰 정밀 단점이고, 보고서는 분식하지 않았다.
노선 2(위성 영상)는 수익 최대의 한 전투——Esri World Imagery 타일을 분배로 내려받기——처음 18,303 타일의 규모는 시간에 3.6 타일의 귀속 앞에서 85분이 걸려, 핵심구 z15 + 외곽 z14로 변경(총량을 약 4,400으로 감소), 병행을 32로 끌어올려 속도는 초에 30 타일로 날았다. 투명 프록시가 요청마다 무작위로 끊는 음수도 돌려 피했다——Python urllib의 SSL은 프록시에 망가져 curl은 정상——모두 curl 서브프로세스로 변경. 최종 만삼백팔십일 타일(z14 전경 93퍼센트 + z15 핵심 94퍼센트), 열여섯 개 4096² 청크 텍스처로 모자이크, 지형은 모두 실제 위성 영상으로 교체, 결손구는 인접 평균으로 충전.
노선 2c(지붕색)는 서프라이즈였다——전부 삼만육천삼백칠십오 채 건물을 위성 영상에서 한 채씩 지붕색을 샘플링, 100퍼센트 피복, 양자화해 약 200종 재질로 합병——새로 지은小区의 흰 지붕, 공업의 파란 지붕, 구성의 붉은 기와가 자동 구분돼, 한 성의 경제 지리가 한눈에 읽힌다.
3. 노선 4/5/6: 입면의 혁명
노선 4(절차적 입면)——건물 메시에 두 개의 정점별 속성을 추가——벽면 국부 고도 wz, 벽면 수평 좌표 wu——재질 셰이더가 이에 따라 창문 격자와 층판을 생성——주택은 3.2m 층고/4m 개간, 유리 커튼월 3.6m/3.2m, 공업 4.5m/8m 소창, 창문 격자의 roughness/metallic이 동기 변화; 16m 이상 평지붕 건물에 1.1m 딸벽 추가. 거경 시점에서는 완전한 창문 격자 입면이 보인다——이것이 ‘백모’에서 ‘건축’으로의 한 도약.
노선 5(랜드마크 정수)——천녕보탑을 다시 하기——팔각 십삼 층, 반각 견구(모퉁이가 1.3m 위로 튀어오르는, 중국 보탑의 가장 현저한 특징), 상륜 탑채 + 금색 보주.
노선 6(POI 표시)——OSM에서 추출해 정선한 오십이 개 표시(육 구현 + 공룡원/박물관/대극장/체육중심/운하/태호/기차역), 인접성 도시 잔여와 촌급 표시를 여과, 독립 컬렉션 09_Labels, 조감도만 렌더링——고정 자호는 5km와 55km 시고에 동시에 적응할 수 없어, 이것이 기록에 남은 트레이드오프.
공정 최적화도 한 마디——MeshBuilder.v()의 **kwargs 사전 전달은 50배 감속의 근원이고, 최적화 후 구축은 26초뿐; 633개 재질은 너무 많아 지붕색 양자화 스텝을 0.1로 조잡화.
4. 세 개의 납품 열쇠
71MB blend는 비 Blender 사용자에게 직관적이지 않아, 세 개의 열쇠가 만들어졌다——
하나. 브라우저 뷰어——changzhou_web.glb(Draco + meshopt로 267MB에서 80MB로 압축) + three.js 끌어놓기 뷰어. 디버깅 과정 자체가 탐정 소설이었다——페이지는 모델을 로드했지만 화면은 새하얗다——rAF 백그라운드 탭 스로틀링(수동 렌더링 성공, 235회 드로우 콜, 300만 삼각형), 카메라 near=5/far=2,000,000의 깊이 버퍼 정밀 대재난(22km 밖에서 LSB당 약 2km, near=50/far=500000로 수정), 최종 진범은 500km 배경판으로 도시와의 깊이 차가 깊이 버퍼 한 정밀 단위보다 작아 도시가 배경판에 통째로 덮였다——내보낼 때 use_selection으로 배경판을 제외하니 화면은 완벽.
둘. 비행 영상——22초, 528 프레임, 1280×720——고공 급강하→시구 통행→보탑 선회→끌어올림 마무리. Blender 5.2의 함정이 일로 나타났다——Action API가 변하고(fcurves가 layers/channelbags로 이동), FFMPEG이 image_settings에서 삭제(media_type=‘VIDEO’ + ffmpeg.format/codec 사용).
셋. Blender 유영——뷰포트 클립 거리를 1000km로 프리셋(대규모 모델의 가장 흔한 ‘축소하면 다 사라진다’ 함정, 파일에 저장), 비행 모드 WASD+QE, 열 개의 프리셋 기위, 09_Labels는 직접 개폐 가능.
최종 changzhou.blend——71MB, 308만 정점, 192만 면, 약 200 재질, 열 기위. 스크립트 관로는 완전히 보존(terrain.py → extract.py → esri_download.py → build_esri_mosaic.py → blender_build.py), 어떤 매개변수를 바꿔도 전량 재실행 가능.
실제 좌표
- 노선 1(Overture) 차단을 정직히 기록——DuckDB/libcurl OpenSSL이 투명 프록시에 가로막힘, 258GB 전량 내려받기 불가, 구글 Open Buildings S2 분편 특정 불가, GHSL 도달 불가; 고도는 여전히 OSM 태그 + 발견식
- 노선 2: 만삼백팔십일 Esri 타일(z14 전경 93퍼센트 + z15 핵심 94퍼센트) → 열여섯 개 4096² 청크; Python urllib SSL이 프록시에 망가져 모두 curl 서브프로세스로; 결손구 인접 평균 충전; Web Mercator는 정사 보정 없음(고층에 경미 변위, 기록됨)
- 노선 2c: 삼만육천삼백칠십오 채 지붕색 100퍼센트 샘플링, 약 200 재질로 양자화(새로 지은 흰 / 공업 파란 / 구성 붉은 기와 자동 구분)
- 노선 4: wz/wu 정점별 속성이 창문 격자 구동(주택 3.2m/4m, 커튼월 3.6m/3.2m, 공업 4.5m/8m) + 16m 이상 1.1m 딸벽; MeshBuilder kwargs 50배 감속 최적화(26초 구축)
- 노선 5: 천녕보탑 팔각 십삼 층 + 반각 견구(1.3m 상도) + 상륜 탑채 + 금 보주; 노선 6: 오십이 개 정선 POI(육 구현 + 랜드마크), 09_Labels는 조감도만
- 세 개의 납품 열쇠——브라우저 뷰어(GLB 80MB Draco, 깊이 정밀 대재난 near=5/far=2M→50/500k, 500km 배경판 가림 진범, use_selection 제외), 비행 영상 22초/528 프레임, Blender 유영(뷰포트 클립 1000km, 열 기위); Blender 5.2 API——Action layers/channelbags, FFMPEG media_type=‘VIDEO’, MixRGB 명명 인터페이스
- 최종——changzhou.blend 71MB/308만 정점/192만 면/약 200 재질/열 기위; 다섯 스크립트 관로로 전량 재실행 가능
댓글