| 프로젝트 유형 | 개발 인원 | 개발 기간 |
|---|---|---|
절차적 애니메이션 테크 데모 |
본인 1명 |
2025.01.16 ~ 2025.03.18 |
| 개발 환경 | 활용 기술 |
|---|---|
DirectX 11 C++ |
3D Math Raycast Octree BVH |
- 서리가 성장하는 절차적 애니메이션 구현
- Mesh의 표면을 따라 성장하여 어떤 모델에서도 수행 가능하도록 구현
| 1. Mesh 표면에 서리 핵을 여러개 배치 | 2. 임의의 서리 핵에서 성장을 시작 | 3. 서리는 Mesh 표면을 따라 성장 |
|
|
|
| 4. 성장하는 가지에서 Sub 가지가 생성 | 5. 핵이 서리와 가까워지면 그 핵에서 성장을 시작 |
6. 서리 가지가 다른 가지와 가까워지면 성장을 멈춤 |
|
|
|
- 서리의 마지막 두 점으로부터 서리의 direction과 normal을 결정합니다.
- direction과 normal을 활용하여 3차원상 원 하나를 특정합니다.
- 원과 mesh의 polygon이 충돌하는 지점을 탐색합니다.
- 처음으로 충돌하는 위치를 다음 성장 지점으로 하면 표면을 따라 성장합니다.
Important
다음 성장 지점을 고르기 위해 원을 활용한 이유
- 메쉬의 다양한 굴곡 형태에 오류 없이 동작하기 위함
raycast를 활용해 다음 성장 지점을 선택하는 방식을 고려하기도 했으나 ray가 메쉬 표면에 충돌하도록 방향을 특정하기 어렵다는 문제가 존재
- 서리의 성장 방향을 보존하기 위함
서리의 성장 방향을 보존하지 않으면 서리가 지그재그로 꺾이는 문제가 존재
Mesh의 표면을 따라 성장하기 위해 원의 자취와 삼각형이 만나는 교차점을 찾습니다.
교차점을 찾는 과정은 직선과 삼각형이 만나는 Raycast 과정에서 착안하여 구현했습니다.
서리 성장 과정에서는 다른 서리와 가까워졌는지 판별하는 로직이 필요했습니다.
핵이 서리와 가까워지면 그 핵에서 서리의 성장을 시작한다.서리 가지가 다른 가지와 가까워지면 성장을 멈춘다.
모든 서리를 순차탐색 한다면 서리가 성장할수록 탐색해야 할 대상이 선형으로 증가합니다. ( O(n) )
따라서 서리의 위치는 Octree를 이용하여 저장하고, 특정 Bound 이내의 서리만 탐색하도록 했습니다. ( O(log n) )








