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