TL;DR
- Meshoptimizer 1.3은 복셀 리메싱과 노멀 생성, 메시 단순화 개선을 포함하는 주요 릴리스임.
- 새 복셀 리메셔
meshopt_remesh는 입력 메시의 위상과 정점 위치를 버리고 주어진 해상도의 복셀 그리드에서 닫힌 메시를 생성함. meshopt_generateNormals는 크리즈 각도 기준으로 스무딩 그룹을 자동 감지하고 선택적 후처리 스무딩을 제공함.- 단순화 모드와 옵션을 개선해 퍼미시브 모드를 안정화하고, 양면 지오메트리와 속성 분산이 큰 메시의 처리 방식을 조정함.
- 라이브러리와
clusterlod.h,gltfpack의 성능·기능 개선 및 버그 수정이 포함되며, 핵심 라이브러리 작업 대부분은 Valve의 후원을 받음.
Meshoptimizer 1.3과 10주년
- 이번 릴리스는 노멀 생성, 여러 단순화 개선, 소규모 개선과 함께 새로운 주요 기능인 복셀 리메싱(voxel remeshing)을 도입함.
- 첫 Meshoptimizer 커밋은 2016년 9월 8일에 이뤄졌으며, 이번 릴리스는 10주년보다 조금 늦은 기념 릴리스임.
- 당시 필요했던 소규모 최적화 알고리즘 모음에서 출발한 라이브러리가 업계 전반의 게임 엔진, 콘텐츠 파이프라인, 도구에서 사용되고 있으며, 압축 형식은 glTF의 일부임.
- 기존 알고리즘 다수를 연구하고 개선했으며 새로운 알고리즘도 개발해 왔음. 라이브러리의 현재 상태에 만족하고 다음 10년을 기대하며, 사용·이슈 보고·패치 기여·개발 지원에 감사를 전함.
- 이번 릴리스의 핵심 라이브러리 작업 대부분은 Valve의 후원을 받음.
복셀 리메싱
- 실험적 복셀 리메셔
meshopt_remesh는 입력 메시를 지정된 해상도로 복셀화하고, 각 복셀에 메시 표면의 근삿값을 저장한 뒤 그리드에서 새 메시를 생성함. 원래 메시의 위상과 정확한 정점 위치는 보존하지 않음. - 결과물은 균일한 테셀레이션을 갖는 닫힌 메시이며, 그대로 사용하거나 추가 단순화의 기반으로 사용할 수 있음. 복셀 하나보다 가까운 특징은 합쳐지고, 복셀 하나보다 작은 틈은 닫힐 수 있으며, 기본 설정에서는 메시 내부가 채워짐.
- 외관을 개선하려면
meshopt_RemeshSolve옵션으로 정점 위치를 최적화해 원본 메시의 특징에 맞출 수 있음. - 전통적인 거리장 기반 방식과 달리 어떤 복셀 해상도에서도 얇은 시트를 보존하지만, 가는 선 형태의 지오메트리는 사라질 수 있음.
- 아직 실험 단계라 향후 릴리스에서 개선될 수 있음. 특히 얇은 특징은 자기 교차를 일으킬 수 있어 올바른 렌더링에 백페이스 컬링이 필요할 수 있음.
- 가능한 활용 사례 중 하나는 원본 메시·재질·텍스처를 하나로 합친 저폴리 텍스처 프록시 생성임. 리메시→단순화→언랩→재텍스처링 파이프라인을 구현한 온라인 데모가 다른 옵션과 함께 예제로 제공됨.
노멀 생성과 메시 단순화
- 리메싱은 입력 속성을 모두 버리므로 조명에 필요한 출력 노멀을 새로 생성해야 함. 이를 위한
meshopt_generateNormals는 크리즈 각도 기준의 자동 스무딩 그룹 감지와 인접 삼각형 간 노멀을 부드럽게 하는 선택적 후처리를 제공함. - 이 기능은 리메시된 메시에서 특히 유용하지만,
meshopt_generateTangents와 마찬가지로 모든 메시에서 사용할 수 있는 범용 알고리즘임. - 기존 단순화 함수의 동작을 자동으로 개선하고 추가 제어 옵션을 제공하는 여러 개선이 포함됨.
meshopt_SimplifyPermissive모드는 버그 수정과 지오메트리 경계 주변 단순화의 상당한 개선을 거쳐 안정화됨. 이는 퍼미시브 모드를 안정화하는 데 필요한 마지막 개선이며, 더 이상의 호환성 파괴 변경은 예상되지 않음.- 리메시 메시에서 나타날 수 있는 양면 지오메트리의 단순화를 개선하려면
meshopt_SimplifyPreserveFolds옵션을 활성화할 수 있음. 이 옵션은 날카로운 크리즈나 양면 시트의 가장자리가 깎여 나가는 현상을 줄임. - 속성 인식 단순화에서 속성 분산이 큰 입력 지오메트리의 축약 순서와 반환 오류를 개선하려면
meshopt_SimplifyErrorClamped옵션을 활성화할 수 있음. 이 옵션은 세부 단계(LOD) 선택을 덜 보수적으로 바꾸며, 속성 인식 단순화 사용 전반에 권장됨. clusterlod.h에는 식생 단순화를 눈에 띄게 개선할 수 있는simplify_dilate_borders옵션이 추가됨. 다른 단순화 개선도clusterlod.h에 적용됐으며, 오류 제한은 기본 활성화 상태임.
라이브러리 개선
- 실험적 복셀 리메셔
meshopt_remesh: 기존 메시를 원본으로 사용하되 위상과 정확한 정점 위치를 무시하고, 지정된 복셀 해상도에서 새 메시 생성 - 실험적 노멀 생성 함수
meshopt_generateNormals: 크리즈 각도 기준 자동 스무딩 그룹 감지와 선택적 스무딩 후처리를 통한 노멀 생성 - 실험적 단순화 플래그
meshopt_SimplifyPreserveFolds: 양면 지오메트리의 경계가 깎이는 현상 감소 - 실험적 단순화 플래그
meshopt_SimplifyErrorClamped: 속성 분산이 큰 영역에서 과도하게 보고되는 속성 오류 조정 meshopt_simplify*의meshopt_SimplifyPermissive모드 안정화meshopt_opacityMap*함수,meshopt_generateTangents,meshopt_filterIndexBuffer*,meshopt_computePositionExponent안정화- 퍼미시브 단순화에서 지오메트리 경계 처리와 축약 점수 산정 개선
meshopt_encodeVertexBufferBound가 반환하는 과도하게 보수적인 최악 경계 축소- Clang/GCC 사용 시
meshopt_decodeIndexBuffer성능 약 15% 개선 - 대형 메시에서
meshopt_buildMeshletsSpatial성능 약 15% 개선 meshopt_partitionClusters성능 약 10% 개선- 4의 배수가 아닌 스트라이드에 대한
meshopt_generateVertexRemap지원 개선 bits=24일 때meshopt_encodeFilterExp의 반올림 오류 수정
추가 개선
clusterlod.h에 경계 확장 기능 추가:clodConfig::simplify_dilate_borders를 통한 식생 단순화 개선- 속성을 사용하는 경우
clusterlod.h의 클러스터 오류 추정 개선 및 LOD 선택의 보수성 완화 clusterlod.h의 메모리 할당 횟수 대폭 감소- 단순화 중
clusterlod.h가 빈 클러스터를 생성하는 경우 수정 -sv인수로 요청할 때gltfpack에서 위치·속성 갱신을 포함한 단순화 구현-gn인수로 요청할 때gltfpack에서 노멀 생성 구현- 양자화를 사용하지 않을 때
gltfpack의 정점 재인덱싱 개선 및 출력 메시 압축도 향상 - 텍스처 변환 확장을 사용한 재질에서
gltfpack의 UV 양자화 수정 - 양자화된 UV 범위가 다르지만 지오메트리가 동일한 메시에서
gltfpack의 메시 중복 제거 수정 - Apple과 GitHub가 macOS/Intel 지원을 중단하는 데 대비해 공식 macOS용
gltfpack바이너리 빌드는 이제 AArch64 전용임. Intel Mac용gltfpack은 계속 수동 빌드 가능함
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요