Entity Forge

Entity Forge 0.3.0 자동 렌더링 경로와 대량 생명주기 보강

개발 기록 · 블로그 공개

원본 기록 상태 검증 대기

자동 프록시의 불필요한 동작 처리와 프레임별 데이터 배열 복사를 분리하고 생성·해제·진단 경로를 추가했습니다.

작업 결과

첫 추가 개발 묶음을 0.3.0-preview에 반영했습니다. 자동 프록시는 ForgeMotion 없이 렌더 쿼리에만 참여하며, 동작 쿼리가 비어 있으면 동작 Job/명령 버퍼를 실행하지 않습니다. 렌더 데이터는 지속 버퍼에 모으고 프리팹 엔티티를 일괄 생성·제거합니다. 실제 성능 개선율과 네이티브 실행은 미확인입니다.


변경 내용

적용 내용

  • 자동 렌더링과 ECS 동작 분리: 프록시 전용 아키타입과 별도 동작 쿼리. 비어 있는 백엔드는 조기 반환합니다. 기존 GameObject 스크립트·물리 동작은 유지합니다.
  • 렌더 데이터 준비: 매 Tick의 ToComponentDataArray 두 개를 제거하고 지속 NativeList와 Burst 속성을 가진 청크 행렬 수집 작업으로 변경했습니다. 버퍼는 최대 수요에 맞춰 커지고 Dispose에서 해제합니다.
  • 생성·해제: 아키타입별 일괄 생성, 일괄 삭제, Entity 조회와 밀집 swap-remove 저장소로 프리팹 자신의 항목을 직접 제거합니다. 삭제된 소스는 정리하고 원래 렌더러를 복원합니다. 재등록·중복 Dispose와 실패 경로도 보강했습니다.
  • 중복 처리 억제/폴백: 정지한 소스의 변환값 쓰기를 생략하고 같은 머티리얼 복사를 Tick당 한 번으로 제한합니다. Transform.hasChanged는 변경하지 않습니다. 인스턴싱 불가 시 자동 대상은 원래 렌더러로, 명시적 엔티티는 개별 DrawMesh로 폴백합니다.
  • 진단 추가: EntityForge.SyncSources / Simulation / RenderGather / Draw Profiler 구간, ForgeBatch.RuntimeStats의 마지막 Tick 처리 카운터, 선택 측정 JSON의 backendStatsAtCapture를 추가했습니다. 카운터는 성능 개선율이 아닙니다.
  • 버전/문서/패키지: 9개 언어 가이드와 개발 아키텍처에 새 경로와 검증 경계를 반영했습니다. 패키지 생성기는 Version.json을 읽고 0.3.0을 별도 고정하며 이전 0.2.0 산출물을 보존합니다.

검증

검증 요약 · 실제 등록 저장소 테스트 · 컴파일 소스 해시.

  • 7개 어셈블리 C# 컴파일과 현재 소스 해시 대조 통과. 본체 asmdef는 샘플 어셈블리를 참조하지 않습니다.
  • 실제 ForgeDenseRegistry 코드를 비GUI .NET에서 실행: 1만 개 추가, 임의 순서 제거, 재등록, 중복 제거, 100회 초기화/재사용 통과. 워밍업 후 10만 회 추가/제거에서 해당 저장소 단독 관리 메모리 할당은 0바이트였습니다. 전체 백엔드/엔진 무할당을 뜻하지 않습니다.
  • 첫 정적 검사기의 manager/world.EntityManager 문자열 불일치 실패를 보존하고 검사기를 수정해 재검증했습니다. 제품 소스를 이 실패에 맞춰 변경하지 않았습니다.
  • 9개 가이드와 126개 링크 통과. 0.3.0 패키지 402개 에셋 원본/해시 대조 및 이전 산출물 해시 보존 통과. SHA-256: 2ccfbd7d7769dda2590c387203742992142d7fdee08ff37f02b7a3d912d80e9f.
  • 원래 렌더러 복원·비활성/재활성·호환성 변경·생성/해제·수명·이동·개별 드로우를 확인할 명시적 ForgeRuntimeFastpathQA.Run을 작성·컴파일했지만 실행하지 않았습니다.

화면 조작, Unity/플레이어 신규 실행, 실제 플레이어 빌드는 하지 않았습니다. 실제 실행 화면 캡처도 사용자 실행 제한으로 미실행이며 가짜 화면으로 대체하지 않았습니다.


남은 사항

제품 출시에 필요한 미완료 검증: 네이티브 Burst 컴파일/Job safety, 프리팹 및 장면 생명주기, 렌더링·원래 행동 동등성, 인스턴싱 폴백, 최신 패키지 새 프로젝트 설치와 샘플 제거 회귀, 동일 부하의 CPU/GPU 시간·메모리 비교가 필요합니다. 성능 개선 퍼센트는 아직 없습니다. 재사용 버퍼는 최대 용량을 유지하므로 총 메모리가 줄었다고 주장하지 않습니다. 일반 MonoBehaviour의 무컴포넌트 ECS 동작 변환과 Resources/Addressables/AssetBundle 로더는 후속 범위입니다.


출처

중앙 아카이브 원문