SlideShare a Scribd company logo
프로그래머를 위한 360VR
로드뷰, 유튜브 360도 동영상 기반 기술 습득!
Table of Contents
- 360VR 소개
- Equirectangular 뷰어 만들기
- Equirectangular 스샷 찍기 구현하기
- 기타 등등
360VR/Photo Sphere이란?
상하좌우앞뒤 원하는 방향으로 돌리면서 볼 수
있는 사진, 동영상
360VR 동영상 유튜브에서 검색하면 나옵니다
https://www.youtube.com/results?search_query
=360vr
Google street view
“Photo Sphere”앱으로 찍은 원본 jpg
위
아래
앞좌 우뒤 뒤
Equirectangular projection
이퀴렉탱귤러/등장방형도법 [等長方形圖法]
“구”를 2:1 비율 직사각형으로 펼친 것입니다
Equirectangular projection특징(1)
Equirectangular projection특징(2)
극으로 갈수록
X방향으로
점차 확대
Y방향 측척은
항상 동일
DX11과 HLSL로 구현합니다
Equirectangular 뷰어 만들기!
큐브맵으로 하늘을 그리는 픽셀 쉐이더
float4 mainPS(VsToPs inp) : SV_Target
{
float3 dir = normalize(mul(inp.screenPos, invVP).xyz);
return texCube.Sample(samplerState, dir);
}
<기본 흐름>
1. 픽셀이 보는 방향을 구하기(dir)
2. 큐브맵에서 dir로 샘플링하기
dir는 3차원 벡터!
시선 방향 3차원 벡터 구하는 법
float4 mainPS(VsToPs inp) : SV_Target
{
float3 dir = normalize(mul(inp.screenPos, invVP).xyz);
return texCube.Sample(samplerState, dir);
}
screenPos에 invVP를 곱하면 dir 완성!
카메로 방향과 화각이 반영됩니다
invVP는 View행열과 Projection행열을 곱해서
역행열을 구한 것
View는 카메라 방향!
Projection은 카메라 화각! screenPos는 x와y
각각 -1 ~ 1 범위
Equirectangular로 하늘 그리기
float4 mainPS(VsToPs inp) : SV_Target
{
float3 dir = normalize(mul(inp.pos2, invVP).xyz);
float longitude = atan2(dir.x, dir.z) * (180 / 3.14159265f);
float latitude = asin(dir.y) * (180 / 3.14159265f);
return gTexture.Sample(samplerState,
float2(longitude, latitude) / float2(360, -180) + 0.5);
}
픽셀이 보는 방향을 구하기(dir) ...는 큐브맵과 같습니다.
dir(3차원 벡터)로부터 2D텍스쳐 좌표를 구해야 합니다… <- ???
뭘 하는지 아주 직관적으로 이해하기
● 경도0, 북위0 (0, 0) 시선(0, 0, 1) 가나 공화국 남쪽 적도 지점
● 경도0, 복위45 (0, 0.5) 시선(0, 0.7071, 0.7071) 프란스 보르도
● 서경90, 복위45 (-0.5, 0.5) 시선(-0.7071, 0.7071, 0) 미국 위스콘신주(오대호)...
https://commons.wikimedia.org/wiki/File:Equirectangular-projection.jpg
Wikipedia에 있는 세계지도로 텍스쳐를 만들면 디버깅까지 직관적!!
위도/경도 구하기
float4 mainPS(VsToPs inp) : SV_Target
{
float3 dir = normalize(mul(inp.pos2, invVP).xyz);
float longitude = atan2(dir.x, dir.z) * (180 / 3.14159265f);
float latitude = asin(dir.y) * (180 / 3.14159265f);
return gTexture.Sample(samplerState,
float2(longitude, latitude) / float2(360, -180) + 0.5);
}
longitude는 경도이며, 카메라 좌우 회전!
latitude는 위도이며, 카메라 상하 회전!
삼각함수를 쓰면 됩니다
텍스쳐 좌표계로 변환
float4 mainPS(VsToPs inp) : SV_Target
{
float3 dir = normalize(mul(inp.pos2, invVP).xyz);
float longitude = atan2(dir.x, dir.z) * (180 / 3.14159265f);
float latitude = asin(dir.y) * (180 / 3.14159265f);
return gTexture.Sample(samplerState,
float2(longitude, latitude) / float2(360, -180) + 0.5);
}
경도는 -180~180
위도는 -90~90
텍스쳐 좌표는 0~1
Equirectangular로 스샷 찍기 구현
하기
Equirectangular로 스샷 찍기
이것 엔진으로 지원하면 바로 360VR동영상을
찍을 수 있게 된다!
1패스로는 불가능(직선을 곡선으로 왜곡시킬수
없어서)
1. 큐브맵으로 렌더링하기
2. 시선 벤터를 역으로 구해서 큐브맵 샘플링
1.큐브맵으로 렌더링하기
“Dynamic Cube Map”로 검색하면 나옵니다
화각 90도, aspect ratio=1.0로 상하좌우앞뒤 6방향 촬영
cube map를 Equirectangular로 변환
float4 mainPS(VsToPs inp) : SV_Target
{
float3 dir;
float lonR = inp.screenPos.x * 3.14159265f;
float latR = inp.screenPos.y * 3.14159265f / 2;
dir.x = cos(latR) * sin(lonR);
dir.z = cos(latR) * cos(lonR);
dir.y = sin(latR);
return texCube.Sample(samplerState, dir);
}
경도/위도를 라디안으로 표현(lonR/latR)
http://stackoverflow.com/questions/11504584/cubic-to-equirectangular-
projection-algorithm 보고 만들었습니다.
기타 등등
Stereographic Projection
Little Planet / Tiny Planet이란 이름으로 알려진 투영법
360도 사진을 소스로 그립니다
float4 mainPS(VsToPs inp) : SV_Target
{
float2 scale = float2(4.0f / 3.0f, 1) * 3; // scale & aspect ratio
float2 plane = inp.screenPos.xy * scale;
float3 dir = float3(plane.x * 2, plane.y * 2, -1 + dot(plane, plane))
/ (1 + dot(plane, plane));
return texCube.Sample(samplerState, dir.xzy); // y is upper;
swap y & z
}
https://en.wikipedia.org/wiki/Stereographic_projection
Sphere map
이것 역시 360도 사진의 일종
image stitching
● 카메라간 경계를 완벽하게 제거할 수 없다(실
제 세계, CG이면 가능)
● 방향마다 밝기가 다르다
최대한 경계를 없애기 위해 노력해 보는 방식
“image stitching”
http://www.cs.bath.ac.uk/brown/autostitch/autos
titch.html
Meta data에 대해서
유튜브에 올릴 때 “360 Video Metadata”가 들어 있어야 “360도 동영상”으로 인
식됩니다.
https://support.google.com/youtube/answer/6178631?hl=ko
사진(jpg)에 “Photo Sphere XMP Metadata”가 있어야 구글 서비스에서
“Photo Sphere”로 인식됩니다.
https://developers.google.com/photo-sphere/metadata/
총정리
360VR는 지금 유행중, 지금 해 봅시다!
Equirectangular는 앞으로도 많이 쓰일 기술
재미있게 놀아 봅시다:)

