SlideShare a Scribd company logo
마아아치이잉 큐유우브으 알고리즘
김동환
중앙대학교 컴퓨터공학 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/
감사합니다

More Related Content

What's hot

5강 알파와알파소팅
5강 알파와알파소팅5강 알파와알파소팅
5강 알파와알파소팅JP Jung
 
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
포프 김
 
[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬KyeongWon Koo
 
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
YEONG-CHEON YOU
 
Bump Mapping
Bump MappingBump Mapping
Bump Mapping
Sukwoo Lee
 
[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능
Yongha Kim
 
MipMap(밉맵)
MipMap(밉맵)MipMap(밉맵)
MipMap(밉맵)
ChoKuangmin
 
Voxelizaition with GPU
Voxelizaition with GPUVoxelizaition with GPU
Voxelizaition with GPU
YEONG-CHEON YOU
 
[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리
MinGeun Park
 
[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1MoonLightMS
 
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
MinGeun Park
 
그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기
Yongha Kim
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희
changehee lee
 
Recast Detour.pptx
Recast Detour.pptxRecast Detour.pptx
Recast Detour.pptx
MUUMUMUMU
 
[0821 박민근] 렌즈 플레어(lens flare)
[0821 박민근] 렌즈 플레어(lens flare)[0821 박민근] 렌즈 플레어(lens flare)
[0821 박민근] 렌즈 플레어(lens flare)
MinGeun Park
 
[0122 구경원]게임에서의 충돌처리
[0122 구경원]게임에서의 충돌처리[0122 구경원]게임에서의 충돌처리
[0122 구경원]게임에서의 충돌처리KyeongWon Koo
 
Screen space reflection
Screen space reflectionScreen space reflection
Screen space reflection
Bongseok Cho
 
08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드noerror
 
UE4 Garbage Collection
UE4 Garbage CollectionUE4 Garbage Collection
UE4 Garbage Collection
QooJuice
 

What's hot (20)

5강 알파와알파소팅
5강 알파와알파소팅5강 알파와알파소팅
5강 알파와알파소팅
 
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
 
[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬
 
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
 
Bump Mapping
Bump MappingBump Mapping
Bump Mapping
 
[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능
 
MipMap(밉맵)
MipMap(밉맵)MipMap(밉맵)
MipMap(밉맵)
 
Voxelizaition with GPU
Voxelizaition with GPUVoxelizaition with GPU
Voxelizaition with GPU
 
[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리
 
[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1
 
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
 
그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희
 
Recast Detour.pptx
Recast Detour.pptxRecast Detour.pptx
Recast Detour.pptx
 
[0821 박민근] 렌즈 플레어(lens flare)
[0821 박민근] 렌즈 플레어(lens flare)[0821 박민근] 렌즈 플레어(lens flare)
[0821 박민근] 렌즈 플레어(lens flare)
 
[0122 구경원]게임에서의 충돌처리
[0122 구경원]게임에서의 충돌처리[0122 구경원]게임에서의 충돌처리
[0122 구경원]게임에서의 충돌처리
 
Screen space reflection
Screen space reflectionScreen space reflection
Screen space reflection
 
08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드
 
UE4 Garbage Collection
UE4 Garbage CollectionUE4 Garbage Collection
UE4 Garbage Collection
 
그림자 이야기
그림자 이야기그림자 이야기
그림자 이야기
 

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

Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술henjeon
 
머신러닝의 자연어 처리기술(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
hyun soomyung
 
딥 러닝 자연어 처리 학습을 위한 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)
WON JOON YOO
 
유니티 고급 과정 -3-
유니티 고급 과정 -3-유니티 고급 과정 -3-
유니티 고급 과정 -3-
Kiyoung Moon
 
Deep learning overview
Deep learning overviewDeep learning overview
Deep learning overview
강민국 강민국
 
유니티 고급 과정 -2-
유니티 고급 과정 -2-유니티 고급 과정 -2-
유니티 고급 과정 -2-
Kiyoung Moon
 
Voxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseVoxel based game_optimazation_relelase
Voxel based game_optimazation_relelase
YEONG-CHEON YOU
 
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
강 민우
 
[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들MinGeun Park
 
Wiki machine learning_and_neuralnet_190920h
Wiki machine learning_and_neuralnet_190920hWiki machine learning_and_neuralnet_190920h
Wiki machine learning_and_neuralnet_190920h
Seokhyun Yoon
 
[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
SangYun Yi
 
딥뉴럴넷 클러스터링 실패기
딥뉴럴넷 클러스터링 실패기딥뉴럴넷 클러스터링 실패기
딥뉴럴넷 클러스터링 실패기
Myeongju Kim
 
쏙 알고스터디 01
쏙 알고스터디 01쏙 알고스터디 01
쏙 알고스터디 01
Jisu Lee
 
Ch.5 Deep Learning
Ch.5 Deep LearningCh.5 Deep Learning
Ch.5 Deep Learning
PartPrime
 
입문 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
jdo
 
[컴퓨터비전과 인공지능] 7. 합성곱 신경망 1
[컴퓨터비전과 인공지능] 7. 합성곱 신경망 1[컴퓨터비전과 인공지능] 7. 합성곱 신경망 1
[컴퓨터비전과 인공지능] 7. 합성곱 신경망 1
jdo
 
HI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute ForceHI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute Force
Jae-yeol Lee
 

Similar to 마칭 큐브 알고리즘 - ZP 2019 데캠 (19)

Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
 
머신러닝의 자연어 처리기술(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
 
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
 
[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
 

마칭 큐브 알고리즘 - 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/