SlideShare una empresa de Scribd logo
1 de 43
Descargar para leer sin conexión
마아아치이잉 큐유우브으 알고리즘
김동환
중앙대학교 컴퓨터공학 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/
감사합니다

Más contenido relacionado

La actualidad más candente

쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자
쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자
쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자Seongdae Kim
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기강 민우
 
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들Dae Hyek KIM
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현YEONG-CHEON YOU
 
Cascade Shadow Mapping
Cascade Shadow MappingCascade Shadow Mapping
Cascade Shadow MappingSukwoo Lee
 
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법강 민우
 
2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑Sukwoo Lee
 
[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리MinGeun Park
 
05_Reliable UDP 구현
05_Reliable UDP 구현05_Reliable UDP 구현
05_Reliable UDP 구현noerror
 
08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드noerror
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술henjeon
 
리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션QooJuice
 
Optimization Deep Dive: Unreal Engine 4 on Intel
Optimization Deep Dive: Unreal Engine 4 on IntelOptimization Deep Dive: Unreal Engine 4 on Intel
Optimization Deep Dive: Unreal Engine 4 on IntelIntel® Software
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템QooJuice
 
[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬KyeongWon Koo
 
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기강 민우
 
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)ozlael ozlael
 
물리 기반 셰이더의 이해
물리 기반 셰이더의 이해물리 기반 셰이더의 이해
물리 기반 셰이더의 이해tartist
 

La actualidad más candente (20)

쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자
쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자
쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
Sw occlusion culling
Sw occlusion cullingSw occlusion culling
Sw occlusion culling
 
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
 
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
Cascade Shadow Mapping
Cascade Shadow MappingCascade Shadow Mapping
Cascade Shadow Mapping
 
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
 
2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑
 
[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리
 
05_Reliable UDP 구현
05_Reliable UDP 구현05_Reliable UDP 구현
05_Reliable UDP 구현
 
08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
 
리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션
 
Optimization Deep Dive: Unreal Engine 4 on Intel
Optimization Deep Dive: Unreal Engine 4 on IntelOptimization Deep Dive: Unreal Engine 4 on Intel
Optimization Deep Dive: Unreal Engine 4 on Intel
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
 
[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬
 
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
 
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
 
물리 기반 셰이더의 이해
물리 기반 셰이더의 이해물리 기반 셰이더의 이해
물리 기반 셰이더의 이해
 

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

머신러닝의 자연어 처리기술(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 Treehyun 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
 
유니티 고급 과정 -2-
유니티 고급 과정 -2-유니티 고급 과정 -2-
유니티 고급 과정 -2-Kiyoung Moon
 
Voxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseVoxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseYEONG-CHEON YOU
 
[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_190920hSeokhyun 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 01SangYun Yi
 
딥뉴럴넷 클러스터링 실패기
딥뉴럴넷 클러스터링 실패기딥뉴럴넷 클러스터링 실패기
딥뉴럴넷 클러스터링 실패기Myeongju Kim
 
쏙 알고스터디 01
쏙 알고스터디 01쏙 알고스터디 01
쏙 알고스터디 01Jisu Lee
 
Ch.5 Deep Learning
Ch.5 Deep LearningCh.5 Deep Learning
Ch.5 Deep LearningPartPrime
 
입문 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 transformjdo
 
[컴퓨터비전과 인공지능] 7. 합성곱 신경망 1
[컴퓨터비전과 인공지능] 7. 합성곱 신경망 1[컴퓨터비전과 인공지능] 7. 합성곱 신경망 1
[컴퓨터비전과 인공지능] 7. 합성곱 신경망 1jdo
 
HI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute ForceHI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute ForceJae-yeol Lee
 

Similar 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

Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
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 DetectionKim Daeun
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
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 ...Kim Daeun
 
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)Tae Young Lee
 

Último (6)

Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (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
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
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 ...
 
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)
 

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