메시를 만들고 나서 Normal 값을 생성하도록 후처리 과정을 추가했다. normal값도 미리 룩업테이블에 두고 사용할 수 있을지 기대해봤지만, 기울기가 일정하지 않기 때문에 실시간으로 처리하는게 자연스러워서 실시간 처리로 수정했다.
Cube에 MeshCollider를 추가했다. 그 외에도 테스트용으로 렌더러와 콜라이더를 끌 수 있는 기능을 추가했다. 이는 #if UNITY_EDITOR로 감쌌기 때문에 혹시나 빌드를 했을 때 코드가 노출되지 않도록 처리했다.
Cube는 생성될 때 부모 transform을 null로 해둬서 최상위 부모로 올라가기 때문에 부모를 설정할 수 있도록 코드를 수정했다.
그 외에도 마칭큐브 연산할 때 매번 생성되는 리스트를 캐싱하는 등 짜잘하게 최적화를 했다.
테스트 할때마다 중복되는 코드가 있어서 베이스 클래스를 만들어뒀다. 또 콜리전 테스트를 위한 코드와 씬도 추가했다.
MeshCollider 적용
MeshCollider는 사용법만 익히고 한번도 제대로 써본적이 없었는데, 이번에 제대로 써봤다. 그리고 여러 추가 기능을 알게됐는데, 일단 여러 옵션을 적용할 수 있다는 것을 알게됐다.
런타임에 MeshCollider를 동적으로 변경해야 하는 경우 미리 알아두어야 하는 것들에 대한 메뉴얼이 있다는 것을 지금 알았고, 여기에 어떤 옵션이 있으며 언제 켜고 꺼야하는지가 나와있었다.
링크 : https://docs.unity3d.com/2022.3/Documentation/Manual/prepare-mesh-for-mesh-collider.html
그리고 MeshCollider의 경우 삼각형이 너무 작으면 에러를 일으킨다.
"" mesh must have at least three distinct vertices to be a valid collision mesh.
자꾸 유효하지 않다고 해서 유심히 살펴봤는데 알고보니 삼각형이 너무 작아서 생기는 문제였다. 이는 Marching Cubes알고리즘에서 너무 작은 삼각형을 거르는 코드를 추가하여 해결했다. 옵션도 조금 만져봤는데, 작은 삼각형을 필터링하면서 에러가 사라져서 원래대로 돌렸다.
나중에 프로파일러로 성능체크를 하면서 옵션을 하나씩 적용해봐야겠다.
'사이드 프로젝트 > Voxel System' 카테고리의 다른 글
[Voxel System] 2025-03-28 실시간으로 땅파고 메우기 (0) | 2025.03.29 |
---|---|
[Voxel System] 2025-03-26 약간의 최적화 (0) | 2025.03.27 |
[Voxel System] 2025-03-23 펄린 노이즈 적용 (0) | 2025.03.25 |
[Voxel System] 2025-03-22 파도 테스트 (0) | 2025.03.25 |
[Voxel System] 시작 (0) | 2025.03.25 |