정점 사이의 곡률에 대한 보간 처리
- 일반적인 smoothing algorithm ( https://wordsandbuttons.online/interactive_explanation_of_marching_cubes_and_dual_contouring.html )
- Marching Cube ( 예시 : 원 )
- 격자공간으로 샘플링 ( 안 : -, 밖 : + )
- 각 격자공간에 대해, 4개의 모서리값에 의해 원을 기반으로하는 선분 적용
- 격자공간에 대해 가중치를 주어, 선분의 위치를 보간
- 가중치는 원(지점)의 중심으로부터의 거리 - 기준원의 길이
-
샘플 파이썬 스니펫
- Dual Controuring
- Marching Cube의 일종으로, vertex들을 그리드위에서 판정하는게 아니라, 그리드 내부에 그리는 형태
- 그리드 내부에 점 하나를 정의하고, 인접한 그리드가 점을 포함할 시 edge를 그리면 될듯
- Marching에 비해 뾰족한 모서리도 표현할 수 있다는 장점 ( 사각형 등 )
- Marching Cube의 일종으로, vertex들을 그리드위에서 판정하는게 아니라, 그리드 내부에 그리는 형태
- Marching Cube ( 예시 : 원 )
Voxel World Plugin
- 복셀월드 그리드 공간 내부의 각 교점들에 대해 내부적으로 계산된 (int)x, (int)y, (int)z, (FVoxelValue) value값이 있음
- Data Set에 Bound param을 넣어 특정된 영역안의 교점리스트를 받는 형태
- 예를들어 구형체의만큼 구멍을 낸다면 bound를 predefine해서 교점리스트를 얻고 아래식을 통해 교점들의 값을 수정 ( VoxelWorld.RemoveSphere() )
const float Distance = FMath::Sqrt(SquaredDistance);
const FVoxelValue NewValue{ FMath::Clamp(Radius - Distance, -2.f, 2.f) / 2 * (bAdd ? -1 : 1) };
VoxelValue = max ( VoxelValue, NewValue ) // marching cube에서 기본적으로 음수가 채워져있음을 의미
- VoxelWorld.SetMaterial(Sphere, Box, 혹은 Int32Vector지정을 기반으로하는 교점 직접지정)으로 특정 material로 painting 가능