ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [PBL] CodeWalker ( 3 / N )
    카테고리 없음 2026. 6. 29. 21:04

    https://github.com/dexyfex/CodeWalker

    - 월드 생성 과정 요약.  

     

    ① 게임 파일 스캔 (RpfManager)
       └─ 모든 RPF 내 .ymap / .ybn / .ynv를 이름 해시 → 파일 엔트리 딕셔너리(YmapDict)로 구성

    ② gta5_cache_y.dat 로드 (CacheDatFile)
       └─ MapDataStoreNode[] 전체를 메모리에 적재
       └─ DLC 최신 버전이 기존 항목을 덮어씀

    ③ InitMapDataStore() — SpaceMapDataStore 구성
       └─ YmapDict에 실제 파일이 존재하는 노드만 nodedict에 포함
       └─ 모든 노드를 Quadtree에 평탄하게(flat) 투입 후 TrySplit() 재귀 호출

    ④ 카메라 이동 → GetVisibleYmaps()
       └─ Quadtree.GetItems(cam.Position)
            ↳ 노드 AABB 1차 컬링
            ↳ 개별 streamingExtents 2차 정밀 판정
       └─ 매칭된 MapDataStoreNode 목록 반환

    ⑤ item.Name (해시) → GameFileCache.GetYmap(hash)
       └─ mainCache에 있으면 즉시 반환
       └─ 없으면 YmapDict[hash] → RPF 엔트리 조회
            → 빈 YmapFile 객체 생성 후 캐시 등록
            → TryLoadEnqueue() → 백그라운드 비동기 파싱

    ⑥ parent 해시 체인 순회 (LOD 계층 연쇄 로드)
       └─ ymap._CMapData.parent 해시로 이동 → GetYmap(parentHash)
       └─ 반복 (이미 로드된 hash이거나 parent == 0 이면 종료)

    ⑦ YmapFile 활성화
       └─ 엔티티, 라이트, 오클루더, 물리 데이터 생성

     

Designed by Tistory.