SlideShare uma empresa Scribd logo
1 de 43
Baixar para ler offline
마아아치이잉 큐유우브으 알고리즘
김동환
중앙대학교 컴퓨터공학 14
전역시켜 주세요…
현재 졸업하고 국방의 의무(산업기능요원) 중
(대충 여기 빡빡이 사진)
그래픽스 얘기 할건데 그래픽스 수업 들으신 분…?
그래픽스 모르셔도 관련 용어에 대해선 쉽게 설명해 드릴겁니다.
어차피 실습 없이 이론 얘기만 할겁니다.
그리고 이미 이 알고리즘을 알고 계시면 안 들으셔도 됩니다…
3D 모델은 뭘로 이루어져 있을까요?
https://www.pinterest.co.kr/pin/464715255282148805
3D 모델은 뭘로 이루어져 있을까요?
https://www.pinterest.co.kr/pin/464715255282148805
Vertex 배열
1
2
3
Index 배열
1
2
3
Face
(수학에선 점 세 개와 벡터 하나로 면이 정의됨)
Index 배열 의 역할은
1. 특정 면을 이루고 있는 정점들을 알려줌.
2. 면의 법선 벡터를 알려줌. (겉인지 안인지 알려줌)
1
2 3
𝑏
Ԧ𝑎Ԧ𝑎 × 𝑏
1
2
3
4
5
1번 면은 vertex 1, 2, 3으로 이루어짐.
2번 면은 vertex 3, 4, 5로 이루어짐.
법선 벡터는 그래픽스에서 빛의 반사나
culling 등 다양한 곳에서 쓰임.
1
2
3
Face
N
3D Model
보통 Face = Polygon 그리고 3D Model = Mesh 라고 부릅니다.
그래서 보통 아트 디자이너 분들이 만들어줍니다.
그런데… 모델을 미리 만들 수 없다면…?
Ex) 임의로 생성되는 지형(Terrains)
https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch01.html
Marching Cubes Algorithm
Lorensen와 Cline이 1987년 SIGGRAPH 에 발표한 알고리즘
3차원 공간의 물체를 가장 잘 표현하는 polygon mesh를 결과로 반환함.
(표현하려는 물체와 가장 비슷한 polygon mesh를 그려줌)
처음에는 의학에서 CT나 MRI같은 스캔 영상의 시각화를 위해 사용함.
한동안 특허때문에 많이 사용되지 못함. (지금은 특허 만료됨)
http://www.kompath.com/HSCM/index.html
마칭 큐브 알고리즘에서의 입력값은?
‘경계가 있는 부동 소수점 값’의 3차원 배열
F < 0
F > 0
F = 0
마칭 큐브 알고리즘에서의 입력값은?
‘경계가 있는 부동 소수점 값’의 3차원 배열
F > 0
F < 0
F = 0
http://polymathprogrammer.com/2008/09/01/cartesian-
coordinates-and-transformation-matrices/
한 칸 한 칸을 voxel이라고 부름
지금부터 이 voxel 배열을 순회하면서 메쉬로 변환할 겁니다.
이래서 이름이 Marching cubes(행진하는 큐브들)입니다.
F < 0
F
F > 0
1. 8개의 voxel을 하나의 큐브로 정의
F
F < 0
5 6
1 2
47
0 3
편의를 위해 같은 큐브를 보는 방향만 바꿈
2. 조건에 해당되는 폴리곤 메쉬 찾기
8개의 모서리에 대해 나올 수 있는 경우의 수 = 2 ^ 8 = 256
왼쪽의 이미지는 256개의 경우의 수에서
회전 또는 대칭에 의한 중복,
8개가 모두 같은 경우를 제외함
https://developer.nvidia.com/gpugems/GPUGems3/gpug
ems3_ch01.html
2. 조건에 해당되는 폴리곤 메쉬 찾기
그래서 위에서 나온 큐브는 아래와 같이 폴리곤 메쉬가 생성됩니다.
2. 조건에 해당되는 폴리곤 메쉬 찾기
물론 폴리곤 메쉬를 만들기 위해
vertex 배열과 index 배열을 찾아야 합니다.
3. Vertex 찾기
vertex는 소수점의 +/-가 교차하는 edge 위에 존재합니다.
그래서 vertex를 edge번호로 구분할 수 있습니다.
3. Vertex 찾기
그래서 단순하게 하려면 edge 가운데에 찍으면 되요.
3. Vertex 찾기
근데 그러면 결과가 그렇게 보기 좋지 않아요.
https://youtu.be/M3iI2l0ltbE
3. Vertex 찾기
조금 더 진짜 같은 모델을 만들려면 voxel 값을 정의해야 합니다.
+ 0.2 - 0.8
일반적으로 표면과의 거리를 사용합니다.
선형 보간법(linear interpolation) 적용
3. Vertex 찾기
조금 더 진짜 같은 모델을 만들려면 voxel 값을 정의해야 합니다.
https://youtu.be/M3iI2l0ltbE
Index는 아까 봤던 256개의 경우의 수 중 하나를 찾으면 알 수 있습니다…만…
그럼… 256개의 경우의 수를 일일이 입력해야 해요?
4. Lookup table 찾아보기
구글링하면 이런 식으로 참조표(lookup table)을 만들어 둔게 있습니다.
F < 0
F
F > 0
F
F < 0
5 6
1 2
47
0 3
이 큐브의 구성은 v7|v6|v5|v4|v3|v2|v1|v0 = 11000001 = 193
4. Lookup table 찾아보기
4. Lookup table 찾아보기
따라서 아까 구한 193을 방금 본 참조표의 인덱스로 사용하면 됩니다.
193
int edge =
edgeTable[193]
아래의 Lookup table은 예시. 실제로는 구현하기 나름임.
int[16] triangles =
trianglesTable[193]
12개의 edge 중에 vertex가 있는 edge를
1로 나타낸 12비트 정수값을 반환함.
최대 5개의 triangle의 index들을
배열로 반환함. (edge 번호)
전체 과정
193
int edgeTable[193]
int[16] trianglesTable[193]
2. 조건에 해당되는
폴리곤 메쉬 찾기
1. 8개의 voxel을
하나의 큐브로 정의
4. Lookup table 찾아보기
+ 0.2 - 0.8
3. Vertex 찾기
{ Index 배열 }
전체 과정
Voxel 공간 처음부터 끝까지 반복하면서 저장한 다음 메쉬화 하면 됩니다.
(0, 0, 0) 부터 (width-1, height-1, depth-1)까지 반복
전체 과정
https://youtu.be/M3iI2l0ltbE?t=156
Voxel 크기 조절
Voxel의 크기에 따라 뭉개지거나 면이 생성되지 않을 수 있음.
마칭 큐브와 노이즈 모델로 지형 만들기
Perlin Noise(펄린 노이즈): 켄 펄린(Ken Perlin)이 개발한 노이즈 함수로 구름이나 대리
석같은 자연물을 표현하는데 유용함.(1997년 아카데미 과학 기술상)
https://ko.khanacademy.org/computing/computer-
programming/programming-natural-simulations/programming-
noise/a/perlin-noise
마칭 큐브와 노이즈 모델로 지형 만들기
https://youtu.be/M3iI2l0ltbE?t=226
한계점
날카로운 모서리를 잘 표현하지 못함.
https://www.boristhebrave.com/2018/04/15/dual-contouring-tutorial/
한계점
자잘한 삼각형 메쉬가 생겨서 모델이 조금 더러움
https://www.boristhebrave.com/2018/04/15/dual-contouring-tutorial/
마칭 큐브 알고리즘 다른 알고리즘
한계점
Voxel 개수가 많아질수록 미친듯이 늘어나는 모델의 vertex 개수와 계산 시간
그래서 GPU 병렬 프로그래밍을 적용하거나 메쉬 단순화를 적용하거나 합니다.
Nvidia에서 올린 GPU로 복잡한
절차적 지형 생성하는 방법
그 이후로 나온 것들…
큐브 대신 사면체를 씁시다
Dual contouring
Dual marching cubes
이것들이 대체 뭐냐고 물어보지 마세요. 저도 몰라요.
킹왕짱 Poisson
surface
reconstruction
그래도 장점은
다른 알고리즘에 비해 구현하기 매우 쉽습니다. 이론도 쉽고요.
아무튼 발표는 여기까지고 참고 자료들…
Sebastian Lague의 Coding Adventure: https://github.com/SebLague/Marching-
Cubes
Unity로 체험할 수 있는 마칭 큐우으브으
Perlin noise에 DirectX 기반 GPU 병렬 프로그래밍 적용: https://github.com/Scrawk/Marching-
Cubes-On-The-GPU
마칭 큐브 + 지형 만드는 방법 (텍스쳐도 입힐 수 있음!!!)
제가 공유하는거 까먹을 수도 있으니 카메라로 찍든지 하세요.
Nvidia GPU Gems 3: https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch01.html
마칭 큐브나 그 외 알고리즘 이론 참고
마칭 큐브, 마칭 사면체에 대한 정리: http://paulbourke.net/geometry/polygonise/
Dual contouring: https://www.boristhebrave.com/2018/04/15/dual-contouring-tutorial/
감사합니다

