SlideShare a Scribd company logo
범프매핑( bump mapping ) 2010/09/18 Devrookie엠에스박( 박민수 )
목차 범프매핑이란? 기본 아이디어 범프매핑 종류 범프매핑 구현 소스 참고 Q & A
범프매핑이란? 범프매핑: 1978년도 blinn에 의해 제안된 표면에 울퉁불퉁한 굴곡이 있도록 보이는 범프 맵( 텍스쳐)를 사용한 기법이다. 특정 기술 하나를 지칭하는 것이 아니라 위와 같은 기법들을 모두 범프매핑이라 한다.
기본 아이디어 3D처럼 보이게 하려면 입체감이 있어야 한다. 2D화면에서 입체감은 그림이나 사진과 마찬가지로 그림자( 음영 )이 있어야 한다. 많은 버텍스를 이용해서 3D 모델을 그렸다 하더라도 음영이 없다면 그저 밋밋하게 보일 뿐이다.
기본 아이디어
기본 아이디어 점점 더 입체적인 그래픽을 제공해야 한다. 이를 위해서는 버텍스 많이 들어간 모델이 필요하지만 메모리 낭비와 부하가 발생한다. 입체는 결국 음영으로 결정된다. 음영만 잘 나타난다면 로우폴리곤 모델도 하이 폴리곤 모델처럼 보일 수 있다.
기본 아이디어 굴곡이 지는 모습을 연출 하고 싶은 모델이 있다. 이 굴곡을 표현할 수 있는 하이 폴리곤 모델을 만든다. 하이 폴리곤의 멋진 음영을 저장한다. 로우폴리곤에 저장된 음영을 적용 시킨다. 로우폴리곤으로 하이 폴리곤의 효과를 누린다.
기본 아이디어 음영 처리는 라이팅이 적용되었다는 의미이다. 라이팅은 법선 벡터( 노말 벡터 )와 광원 벡터를 통해 계산된다. 로우폴리곤 모델에서 하이 폴리곤 모델의 법선 벡터를 적용하려면 버텍스를대칭시키는 것으로는 계산 할 수 없다.
기본 아이디어 음영을 저장한다.  모델의 법선 벡터를 저장한다. 픽셀 단위로 저장해야 한다. 딱 맞는 저장 공간 -> 텍스쳐!( 법선 맵) R , G , B 값에 벡터 X , Y , Z를 저장한다. 계산 할 때는 R , G , B값을 벡터 X , Y , Z로 변환해서 계산한다.
기본 아이디어
기본 아이디어
기본 아이디어
기본 아이디어 로우폴리곤-> 범프매핑-> 텍스쳐 추가 -> 쉐도우 추가
기본 아이디어 주의할 점 앞에서도 말했듯이 픽셀 당 계산일 뿐 버텍스에는 어느 영향도 끼치지 않는다. 즉 버텍스가 많아지거나 위치가 변화하는 것은 아니다. 위에 것이 연장선으로 정상적인 굴곡의 차폐를 기대해서는 안 된다. 안 보여야 될 부분이 보이는 등 문제가 생길 수 있다.
범프매핑 종류 범프맵 종류 Offset Vector Bump Map Height Field Bump Map Normal Map 범프매핑 종류 Emboss Bump Mapping Dot Product Bump Mapping Environment Map Bump Mapping
범프매핑 종류 범프맵 종류 Offset Vector Bump Map Height Field Bump Map Normal Map 범프매핑 종류 Emboss Bump Mapping Dot Product Bump Mapping Environment Map Bump Mapping
범프매핑 구현 – 법선 벡터 저장 텍스쳐에법선의 방향을 저장해야 한다. 쉬운 방법으로는 모델의 기복을 높이맵으로 저장한 뒤 가공하는 것이다. 높이맵은0~255사이값을 이용해 높이만 저장시키는 텍스쳐를 말한다. ( 흰색이 높은 부분 검은색이 낮은 부분을 의미한다. )
범프매핑 구현 – 법선 벡터 저장
범프매핑 구현 – 법선 맵 구하기 높이 맵에서 법선 맵으로 변환하려면 약간의 계산이 필요하다. 기본 원리는 구하고자 하는 UV좌표의 한칸씩 옆에 있는 높이값의 평균을 이용해 두개의 벡터를 만들고 그 벡트들의 외적을 구하는 것이다. D3DXComputeNormalMap() 사용하면 된다.
범프매핑 구현 – 법선 맵 구하기
범프매핑 구현 – 법선 맵 구하기 델타 x , 델타 y는 바로 옆에 것을 사용하려면 1로 잡으면 된다. 나온 높이값에 비율을 적용시키면 그 비율 만큼 더 밝고 어두운 부분이 강해지거나 약해진다. UV중 U를 X축으로 V를 Y축으로 법선을Z축으로 저장하고 있다. 그래서 파랗구나...
범프매핑 구현 – 법선 맵 구하기
범프매핑 구현 – 법선 맵 구하기 위에 방법을 사용하면 탄젠트 공간을 기준으로 법선을 저장하였다라고 말한다. 탄젠트 벡터가 X , 종법선 벡터가 Y , 법선 벡터가 Z  왜 그냥 평범하게 노말값을 계산해서 저장하지 않고 이런 변환을 통해서 탄젠트 공간 기준의 노말값을 저장하는 것일까?
범프매핑 구현 – 법선 맵 구하기 탄젠트 공간 법선 맵 오브젝트 공간 법선 맵
범프매핑 구현 – 법선 맵 구하기 오브젝트 공간 법선 맵 생성 방법 : 그냥 모델에서 뽑으면 된다. 장점 사용하기 쉽다. ( 그냥 계산 하면 된다. ) 단점 움직이는 물체에 적용하기엔 부적절하다.( 연산이 너무 많아진다. )
범프매핑 구현 – 법선 맵 구하기 탄젠트 공간 법선 맵 생성 방법 : 위의 방법대로 뽑으면 된다. 장점 법선을 변환할 필요는 없다. 단점 카메라 , 버텍스등을 탄젠트 공간으로 변환해야 한다.
범프매핑 구현 – 법선 맵 구하기 오브젝트 공간 법선 맵을 사용한다고 가정하면 캐릭터가 애니메이션이라도 하는 날에는 법선들을 애니메이션에 맞게 변환해 주어야 하는데텍스쳐에서 뽑은 값이기도 하고 텍셀마다 처리를 하기 때문에 픽셀 쉐이더가계산량이 너무 많아진다. 탄젠트 공간 법선 맵을 쓰자.
범프매핑 구현 – 법선 맵 구하기 미리 법선 맵을 생성하고 사용하는 것이 더 좋다. NVDIA에서 제공하는 Photoshop 플러그인 Normal Map Plugin등 법선 맵을 만들어 주는 처리가 많다. 요즘 툴들이 좋아서 모델 만들 때 같이 뽑혀 나온다.
범프매핑 구현 – 법선 맵 적용 법선 맵을 적용하는 방법은 적용하고자 하는 물체의 버텍스, 카메라 , 조명등 계산에 필요한 것들을 탄젠트 공간으로 변환하고 계산하면 된다. 탄젠트 공간에 대해 다시 정리하면 T : Tangent Vector B : Binormal Vector N : Normal Vector 이 3개가 기저인 공간이다.
범프매핑 구현 – 법선 맵 적용
범프매핑 구현 – 법선 맵 적용 로컬 좌표계 에서 탄젠트 공간으로 변환 X -> U , Y -> V로 변환되어야 한다.
범프매핑 구현 – 법선 맵 적용 삼각형의 각 버텍스를P0 , P1 , P2로 생각하자. 그리고 각각 버텍스의UV좌표를( u0 , v0 ) , ( u1 , v1 ) , ( u2 , v2 )로 생각하자. 이 삼각형 안의 한 점을 Q로 보고 UV좌표를( u , v )로 생각하자. 탄젠트 공간으로 변환해주는 행렬은 다음과 같다. 이 행렬을 구해보자.
범프매핑 구현 – 법선 맵 적용
범프매핑 구현 – 법선 맵 적용
범프매핑 구현 – 법선 맵 적용 정점들의 T , B 벡터들의 평균을 이용해서 계산하면 직교하지 않을 수 있다. 안전하게 그램 – 슈미트 방법으로 직교하는 기저를 만들어 준다. D3DXComputeTangent() 사용 T′ = T − (N · T)NB′ = B − (N · B)N − (T′ · B)T′/T′2
범프매핑 구현 – 법선 맵 적용
범프매핑 구현 – 법선 맵 적용 탄젠트 공간 변환 행렬을 버텍스쉐이더에 넘겨주어서 광원 벡터 , 카메라 시선 벡터등을 변환해 준다. 픽셀 쉐이더에서는 법선 맵의RGB를 읽어드려서 조명계산을 해주면 된다.
소스 참고
참고자료 Real Time Rendering2판 DirectX 9 쉐이더 프로그래밍 http://allosha.tistory.com/category/3D%20그래픽스%20매니악스/법선맵(노말맵) http://www.gamasutra.com/view/feature/1515/messing_with_tangent_space.php?page=1 http://www.terathon.com/code/tangent.html http://en.wikipedia.org/wiki/Gram-Schmidt
마무리 끝

