프로파일러로 체크해본 결과 평상시에 CPU가 한 프레임을 처리하는데 드는 시간이 5ms가 나오다가 메시를 렌더링 할때마다 16ms가 나오게 되었다. 특히 MeshCollider로 런타임에 충돌체를 생성하는것이 오래 걸리고 있었다.
MeshCollider를 모두 꺼버리자 6ms가 줄어들어 10ms가 되었다. 하지만 여전히 Marching Cubes를 연산하느라 5ms정도를 먹고있다.
코드를 확인하니 보여줄 필요가 없는 메시는 GameObject를 꺼버리고, 사용하게 되면 켜도록 처리했는데 여기에서 시간을 꽤 먹고있었다. 애초에 Marching Cubes는 스칼라 필드가 모두 1인경우 메시가 없으므로, 이 경우엔 액티브를 끄지 않고, mesh를 클리어 하는 방향으로 수정해보았다.
게임 오브젝트를 켜고 끄는 처리만 변경했을 뿐인데 1ms가 줄어들어 9ms가 되었다. 하지만 여전히 오래 걸리고 있다. 이 부분은 매 업데이트마다 모든 큐브를 업데이트해서 그런거같다.
Dynamic Batching을 적용하려고 했는데, URP상에서 어떻게 처리해야 할지 아직 잘 알지못해서 적용해보진 못했다. 애초에 CPU 연산을 많이 먹고 있는게 Marching Cubes알고리즘이어서 최적화가 많이 될지도 의문이다.
원래 오늘 실시간으로 큐브의 형태를 바꾸는걸 해보고 싶었지만, 시간이 많지 않아서 못했다. 내일은 구 형태와 원 형태로 지형을 변화하는 기능을 적용해봐야겠다.
Marching Cubes 알고리즘 자체를 최적화 하는방법은 청크 단위로 나누고 더티 플래그 패턴을 사용해서 스칼라 필드가 변경된 청크만 수정해주면 될 것같다. 또 스칼라가 바뀌었다고 즉시 변경할 필요는 없어보이고, 어느정도 딜레이는 있어도 문제가 될 것 같지는 않아서 멀티 스레드를 사용해서 점진적으로 처리하는 방법도 괜찮을 것 같다.
'사이드 프로젝트 > Voxel System' 카테고리의 다른 글
[Voxel System] 2025-03-28 실시간으로 땅파고 메우기 (0) | 2025.03.29 |
---|---|
[Voxel System] - 2025-03-24 Mesh Collider 적용 (0) | 2025.03.25 |
[Voxel System] 2025-03-23 펄린 노이즈 적용 (0) | 2025.03.25 |
[Voxel System] 2025-03-22 파도 테스트 (0) | 2025.03.25 |
[Voxel System] 시작 (0) | 2025.03.25 |