More Related Content

What's hot

[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
MinGeun Park
 
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
Takahito Tejima
 

What's hot (20)

【Unity道場スペシャル 2017博多】クォータニオン完全マスター
【Unity道場スペシャル 2017博多】クォータニオン完全マスター【Unity道場スペシャル 2017博多】クォータニオン完全マスター
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
 
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
 
Physically Based and Unified Volumetric Rendering in Frostbite
Physically Based and Unified Volumetric Rendering in FrostbitePhysically Based and Unified Volumetric Rendering in Frostbite
Physically Based and Unified Volumetric Rendering in Frostbite
 
CG 論文講読会 2013/5/20 "Clustered deferred and forward shading"
CG 論文講読会 2013/5/20 "Clustered deferred and forward shading"CG 論文講読会 2013/5/20 "Clustered deferred and forward shading"
CG 論文講読会 2013/5/20 "Clustered deferred and forward shading"
 
TensorFlow XLAは、 中で何をやっているのか?
TensorFlow XLAは、 中で何をやっているのか?TensorFlow XLAは、 中で何をやっているのか?
TensorFlow XLAは、 中で何をやっているのか?
 
Graph Neural Networks
Graph Neural NetworksGraph Neural Networks
Graph Neural Networks
 
Light Pre-Pass
Light Pre-PassLight Pre-Pass
Light Pre-Pass
 
The Rendering Technology of Killzone 2
The Rendering Technology of Killzone 2The Rendering Technology of Killzone 2
The Rendering Technology of Killzone 2
 
【DL輪読会】Toward Fast and Stabilized GAN Training for Highfidelity Few-shot Imag...
【DL輪読会】Toward Fast and Stabilized GAN Training for Highfidelity Few-shot Imag...【DL輪読会】Toward Fast and Stabilized GAN Training for Highfidelity Few-shot Imag...
【DL輪読会】Toward Fast and Stabilized GAN Training for Highfidelity Few-shot Imag...
 
Paris Master Class 2011 - 07 Dynamic Global Illumination
Paris Master Class 2011 - 07 Dynamic Global IlluminationParis Master Class 2011 - 07 Dynamic Global Illumination
Paris Master Class 2011 - 07 Dynamic Global Illumination
 
Display color와 Digital texture format의 이해
Display color와 Digital texture format의 이해Display color와 Digital texture format의 이해
Display color와 Digital texture format의 이해
 
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
【CEDEC2018】Scriptable Render Pipelineを使ってみよう【CEDEC2018】Scriptable Render Pipelineを使ってみよう
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
 
PR-302: NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
PR-302: NeRF: Representing Scenes as Neural Radiance Fields for View SynthesisPR-302: NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
PR-302: NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
 
双方向パストレーシングレンダラedubpt解説
双方向パストレーシングレンダラedubpt解説双方向パストレーシングレンダラedubpt解説
双方向パストレーシングレンダラedubpt解説
 
実践QBVH
実践QBVH実践QBVH
実践QBVH
 
道路網における経路探索のための前処理データ構造
道路網における経路探索のための前処理データ構造道路網における経路探索のための前処理データ構造
道路網における経路探索のための前処理データ構造
 
【チュートリアル】コンピュータビジョンによる動画認識
【チュートリアル】コンピュータビジョンによる動画認識【チュートリアル】コンピュータビジョンによる動画認識
【チュートリアル】コンピュータビジョンによる動画認識
 
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개머신 러닝 입문 #1-머신러닝 소개와 kNN 소개
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개
 
【論文紹介】PGQ: Combining Policy Gradient And Q-learning
【論文紹介】PGQ: Combining Policy Gradient And Q-learning【論文紹介】PGQ: Combining Policy Gradient And Q-learning
【論文紹介】PGQ: Combining Policy Gradient And Q-learning
 
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
 

Viewers also liked

가상현실(Vr)과 증강현실(ar)
가상현실(Vr)과 증강현실(ar)가상현실(Vr)과 증강현실(ar)
가상현실(Vr)과 증강현실(ar)
Heesung Youn
 
Linux Performan tuning Part I
Linux Performan tuning Part ILinux Performan tuning Part I
Linux Performan tuning Part I
sprdd
 
비트코인 네트워크 기술 소개 - 임석의, 윤석주
비트코인 네트워크 기술 소개 - 임석의, 윤석주비트코인 네트워크 기술 소개 - 임석의, 윤석주
비트코인 네트워크 기술 소개 - 임석의, 윤석주
석의 임
 
[KOTRA]에이팀벤처스 기업 홍보문서
[KOTRA]에이팀벤처스 기업 홍보문서[KOTRA]에이팀벤처스 기업 홍보문서
[KOTRA]에이팀벤처스 기업 홍보문서
startupkorea
 

Viewers also liked (20)

20103187 김명균 가상현실
20103187 김명균 가상현실20103187 김명균 가상현실
20103187 김명균 가상현실
 
가상현실(Vr)과 증강현실(ar)
가상현실(Vr)과 증강현실(ar)가상현실(Vr)과 증강현실(ar)
가상현실(Vr)과 증강현실(ar)
 
[Creative report 1] 2016 VR Report
[Creative report 1] 2016 VR Report[Creative report 1] 2016 VR Report
[Creative report 1] 2016 VR Report
 
증강현실 (Augmented Reality) 소개
증강현실 (Augmented Reality) 소개증강현실 (Augmented Reality) 소개
증강현실 (Augmented Reality) 소개
 
증강현실 기술 및 활용 트렌드(2013년)
증강현실 기술 및 활용 트렌드(2013년)증강현실 기술 및 활용 트렌드(2013년)
증강현실 기술 및 활용 트렌드(2013년)
 
[IGC2015] 스마일게이트 김용하-VR? AR? 차세대 게임의 기반 기술
[IGC2015] 스마일게이트 김용하-VR? AR? 차세대 게임의 기반 기술[IGC2015] 스마일게이트 김용하-VR? AR? 차세대 게임의 기반 기술
[IGC2015] 스마일게이트 김용하-VR? AR? 차세대 게임의 기반 기술
 
증강현실트렌드
증강현실트렌드증강현실트렌드
증강현실트렌드
 
중국 VR 보고서 - 2016
중국 VR 보고서 - 2016중국 VR 보고서 - 2016
중국 VR 보고서 - 2016
 
제품소개 Wise olap
제품소개 Wise olap제품소개 Wise olap
제품소개 Wise olap
 
E vr 홈페이지 솔루션
E vr 홈페이지 솔루션E vr 홈페이지 솔루션
E vr 홈페이지 솔루션
 
가상현실
가상현실가상현실
가상현실
 
회사소개 가인정보기술
회사소개 가인정보기술회사소개 가인정보기술
회사소개 가인정보기술
 
제품소개 Wise meta
제품소개 Wise meta제품소개 Wise meta
제품소개 Wise meta
 
Linux Performan tuning Part I
Linux Performan tuning Part ILinux Performan tuning Part I
Linux Performan tuning Part I
 
비트코인 네트워크 기술 소개 - 임석의, 윤석주
비트코인 네트워크 기술 소개 - 임석의, 윤석주비트코인 네트워크 기술 소개 - 임석의, 윤석주
비트코인 네트워크 기술 소개 - 임석의, 윤석주
 
[KOTRA]에이팀벤처스 기업 홍보문서
[KOTRA]에이팀벤처스 기업 홍보문서[KOTRA]에이팀벤처스 기업 홍보문서
[KOTRA]에이팀벤처스 기업 홍보문서
 
가상현실
가상현실가상현실
가상현실
 
가상현실(VR)이 만들어 낼 미래 유망 분야
가상현실(VR)이 만들어 낼 미래 유망 분야가상현실(VR)이 만들어 낼 미래 유망 분야
가상현실(VR)이 만들어 낼 미래 유망 분야
 
[Ogilvy Health] 한국헬스커뮤니케이션학회 발표자료 20090619
[Ogilvy Health] 한국헬스커뮤니케이션학회 발표자료 20090619[Ogilvy Health] 한국헬스커뮤니케이션학회 발표자료 20090619
[Ogilvy Health] 한국헬스커뮤니케이션학회 발표자료 20090619
 
동영상 광고플랫폼 다윈 소개서
동영상 광고플랫폼 다윈 소개서동영상 광고플랫폼 다윈 소개서
동영상 광고플랫폼 다윈 소개서
 

Similar to 프로그래머를 위한 360VR

[Gpg2권 박민근] 2.5 평행 수송 프레임
[Gpg2권 박민근] 2.5 평행 수송 프레임[Gpg2권 박민근] 2.5 평행 수송 프레임
[Gpg2권 박민근] 2.5 평행 수송 프레임
MinGeun Park
 
[NDC14] 라이브중인 2D게임에 시스템 변경 없이 본 애니메이션 도입하기[던전앤파이터]
[NDC14] 라이브중인 2D게임에 시스템 변경 없이 본 애니메이션 도입하기[던전앤파이터][NDC14] 라이브중인 2D게임에 시스템 변경 없이 본 애니메이션 도입하기[던전앤파이터]
[NDC14] 라이브중인 2D게임에 시스템 변경 없이 본 애니메이션 도입하기[던전앤파이터]
SeungWon Lee
 
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
devCAT Studio, NEXON
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
devCAT Studio, NEXON
 
Assign03 20065199손상진
Assign03 20065199손상진Assign03 20065199손상진
Assign03 20065199손상진
상진 손
 

Similar to 프로그래머를 위한 360VR (6)

[Gpg2권 박민근] 2.5 평행 수송 프레임
[Gpg2권 박민근] 2.5 평행 수송 프레임[Gpg2권 박민근] 2.5 평행 수송 프레임
[Gpg2권 박민근] 2.5 평행 수송 프레임
 
[NDC14] 라이브중인 2D게임에 시스템 변경 없이 본 애니메이션 도입하기[던전앤파이터]
[NDC14] 라이브중인 2D게임에 시스템 변경 없이 본 애니메이션 도입하기[던전앤파이터][NDC14] 라이브중인 2D게임에 시스템 변경 없이 본 애니메이션 도입하기[던전앤파이터]
[NDC14] 라이브중인 2D게임에 시스템 변경 없이 본 애니메이션 도입하기[던전앤파이터]
 
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
 
Assign03 20065199손상진
Assign03 20065199손상진Assign03 20065199손상진
Assign03 20065199손상진
 
Screen space reflection
Screen space reflectionScreen space reflection
Screen space reflection
 

Recently uploaded

INU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrintINU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrint
ahghwo99
 

Recently uploaded (6)

인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
 
INU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrintINU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrint
 
(독서광) 대격변 AI 시대, 데이터로 사고하고 데이터로 리드하라
(독서광) 대격변 AI 시대,   데이터로 사고하고   데이터로 리드하라(독서광) 대격변 AI 시대,   데이터로 사고하고   데이터로 리드하라
(독서광) 대격변 AI 시대, 데이터로 사고하고 데이터로 리드하라
 
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
 
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
 
JSI LAB의 X-Chat for SOC 보안관제센터 시큐리티 코파일럿 제품과 사례 소개
JSI LAB의 X-Chat for SOC 보안관제센터 시큐리티 코파일럿 제품과 사례 소개JSI LAB의 X-Chat for SOC 보안관제센터 시큐리티 코파일럿 제품과 사례 소개
JSI LAB의 X-Chat for SOC 보안관제센터 시큐리티 코파일럿 제품과 사례 소개
 

프로그래머를 위한 360VR

  • 1. 프로그래머를 위한 360VR 로드뷰, 유튜브 360도 동영상 기반 기술 습득!
  • 2. Table of Contents - 360VR 소개 - Equirectangular 뷰어 만들기 - Equirectangular 스샷 찍기 구현하기 - 기타 등등
  • 3. 360VR/Photo Sphere이란? 상하좌우앞뒤 원하는 방향으로 돌리면서 볼 수 있는 사진, 동영상 360VR 동영상 유튜브에서 검색하면 나옵니다 https://www.youtube.com/results?search_query =360vr
  • 11. 큐브맵으로 하늘을 그리는 픽셀 쉐이더 float4 mainPS(VsToPs inp) : SV_Target { float3 dir = normalize(mul(inp.screenPos, invVP).xyz); return texCube.Sample(samplerState, dir); } <기본 흐름> 1. 픽셀이 보는 방향을 구하기(dir) 2. 큐브맵에서 dir로 샘플링하기 dir는 3차원 벡터!
  • 12. 시선 방향 3차원 벡터 구하는 법 float4 mainPS(VsToPs inp) : SV_Target { float3 dir = normalize(mul(inp.screenPos, invVP).xyz); return texCube.Sample(samplerState, dir); } screenPos에 invVP를 곱하면 dir 완성! 카메로 방향과 화각이 반영됩니다 invVP는 View행열과 Projection행열을 곱해서 역행열을 구한 것 View는 카메라 방향! Projection은 카메라 화각! screenPos는 x와y 각각 -1 ~ 1 범위
  • 13. Equirectangular로 하늘 그리기 float4 mainPS(VsToPs inp) : SV_Target { float3 dir = normalize(mul(inp.pos2, invVP).xyz); float longitude = atan2(dir.x, dir.z) * (180 / 3.14159265f); float latitude = asin(dir.y) * (180 / 3.14159265f); return gTexture.Sample(samplerState, float2(longitude, latitude) / float2(360, -180) + 0.5); } 픽셀이 보는 방향을 구하기(dir) ...는 큐브맵과 같습니다. dir(3차원 벡터)로부터 2D텍스쳐 좌표를 구해야 합니다… <- ???
  • 14. 뭘 하는지 아주 직관적으로 이해하기 ● 경도0, 북위0 (0, 0) 시선(0, 0, 1) 가나 공화국 남쪽 적도 지점 ● 경도0, 복위45 (0, 0.5) 시선(0, 0.7071, 0.7071) 프란스 보르도 ● 서경90, 복위45 (-0.5, 0.5) 시선(-0.7071, 0.7071, 0) 미국 위스콘신주(오대호)... https://commons.wikimedia.org/wiki/File:Equirectangular-projection.jpg Wikipedia에 있는 세계지도로 텍스쳐를 만들면 디버깅까지 직관적!!
  • 15. 위도/경도 구하기 float4 mainPS(VsToPs inp) : SV_Target { float3 dir = normalize(mul(inp.pos2, invVP).xyz); float longitude = atan2(dir.x, dir.z) * (180 / 3.14159265f); float latitude = asin(dir.y) * (180 / 3.14159265f); return gTexture.Sample(samplerState, float2(longitude, latitude) / float2(360, -180) + 0.5); } longitude는 경도이며, 카메라 좌우 회전! latitude는 위도이며, 카메라 상하 회전! 삼각함수를 쓰면 됩니다
  • 16. 텍스쳐 좌표계로 변환 float4 mainPS(VsToPs inp) : SV_Target { float3 dir = normalize(mul(inp.pos2, invVP).xyz); float longitude = atan2(dir.x, dir.z) * (180 / 3.14159265f); float latitude = asin(dir.y) * (180 / 3.14159265f); return gTexture.Sample(samplerState, float2(longitude, latitude) / float2(360, -180) + 0.5); } 경도는 -180~180 위도는 -90~90 텍스쳐 좌표는 0~1
  • 18. Equirectangular로 스샷 찍기 이것 엔진으로 지원하면 바로 360VR동영상을 찍을 수 있게 된다! 1패스로는 불가능(직선을 곡선으로 왜곡시킬수 없어서) 1. 큐브맵으로 렌더링하기 2. 시선 벤터를 역으로 구해서 큐브맵 샘플링
  • 19. 1.큐브맵으로 렌더링하기 “Dynamic Cube Map”로 검색하면 나옵니다 화각 90도, aspect ratio=1.0로 상하좌우앞뒤 6방향 촬영
  • 20. cube map를 Equirectangular로 변환 float4 mainPS(VsToPs inp) : SV_Target { float3 dir; float lonR = inp.screenPos.x * 3.14159265f; float latR = inp.screenPos.y * 3.14159265f / 2; dir.x = cos(latR) * sin(lonR); dir.z = cos(latR) * cos(lonR); dir.y = sin(latR); return texCube.Sample(samplerState, dir); } 경도/위도를 라디안으로 표현(lonR/latR) http://stackoverflow.com/questions/11504584/cubic-to-equirectangular- projection-algorithm 보고 만들었습니다.
  • 22. Stereographic Projection Little Planet / Tiny Planet이란 이름으로 알려진 투영법 360도 사진을 소스로 그립니다 float4 mainPS(VsToPs inp) : SV_Target { float2 scale = float2(4.0f / 3.0f, 1) * 3; // scale & aspect ratio float2 plane = inp.screenPos.xy * scale; float3 dir = float3(plane.x * 2, plane.y * 2, -1 + dot(plane, plane)) / (1 + dot(plane, plane)); return texCube.Sample(samplerState, dir.xzy); // y is upper; swap y & z } https://en.wikipedia.org/wiki/Stereographic_projection
  • 23. Sphere map 이것 역시 360도 사진의 일종
  • 24. image stitching ● 카메라간 경계를 완벽하게 제거할 수 없다(실 제 세계, CG이면 가능) ● 방향마다 밝기가 다르다 최대한 경계를 없애기 위해 노력해 보는 방식 “image stitching” http://www.cs.bath.ac.uk/brown/autostitch/autos titch.html
  • 25. Meta data에 대해서 유튜브에 올릴 때 “360 Video Metadata”가 들어 있어야 “360도 동영상”으로 인 식됩니다. https://support.google.com/youtube/answer/6178631?hl=ko 사진(jpg)에 “Photo Sphere XMP Metadata”가 있어야 구글 서비스에서 “Photo Sphere”로 인식됩니다. https://developers.google.com/photo-sphere/metadata/
  • 26. 총정리 360VR는 지금 유행중, 지금 해 봅시다! Equirectangular는 앞으로도 많이 쓰일 기술 재미있게 놀아 봅시다:)

Editor's Notes

  1. 투영법의 이름 세계지도 사용
  2. Grid크기
  3. 버텍스 쉐이더는 아무것도 안 함(전체 화면 그리는 사각형만 만들 뿐) 큐브맵 역시 “구”를 표현하기 위한 것입니다
  4. ??? 어떻게 설명해야 될지 => 다음 페이지로
  5. coordX는 atan2(dir.x, dir.z) coordY는 asin(dir.y)
  6. 설명이 어려워서, 다음 페이지로
  7. 설명이 어려워서, 다음 페이지로
  8. 또 하나의 유행, 재미 있어서 소개
  9. HDR니까 방향마다 밝기가 다르다 한 프레임에 6번 렌더링할 수 있게 고쳐야 크라이 엔진으로 하면 알 수 없는 현상들이?