More Related Content

What's hot

[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shadingMinGeun Park
 
Shader Programming With Unity
Shader Programming With UnityShader Programming With Unity
Shader Programming With Unity
Mindstorm Studios
 
DirectX 11 Rendering in Battlefield 3
DirectX 11 Rendering in Battlefield 3DirectX 11 Rendering in Battlefield 3
DirectX 11 Rendering in Battlefield 3
Electronic Arts / DICE
 
smallpt: Global Illumination in 99 lines of C++
smallpt:  Global Illumination in 99 lines of C++smallpt:  Global Illumination in 99 lines of C++
smallpt: Global Illumination in 99 lines of C++
鍾誠 陳鍾誠
 
The Unique Lighting of Mirror's Edge
The Unique Lighting of Mirror's EdgeThe Unique Lighting of Mirror's Edge
The Unique Lighting of Mirror's Edge
Electronic Arts / DICE
 
Frostbite on Mobile
Frostbite on MobileFrostbite on Mobile
Frostbite on Mobile
Electronic Arts / DICE
 
Brdf기반 사전정의 스킨 셰이더
Brdf기반 사전정의 스킨 셰이더Brdf기반 사전정의 스킨 셰이더
Brdf기반 사전정의 스킨 셰이더동석 김
 
CG 論文講読会 2013/2/12 "A reconstruction filter for plausible motion blur"
CG 論文講読会 2013/2/12 "A reconstruction filter for plausible motion blur"CG 論文講読会 2013/2/12 "A reconstruction filter for plausible motion blur"
CG 論文講読会 2013/2/12 "A reconstruction filter for plausible motion blur"
Ryo Suzuki
 
DD18 - SEED - Raytracing in Hybrid Real-Time Rendering
DD18 - SEED - Raytracing in Hybrid Real-Time RenderingDD18 - SEED - Raytracing in Hybrid Real-Time Rendering
DD18 - SEED - Raytracing in Hybrid Real-Time Rendering
Electronic Arts / DICE
 
Lighting you up in Battlefield 3
Lighting you up in Battlefield 3Lighting you up in Battlefield 3
Lighting you up in Battlefield 3
Electronic Arts / DICE
 
Siezen duzen
Siezen duzenSiezen duzen
Siezen duzen
suzanneeckhardt
 
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
ozlael ozlael
 
The Intersection of Game Engines & GPUs: Current & Future (Graphics Hardware ...
The Intersection of Game Engines & GPUs: Current & Future (Graphics Hardware ...The Intersection of Game Engines & GPUs: Current & Future (Graphics Hardware ...
The Intersection of Game Engines & GPUs: Current & Future (Graphics Hardware ...Johan Andersson
 
Hable John Uncharted2 Hdr Lighting
Hable John Uncharted2 Hdr LightingHable John Uncharted2 Hdr Lighting
Hable John Uncharted2 Hdr Lighting
ozlael ozlael
 
15_TextureAtlas
15_TextureAtlas15_TextureAtlas
15_TextureAtlas
noerror
 
Custom SRP and graphics workflows - Unite Copenhagen 2019
Custom SRP and graphics workflows - Unite Copenhagen 2019Custom SRP and graphics workflows - Unite Copenhagen 2019
Custom SRP and graphics workflows - Unite Copenhagen 2019
Unity Technologies
 
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
강 민우
 
Lighting the City of Glass
Lighting the City of GlassLighting the City of Glass
Lighting the City of Glass
Electronic Arts / DICE
 

What's hot (20)

[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading
 
Shader Programming With Unity
Shader Programming With UnityShader Programming With Unity
Shader Programming With Unity
 
DirectX 11 Rendering in Battlefield 3
DirectX 11 Rendering in Battlefield 3DirectX 11 Rendering in Battlefield 3
DirectX 11 Rendering in Battlefield 3
 
smallpt: Global Illumination in 99 lines of C++
smallpt:  Global Illumination in 99 lines of C++smallpt:  Global Illumination in 99 lines of C++
smallpt: Global Illumination in 99 lines of C++
 
The Unique Lighting of Mirror's Edge
The Unique Lighting of Mirror's EdgeThe Unique Lighting of Mirror's Edge
The Unique Lighting of Mirror's Edge
 
Frostbite on Mobile
Frostbite on MobileFrostbite on Mobile
Frostbite on Mobile
 
Brdf기반 사전정의 스킨 셰이더
Brdf기반 사전정의 스킨 셰이더Brdf기반 사전정의 스킨 셰이더
Brdf기반 사전정의 스킨 셰이더
 
CG 論文講読会 2013/2/12 "A reconstruction filter for plausible motion blur"
CG 論文講読会 2013/2/12 "A reconstruction filter for plausible motion blur"CG 論文講読会 2013/2/12 "A reconstruction filter for plausible motion blur"
CG 論文講読会 2013/2/12 "A reconstruction filter for plausible motion blur"
 
그림자 이야기
그림자 이야기그림자 이야기
그림자 이야기
 
DD18 - SEED - Raytracing in Hybrid Real-Time Rendering
DD18 - SEED - Raytracing in Hybrid Real-Time RenderingDD18 - SEED - Raytracing in Hybrid Real-Time Rendering
DD18 - SEED - Raytracing in Hybrid Real-Time Rendering
 
Lighting you up in Battlefield 3
Lighting you up in Battlefield 3Lighting you up in Battlefield 3
Lighting you up in Battlefield 3
 
카툰 렌더링
카툰 렌더링카툰 렌더링
카툰 렌더링
 
Siezen duzen
Siezen duzenSiezen duzen
Siezen duzen
 
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
 
The Intersection of Game Engines & GPUs: Current & Future (Graphics Hardware ...
The Intersection of Game Engines & GPUs: Current & Future (Graphics Hardware ...The Intersection of Game Engines & GPUs: Current & Future (Graphics Hardware ...
The Intersection of Game Engines & GPUs: Current & Future (Graphics Hardware ...
 
Hable John Uncharted2 Hdr Lighting
Hable John Uncharted2 Hdr LightingHable John Uncharted2 Hdr Lighting
Hable John Uncharted2 Hdr Lighting
 
15_TextureAtlas
15_TextureAtlas15_TextureAtlas
15_TextureAtlas
 
Custom SRP and graphics workflows - Unite Copenhagen 2019
Custom SRP and graphics workflows - Unite Copenhagen 2019Custom SRP and graphics workflows - Unite Copenhagen 2019
Custom SRP and graphics workflows - Unite Copenhagen 2019
 
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
 
Lighting the City of Glass
Lighting the City of GlassLighting the City of Glass
Lighting the City of Glass
 

Similar to [0918 박민수] 범프 매핑

셰이더 만들기 실습
셰이더 만들기 실습셰이더 만들기 실습
셰이더 만들기 실습
Jungsoo Park
 
구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2Kyoung Seok(경석) Ko(고)
 
포인트 셰도우
포인트 셰도우포인트 셰도우
포인트 셰도우
Sukwoo Lee
 
게임 개발을 위한 렌더링 기법 한성환
게임 개발을 위한 렌더링 기법   한성환게임 개발을 위한 렌더링 기법   한성환
게임 개발을 위한 렌더링 기법 한성환Yggdrasil610
 
[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자
MoonLightMS
 
Depth buffershadow
Depth buffershadowDepth buffershadow
Depth buffershadowMoonLightMS
 
[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1MoonLightMS
 
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
Sukwoo Lee
 
실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬
현찬 양
 
안드로이드스터디 7
안드로이드스터디 7안드로이드스터디 7
안드로이드스터디 7jangpd007
 
Bump Mapping
Bump MappingBump Mapping
Bump Mapping
Sukwoo Lee
 
[0326 박민근] deferred shading
[0326 박민근] deferred shading[0326 박민근] deferred shading
[0326 박민근] deferred shadingMinGeun Park
 
Cascade Shadow Mapping
Cascade Shadow MappingCascade Shadow Mapping
Cascade Shadow Mapping
Sukwoo Lee
 
Uncharted4 part1
Uncharted4 part1Uncharted4 part1
Uncharted4 part1
Yong-jun Choi
 
2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑
Sukwoo Lee
 
노동진 Mega splatting
노동진 Mega splatting노동진 Mega splatting
노동진 Mega splattingdrandom
 
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
SangYun Yi
 
파이어몽키 3D 애플리케이션 만들기
파이어몽키 3D 애플리케이션 만들기파이어몽키 3D 애플리케이션 만들기
파이어몽키 3D 애플리케이션 만들기
Devgear
 
셰이더가 뭐에요?
셰이더가 뭐에요?셰이더가 뭐에요?
셰이더가 뭐에요?
Jungsoo Park
 
유니티 고급 과정 -3-
유니티 고급 과정 -3-유니티 고급 과정 -3-
유니티 고급 과정 -3-
Kiyoung Moon
 

Similar to [0918 박민수] 범프 매핑 (20)

셰이더 만들기 실습
셰이더 만들기 실습셰이더 만들기 실습
셰이더 만들기 실습
 
구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2
 
포인트 셰도우
포인트 셰도우포인트 셰도우
포인트 셰도우
 
게임 개발을 위한 렌더링 기법 한성환
게임 개발을 위한 렌더링 기법   한성환게임 개발을 위한 렌더링 기법   한성환
게임 개발을 위한 렌더링 기법 한성환
 
[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자
 
Depth buffershadow
Depth buffershadowDepth buffershadow
Depth buffershadow
 
[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1
 
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
 
실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬
 
안드로이드스터디 7
안드로이드스터디 7안드로이드스터디 7
안드로이드스터디 7
 
Bump Mapping
Bump MappingBump Mapping
Bump Mapping
 
[0326 박민근] deferred shading
[0326 박민근] deferred shading[0326 박민근] deferred shading
[0326 박민근] deferred shading
 
Cascade Shadow Mapping
Cascade Shadow MappingCascade Shadow Mapping
Cascade Shadow Mapping
 
Uncharted4 part1
Uncharted4 part1Uncharted4 part1
Uncharted4 part1
 
2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑
 
노동진 Mega splatting
노동진 Mega splatting노동진 Mega splatting
노동진 Mega splatting
 
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
 
파이어몽키 3D 애플리케이션 만들기
파이어몽키 3D 애플리케이션 만들기파이어몽키 3D 애플리케이션 만들기
파이어몽키 3D 애플리케이션 만들기
 
셰이더가 뭐에요?
셰이더가 뭐에요?셰이더가 뭐에요?
셰이더가 뭐에요?
 
유니티 고급 과정 -3-
유니티 고급 과정 -3-유니티 고급 과정 -3-
유니티 고급 과정 -3-
 

[0918 박민수] 범프 매핑

  • 1. 범프매핑( bump mapping ) 2010/09/18 Devrookie엠에스박( 박민수 )
  • 2. 목차 범프매핑이란? 기본 아이디어 범프매핑 종류 범프매핑 구현 소스 참고 Q & A
  • 3. 범프매핑이란? 범프매핑: 1978년도 blinn에 의해 제안된 표면에 울퉁불퉁한 굴곡이 있도록 보이는 범프 맵( 텍스쳐)를 사용한 기법이다. 특정 기술 하나를 지칭하는 것이 아니라 위와 같은 기법들을 모두 범프매핑이라 한다.
  • 4. 기본 아이디어 3D처럼 보이게 하려면 입체감이 있어야 한다. 2D화면에서 입체감은 그림이나 사진과 마찬가지로 그림자( 음영 )이 있어야 한다. 많은 버텍스를 이용해서 3D 모델을 그렸다 하더라도 음영이 없다면 그저 밋밋하게 보일 뿐이다.
  • 6. 기본 아이디어 점점 더 입체적인 그래픽을 제공해야 한다. 이를 위해서는 버텍스 많이 들어간 모델이 필요하지만 메모리 낭비와 부하가 발생한다. 입체는 결국 음영으로 결정된다. 음영만 잘 나타난다면 로우폴리곤 모델도 하이 폴리곤 모델처럼 보일 수 있다.
  • 7. 기본 아이디어 굴곡이 지는 모습을 연출 하고 싶은 모델이 있다. 이 굴곡을 표현할 수 있는 하이 폴리곤 모델을 만든다. 하이 폴리곤의 멋진 음영을 저장한다. 로우폴리곤에 저장된 음영을 적용 시킨다. 로우폴리곤으로 하이 폴리곤의 효과를 누린다.
  • 8. 기본 아이디어 음영 처리는 라이팅이 적용되었다는 의미이다. 라이팅은 법선 벡터( 노말 벡터 )와 광원 벡터를 통해 계산된다. 로우폴리곤 모델에서 하이 폴리곤 모델의 법선 벡터를 적용하려면 버텍스를대칭시키는 것으로는 계산 할 수 없다.
  • 9. 기본 아이디어 음영을 저장한다. 모델의 법선 벡터를 저장한다. 픽셀 단위로 저장해야 한다. 딱 맞는 저장 공간 -> 텍스쳐!( 법선 맵) R , G , B 값에 벡터 X , Y , Z를 저장한다. 계산 할 때는 R , G , B값을 벡터 X , Y , Z로 변환해서 계산한다.
  • 13. 기본 아이디어 로우폴리곤-> 범프매핑-> 텍스쳐 추가 -> 쉐도우 추가
  • 14. 기본 아이디어 주의할 점 앞에서도 말했듯이 픽셀 당 계산일 뿐 버텍스에는 어느 영향도 끼치지 않는다. 즉 버텍스가 많아지거나 위치가 변화하는 것은 아니다. 위에 것이 연장선으로 정상적인 굴곡의 차폐를 기대해서는 안 된다. 안 보여야 될 부분이 보이는 등 문제가 생길 수 있다.
  • 15. 범프매핑 종류 범프맵 종류 Offset Vector Bump Map Height Field Bump Map Normal Map 범프매핑 종류 Emboss Bump Mapping Dot Product Bump Mapping Environment Map Bump Mapping
  • 16. 범프매핑 종류 범프맵 종류 Offset Vector Bump Map Height Field Bump Map Normal Map 범프매핑 종류 Emboss Bump Mapping Dot Product Bump Mapping Environment Map Bump Mapping
  • 17. 범프매핑 구현 – 법선 벡터 저장 텍스쳐에법선의 방향을 저장해야 한다. 쉬운 방법으로는 모델의 기복을 높이맵으로 저장한 뒤 가공하는 것이다. 높이맵은0~255사이값을 이용해 높이만 저장시키는 텍스쳐를 말한다. ( 흰색이 높은 부분 검은색이 낮은 부분을 의미한다. )
  • 18. 범프매핑 구현 – 법선 벡터 저장
  • 19. 범프매핑 구현 – 법선 맵 구하기 높이 맵에서 법선 맵으로 변환하려면 약간의 계산이 필요하다. 기본 원리는 구하고자 하는 UV좌표의 한칸씩 옆에 있는 높이값의 평균을 이용해 두개의 벡터를 만들고 그 벡트들의 외적을 구하는 것이다. D3DXComputeNormalMap() 사용하면 된다.
  • 20. 범프매핑 구현 – 법선 맵 구하기
  • 21. 범프매핑 구현 – 법선 맵 구하기 델타 x , 델타 y는 바로 옆에 것을 사용하려면 1로 잡으면 된다. 나온 높이값에 비율을 적용시키면 그 비율 만큼 더 밝고 어두운 부분이 강해지거나 약해진다. UV중 U를 X축으로 V를 Y축으로 법선을Z축으로 저장하고 있다. 그래서 파랗구나...
  • 22. 범프매핑 구현 – 법선 맵 구하기
  • 23. 범프매핑 구현 – 법선 맵 구하기 위에 방법을 사용하면 탄젠트 공간을 기준으로 법선을 저장하였다라고 말한다. 탄젠트 벡터가 X , 종법선 벡터가 Y , 법선 벡터가 Z 왜 그냥 평범하게 노말값을 계산해서 저장하지 않고 이런 변환을 통해서 탄젠트 공간 기준의 노말값을 저장하는 것일까?
  • 24. 범프매핑 구현 – 법선 맵 구하기 탄젠트 공간 법선 맵 오브젝트 공간 법선 맵
  • 25. 범프매핑 구현 – 법선 맵 구하기 오브젝트 공간 법선 맵 생성 방법 : 그냥 모델에서 뽑으면 된다. 장점 사용하기 쉽다. ( 그냥 계산 하면 된다. ) 단점 움직이는 물체에 적용하기엔 부적절하다.( 연산이 너무 많아진다. )
  • 26. 범프매핑 구현 – 법선 맵 구하기 탄젠트 공간 법선 맵 생성 방법 : 위의 방법대로 뽑으면 된다. 장점 법선을 변환할 필요는 없다. 단점 카메라 , 버텍스등을 탄젠트 공간으로 변환해야 한다.
  • 27. 범프매핑 구현 – 법선 맵 구하기 오브젝트 공간 법선 맵을 사용한다고 가정하면 캐릭터가 애니메이션이라도 하는 날에는 법선들을 애니메이션에 맞게 변환해 주어야 하는데텍스쳐에서 뽑은 값이기도 하고 텍셀마다 처리를 하기 때문에 픽셀 쉐이더가계산량이 너무 많아진다. 탄젠트 공간 법선 맵을 쓰자.
  • 28. 범프매핑 구현 – 법선 맵 구하기 미리 법선 맵을 생성하고 사용하는 것이 더 좋다. NVDIA에서 제공하는 Photoshop 플러그인 Normal Map Plugin등 법선 맵을 만들어 주는 처리가 많다. 요즘 툴들이 좋아서 모델 만들 때 같이 뽑혀 나온다.
  • 29. 범프매핑 구현 – 법선 맵 적용 법선 맵을 적용하는 방법은 적용하고자 하는 물체의 버텍스, 카메라 , 조명등 계산에 필요한 것들을 탄젠트 공간으로 변환하고 계산하면 된다. 탄젠트 공간에 대해 다시 정리하면 T : Tangent Vector B : Binormal Vector N : Normal Vector 이 3개가 기저인 공간이다.
  • 30. 범프매핑 구현 – 법선 맵 적용
  • 31. 범프매핑 구현 – 법선 맵 적용 로컬 좌표계 에서 탄젠트 공간으로 변환 X -> U , Y -> V로 변환되어야 한다.
  • 32. 범프매핑 구현 – 법선 맵 적용 삼각형의 각 버텍스를P0 , P1 , P2로 생각하자. 그리고 각각 버텍스의UV좌표를( u0 , v0 ) , ( u1 , v1 ) , ( u2 , v2 )로 생각하자. 이 삼각형 안의 한 점을 Q로 보고 UV좌표를( u , v )로 생각하자. 탄젠트 공간으로 변환해주는 행렬은 다음과 같다. 이 행렬을 구해보자.
  • 33. 범프매핑 구현 – 법선 맵 적용
  • 34. 범프매핑 구현 – 법선 맵 적용
  • 35. 범프매핑 구현 – 법선 맵 적용 정점들의 T , B 벡터들의 평균을 이용해서 계산하면 직교하지 않을 수 있다. 안전하게 그램 – 슈미트 방법으로 직교하는 기저를 만들어 준다. D3DXComputeTangent() 사용 T′ = T − (N · T)NB′ = B − (N · B)N − (T′ · B)T′/T′2
  • 36. 범프매핑 구현 – 법선 맵 적용
  • 37. 범프매핑 구현 – 법선 맵 적용 탄젠트 공간 변환 행렬을 버텍스쉐이더에 넘겨주어서 광원 벡터 , 카메라 시선 벡터등을 변환해 준다. 픽셀 쉐이더에서는 법선 맵의RGB를 읽어드려서 조명계산을 해주면 된다.
  • 39. 참고자료 Real Time Rendering2판 DirectX 9 쉐이더 프로그래밍 http://allosha.tistory.com/category/3D%20그래픽스%20매니악스/법선맵(노말맵) http://www.gamasutra.com/view/feature/1515/messing_with_tangent_space.php?page=1 http://www.terathon.com/code/tangent.html http://en.wikipedia.org/wiki/Gram-Schmidt