Mais conteúdo relacionado

Mais procurados

[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1
MoonLightMS
 
[0122 구경원]게임에서의 충돌처리
[0122 구경원]게임에서의 충돌처리[0122 구경원]게임에서의 충돌처리
[0122 구경원]게임에서의 충돌처리
KyeongWon Koo
 
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
MinGeun Park
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
devCAT Studio, NEXON
 
Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion Culling
YEONG-CHEON YOU
 

Mais procurados (20)

Implements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture ArrayImplements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture Array
 
[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1
 
Ssao
SsaoSsao
Ssao
 
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
 
[NDC 2018] 유체역학 엔진 개발기
[NDC 2018] 유체역학 엔진 개발기[NDC 2018] 유체역학 엔진 개발기
[NDC 2018] 유체역학 엔진 개발기
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희
 
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
 
[0122 구경원]게임에서의 충돌처리
[0122 구경원]게임에서의 충돌처리[0122 구경원]게임에서의 충돌처리
[0122 구경원]게임에서의 충돌처리
 
2009-2016 기본기(손맵)의 중요성
2009-2016 기본기(손맵)의 중요성2009-2016 기본기(손맵)의 중요성
2009-2016 기본기(손맵)의 중요성
 
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
 
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
 
DirectX 11 Rendering in Battlefield 3
DirectX 11 Rendering in Battlefield 3DirectX 11 Rendering in Battlefield 3
DirectX 11 Rendering in Battlefield 3
 
코로나19로 인해 변화된 우리 시대의 데이터 트랜드
코로나19로 인해 변화된 우리 시대의 데이터 트랜드코로나19로 인해 변화된 우리 시대의 데이터 트랜드
코로나19로 인해 변화된 우리 시대의 데이터 트랜드
 
Screen space reflection
Screen space reflectionScreen space reflection
Screen space reflection
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
 
AAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptxAAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptx
 
Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion Culling
 
딥러닝 기본 원리의 이해
딥러닝 기본 원리의 이해딥러닝 기본 원리의 이해
딥러닝 기본 원리의 이해
 
빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술
 
Display color와 Digital texture format의 이해
Display color와 Digital texture format의 이해Display color와 Digital texture format의 이해
Display color와 Digital texture format의 이해
 

Semelhante a 마칭 큐브 알고리즘 - ZP 2019 데캠

[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들
MinGeun Park
 

Semelhante a 마칭 큐브 알고리즘 - ZP 2019 데캠 (17)

머신러닝의 자연어 처리기술(I)
머신러닝의 자연어 처리기술(I)머신러닝의 자연어 처리기술(I)
머신러닝의 자연어 처리기술(I)
 
The Art of Computer Programming 2.3.2 Tree
The Art of Computer Programming 2.3.2 TreeThe Art of Computer Programming 2.3.2 Tree
The Art of Computer Programming 2.3.2 Tree
 
딥 러닝 자연어 처리 학습을 위한 PPT! (Deep Learning for Natural Language Processing)
딥 러닝 자연어 처리 학습을 위한 PPT! (Deep Learning for Natural Language Processing)딥 러닝 자연어 처리 학습을 위한 PPT! (Deep Learning for Natural Language Processing)
딥 러닝 자연어 처리 학습을 위한 PPT! (Deep Learning for Natural Language Processing)
 
유니티 고급 과정 -3-
유니티 고급 과정 -3-유니티 고급 과정 -3-
유니티 고급 과정 -3-
 
Deep learning overview
Deep learning overviewDeep learning overview
Deep learning overview
 
유니티 고급 과정 -2-
유니티 고급 과정 -2-유니티 고급 과정 -2-
유니티 고급 과정 -2-
 
Voxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseVoxel based game_optimazation_relelase
Voxel based game_optimazation_relelase
 
[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들
 
Wiki machine learning_and_neuralnet_190920h
Wiki machine learning_and_neuralnet_190920hWiki machine learning_and_neuralnet_190920h
Wiki machine learning_and_neuralnet_190920h
 
[IGC 2016] 부산게임아카데미 김성완 - ShaderToy에서 구현하는 거리함수 기반의 레이마칭 렌더링 알고리즘
[IGC 2016] 부산게임아카데미 김성완 - ShaderToy에서 구현하는 거리함수 기반의 레이마칭 렌더링 알고리즘[IGC 2016] 부산게임아카데미 김성완 - ShaderToy에서 구현하는 거리함수 기반의 레이마칭 렌더링 알고리즘
[IGC 2016] 부산게임아카데미 김성완 - ShaderToy에서 구현하는 거리함수 기반의 레이마칭 렌더링 알고리즘
 
Unity Surface Shader for Artist 01
Unity Surface Shader for Artist 01Unity Surface Shader for Artist 01
Unity Surface Shader for Artist 01
 
딥뉴럴넷 클러스터링 실패기
딥뉴럴넷 클러스터링 실패기딥뉴럴넷 클러스터링 실패기
딥뉴럴넷 클러스터링 실패기
 
쏙 알고스터디 01
쏙 알고스터디 01쏙 알고스터디 01
쏙 알고스터디 01
 
Ch.5 Deep Learning
Ch.5 Deep LearningCh.5 Deep Learning
Ch.5 Deep Learning
 
입문 Visual SLAM 14강 - 3장 3d rigid body transform
입문 Visual SLAM 14강 - 3장 3d rigid body transform입문 Visual SLAM 14강 - 3장 3d rigid body transform
입문 Visual SLAM 14강 - 3장 3d rigid body transform
 
[컴퓨터비전과 인공지능] 7. 합성곱 신경망 1
[컴퓨터비전과 인공지능] 7. 합성곱 신경망 1[컴퓨터비전과 인공지능] 7. 합성곱 신경망 1
[컴퓨터비전과 인공지능] 7. 합성곱 신경망 1
 
HI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute ForceHI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute Force
 

Último

Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
Wonjun Hwang
 

Último (7)

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 

마칭 큐브 알고리즘 - ZP 2019 데캠

  • 2. 김동환 중앙대학교 컴퓨터공학 14 전역시켜 주세요… 현재 졸업하고 국방의 의무(산업기능요원) 중 (대충 여기 빡빡이 사진)
  • 3. 그래픽스 얘기 할건데 그래픽스 수업 들으신 분…? 그래픽스 모르셔도 관련 용어에 대해선 쉽게 설명해 드릴겁니다.
  • 4. 어차피 실습 없이 이론 얘기만 할겁니다. 그리고 이미 이 알고리즘을 알고 계시면 안 들으셔도 됩니다…
  • 5. 3D 모델은 뭘로 이루어져 있을까요? https://www.pinterest.co.kr/pin/464715255282148805
  • 6. 3D 모델은 뭘로 이루어져 있을까요? https://www.pinterest.co.kr/pin/464715255282148805
  • 7. Vertex 배열 1 2 3 Index 배열 1 2 3 Face (수학에선 점 세 개와 벡터 하나로 면이 정의됨)
  • 8. Index 배열 의 역할은 1. 특정 면을 이루고 있는 정점들을 알려줌. 2. 면의 법선 벡터를 알려줌. (겉인지 안인지 알려줌) 1 2 3 𝑏 Ԧ𝑎Ԧ𝑎 × 𝑏 1 2 3 4 5 1번 면은 vertex 1, 2, 3으로 이루어짐. 2번 면은 vertex 3, 4, 5로 이루어짐. 법선 벡터는 그래픽스에서 빛의 반사나 culling 등 다양한 곳에서 쓰임.
  • 9. 1 2 3 Face N 3D Model 보통 Face = Polygon 그리고 3D Model = Mesh 라고 부릅니다.
  • 10. 그래서 보통 아트 디자이너 분들이 만들어줍니다.
  • 11. 그런데… 모델을 미리 만들 수 없다면…?
  • 12. Ex) 임의로 생성되는 지형(Terrains) https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch01.html
  • 13. Marching Cubes Algorithm Lorensen와 Cline이 1987년 SIGGRAPH 에 발표한 알고리즘 3차원 공간의 물체를 가장 잘 표현하는 polygon mesh를 결과로 반환함. (표현하려는 물체와 가장 비슷한 polygon mesh를 그려줌) 처음에는 의학에서 CT나 MRI같은 스캔 영상의 시각화를 위해 사용함. 한동안 특허때문에 많이 사용되지 못함. (지금은 특허 만료됨) http://www.kompath.com/HSCM/index.html
  • 14. 마칭 큐브 알고리즘에서의 입력값은? ‘경계가 있는 부동 소수점 값’의 3차원 배열 F < 0 F > 0 F = 0
  • 15. 마칭 큐브 알고리즘에서의 입력값은? ‘경계가 있는 부동 소수점 값’의 3차원 배열 F > 0 F < 0 F = 0 http://polymathprogrammer.com/2008/09/01/cartesian- coordinates-and-transformation-matrices/ 한 칸 한 칸을 voxel이라고 부름
  • 16. 지금부터 이 voxel 배열을 순회하면서 메쉬로 변환할 겁니다. 이래서 이름이 Marching cubes(행진하는 큐브들)입니다.
  • 17. F < 0 F F > 0 1. 8개의 voxel을 하나의 큐브로 정의 F F < 0 5 6 1 2 47 0 3 편의를 위해 같은 큐브를 보는 방향만 바꿈
  • 18. 2. 조건에 해당되는 폴리곤 메쉬 찾기 8개의 모서리에 대해 나올 수 있는 경우의 수 = 2 ^ 8 = 256 왼쪽의 이미지는 256개의 경우의 수에서 회전 또는 대칭에 의한 중복, 8개가 모두 같은 경우를 제외함 https://developer.nvidia.com/gpugems/GPUGems3/gpug ems3_ch01.html
  • 19. 2. 조건에 해당되는 폴리곤 메쉬 찾기 그래서 위에서 나온 큐브는 아래와 같이 폴리곤 메쉬가 생성됩니다.
  • 20. 2. 조건에 해당되는 폴리곤 메쉬 찾기 물론 폴리곤 메쉬를 만들기 위해 vertex 배열과 index 배열을 찾아야 합니다.
  • 21. 3. Vertex 찾기 vertex는 소수점의 +/-가 교차하는 edge 위에 존재합니다. 그래서 vertex를 edge번호로 구분할 수 있습니다.
  • 22. 3. Vertex 찾기 그래서 단순하게 하려면 edge 가운데에 찍으면 되요.
  • 23. 3. Vertex 찾기 근데 그러면 결과가 그렇게 보기 좋지 않아요. https://youtu.be/M3iI2l0ltbE
  • 24. 3. Vertex 찾기 조금 더 진짜 같은 모델을 만들려면 voxel 값을 정의해야 합니다. + 0.2 - 0.8 일반적으로 표면과의 거리를 사용합니다. 선형 보간법(linear interpolation) 적용
  • 25. 3. Vertex 찾기 조금 더 진짜 같은 모델을 만들려면 voxel 값을 정의해야 합니다. https://youtu.be/M3iI2l0ltbE
  • 26. Index는 아까 봤던 256개의 경우의 수 중 하나를 찾으면 알 수 있습니다…만…
  • 27. 그럼… 256개의 경우의 수를 일일이 입력해야 해요?
  • 28. 4. Lookup table 찾아보기 구글링하면 이런 식으로 참조표(lookup table)을 만들어 둔게 있습니다.
  • 29. F < 0 F F > 0 F F < 0 5 6 1 2 47 0 3 이 큐브의 구성은 v7|v6|v5|v4|v3|v2|v1|v0 = 11000001 = 193 4. Lookup table 찾아보기
  • 30. 4. Lookup table 찾아보기 따라서 아까 구한 193을 방금 본 참조표의 인덱스로 사용하면 됩니다. 193 int edge = edgeTable[193] 아래의 Lookup table은 예시. 실제로는 구현하기 나름임. int[16] triangles = trianglesTable[193] 12개의 edge 중에 vertex가 있는 edge를 1로 나타낸 12비트 정수값을 반환함. 최대 5개의 triangle의 index들을 배열로 반환함. (edge 번호)
  • 31. 전체 과정 193 int edgeTable[193] int[16] trianglesTable[193] 2. 조건에 해당되는 폴리곤 메쉬 찾기 1. 8개의 voxel을 하나의 큐브로 정의 4. Lookup table 찾아보기 + 0.2 - 0.8 3. Vertex 찾기 { Index 배열 }
  • 32. 전체 과정 Voxel 공간 처음부터 끝까지 반복하면서 저장한 다음 메쉬화 하면 됩니다. (0, 0, 0) 부터 (width-1, height-1, depth-1)까지 반복
  • 34. Voxel 크기 조절 Voxel의 크기에 따라 뭉개지거나 면이 생성되지 않을 수 있음.
  • 35. 마칭 큐브와 노이즈 모델로 지형 만들기 Perlin Noise(펄린 노이즈): 켄 펄린(Ken Perlin)이 개발한 노이즈 함수로 구름이나 대리 석같은 자연물을 표현하는데 유용함.(1997년 아카데미 과학 기술상) https://ko.khanacademy.org/computing/computer- programming/programming-natural-simulations/programming- noise/a/perlin-noise
  • 36. 마칭 큐브와 노이즈 모델로 지형 만들기 https://youtu.be/M3iI2l0ltbE?t=226
  • 37. 한계점 날카로운 모서리를 잘 표현하지 못함. https://www.boristhebrave.com/2018/04/15/dual-contouring-tutorial/
  • 38. 한계점 자잘한 삼각형 메쉬가 생겨서 모델이 조금 더러움 https://www.boristhebrave.com/2018/04/15/dual-contouring-tutorial/ 마칭 큐브 알고리즘 다른 알고리즘
  • 39. 한계점 Voxel 개수가 많아질수록 미친듯이 늘어나는 모델의 vertex 개수와 계산 시간 그래서 GPU 병렬 프로그래밍을 적용하거나 메쉬 단순화를 적용하거나 합니다. Nvidia에서 올린 GPU로 복잡한 절차적 지형 생성하는 방법
  • 40. 그 이후로 나온 것들… 큐브 대신 사면체를 씁시다 Dual contouring Dual marching cubes 이것들이 대체 뭐냐고 물어보지 마세요. 저도 몰라요. 킹왕짱 Poisson surface reconstruction
  • 41. 그래도 장점은 다른 알고리즘에 비해 구현하기 매우 쉽습니다. 이론도 쉽고요.
  • 42. 아무튼 발표는 여기까지고 참고 자료들… Sebastian Lague의 Coding Adventure: https://github.com/SebLague/Marching- Cubes Unity로 체험할 수 있는 마칭 큐우으브으 Perlin noise에 DirectX 기반 GPU 병렬 프로그래밍 적용: https://github.com/Scrawk/Marching- Cubes-On-The-GPU 마칭 큐브 + 지형 만드는 방법 (텍스쳐도 입힐 수 있음!!!) 제가 공유하는거 까먹을 수도 있으니 카메라로 찍든지 하세요. Nvidia GPU Gems 3: https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch01.html 마칭 큐브나 그 외 알고리즘 이론 참고 마칭 큐브, 마칭 사면체에 대한 정리: http://paulbourke.net/geometry/polygonise/ Dual contouring: https://www.boristhebrave.com/2018/04/15/dual-contouring-tutorial/