일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- URP로 변경
- ColorGradingLutPass
- 벡터
- Three(Two) Tone Shading
- 3d
- 가상 바이트
- 게임 수학
- 개인 바이트
- Specular
- Rim Light
- ASW(Application SpaceWarp)
- OculusMotionVectorPass
- Virtual Byte
- 프로그래밍 기초
- Cell Look
- 메모리 누수
- URP
- Toon Shader
- 작업 집합
- Private Bytes
- Cell Shader
- AppSW
- working set
- Windows Build
- C언어
- Cartoon Rendering
- VR
- Today
- Total
WinCNT
Oculus Quest2 기기에서 Motion Vectors 패스의 결과를 디버그 모드를 통해 확인해보기!(feat. AppSW) 본문
Oculus Quest2 기기에서 Motion Vectors 패스의 결과를 디버그 모드를 통해 확인해보기!(feat. AppSW)
WinCNT_SSS 2023. 10. 26. 11:25서론
신 기능이라기에는 좀 시간이 지났지만, 오큘러스에는 Application SpaceWarp (줄여서 AppSW, 혹은 ASW)라는 프레임 보간 기능이 있다
이 기능을 사용하면 VR기기가 32fps를 무려 72fps로 보간해서 출력해준다!!
이 기능을 사용하기 위해서는 쉐이더에 모션 벡터 패스가 있어여 하며, MotionVectors 패스의 아웃풋이 이상하면 AppSW의 프레임 보간도 이상하게 된다
그래서 디버깅을 위해 VR 기기에서 MotionVectors 패스의 아웃풋을 간단하게 확인하는 디버그 모드를 제공하는데, 예전에 한 번 쓴 적이 있었지만 따로 정리해두지 않아서 아쉽게도 까먹었다
…가 이번에 다시 알게 되서 제대로 정리해둘까 한다
주의점
VR 기기에서 MotionVectors 패스의 아웃풋을 확인하기 위해서는 당연하지만 셰이더에 MotionVectors에 대한 패스가 있어야 한다
Shader "Basic"
{
SubShader
{
Tags
{
"RenderType"="Opaque"
"RenderPipeline"="UniversalPipeline"
}
// 일반적인 커스텀 셰이더 패스
Pass
{
Name "Universal Forward"
// 생략...
}
// 모션 벡터에 관한 패스
Pass
{
Name "MotionVectors"
Tags
{
"LightMode" = "MotionVectors"
"RenderType" = "Opaque"
}
Cull[_CullMode]
HLSLPROGRAM
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/OculusMotionVectorCore.hlsl"
#pragma vertex vert
#pragma fragment frag
ENDHLSL
}
}
}
또한 AppSW가 활성화되어 있어야만 확인이 가능하다
(AppSW가 Off가 되면 모션 벡터 디버그 모드도 비활성화된다)
using UnityEngine;
public class SpaceWarpActivator : MonoBehaviour
{
void Start()
{
OVRManager.SetSpaceWarp(true);
}
}
그리고 해당 기능은 어디까지나 AppSW를 위한 모션 벡터를 확인하기 위해서라는 것을 명심해야한다
기본적으로 이 모션 벡터는 다른 목적으로 사용되지 않고, 사용하기 위해서는 상당한 수준의 URP 마개조가 필요하다
높은 가능성으로 헬게이트가 열릴 것
AppSW에 대한 기타 자세한 가이드는 오큘러스의 공식 문서와 깃 허브를 참고하면 된다
Application SpaceWarp Developer Guide: Unity | Oculus Developers
GitHub - Oculus-VR/Unity-Graphics at 2020.3/oculus-app-spacewarp
https://github.com/oculus-samples/Unity-AppSpaceWarp
ADB의 커맨드 작성
모션 벡터의 결과를 보여주는 디버그 기능은 ADB의 커맨드로 실행할 수 있다
당연히 CMD나 PowerShell로 실행할 수도 있으나, MQDH에는 커맨드를 작성 및 저장 및 실행할 수 있으니 이번에는 이쪽을 사용하려고 한다
자세한 내용은 아래의 사이트를 참고
Create a Custom Command: Unity | Oculus Developers
아무튼 디버그 모드 사용을 위해서는 2종류의 커맨드를 작성할 필요가 있다
참고로 마지막의 1을 0으로 바꾸면 끄는 커맨드이니 이쪽도 따로 작성해두자
adb shell setprop debug.oculus.MVOverlay 1
adb shell setprop debug.oculus.spaceWarpDebug 1
실행 방법
앱을 실행하기 전에 adb shell setprop debug.oculus.spaceWarpDebug 1를 먼저 실행해야 한다
adb shell setprop debug.oculus.MVOverlay 1만 실행해도 모션 벡터는 볼 수 없다…
시행착오로 해보고 그걸 정리하고 나니 공식 문서에서 해당 항목에 대한 글을 발견했다
Application SpaceWarp Developer Guide: Unity | Oculus Developers
아무튼 공식 문서의 내용을 다시 정리해봤다
- 앱을 닫고 adb shell setprop debug.oculus.MVOverlay 1 실행
- 앱을 실행하고 모션 벡터 버퍼를 볼 타이밍에 adb shell setprop debug.oculus.spaceWarpDebug 1 실행
- 전원 버튼을 두 번 눌러 헤드셋을 슬립시켰다가 되돌림 (이렇게하면 스왑 체인이 내부적으로 재생성 됨)
- 모션 벡터 버퍼가 출력이 화면에 표시됨
- 디버깅이 완료되면 adb shell setprop debug.oculus.spaceWarpDebug 0를 실행
- 전원 버튼을 두 번 눌러 원래 상태로 되돌림
실제로 해보면 사실 이것저것 생략하거나 순서를 바꿔도 되긴 하는데 아무튼 위의 방법이 공식 문서에 적힌 방법이다
참고로 필자의 경우, adb shell setprop debug.oculus.spaceWarpDebug 1를 실행한 상태에서, 모션 벡터가 보고 싶을 때 adb shell setprop debug.oculus.MVOverlay 1를 실행하니 간단하게 실행되었다
결과
스크린샷이나 영상을 찍었으나 저장된 건 원래 화면 그대로였기에 생략하도록 하겠다
Overlay란 말 그대로 디스플레이에만 그렇게 보이는 사양인 것 같다
기본적으로 검정색이 출력되며 움직이는 오브젝트나 카메라의 이동에 따라서 축에 맞는 RGB의 색상이 출력되는 느낌이다
마무리
사실 해당 커맨드는 MQDH에 이미 저장되어 있었다
문제는 커맨드를 DBG(...)란 이름으로 저장해서 이게 무엇인지 몰랐을 뿐이다
(그리고 spaceWarpDebug란 커맨드도 필요하다는 걸 까먹어서 따로 삽질했지만)
정리하고 보니 Application Space Warp라는 기능을 적용했을 경우 한정(다른 경우에도 가능한지는 전혀 모름)이라 범용성이 좀 떨어지는 것 같지만, 그래도 이렇게 정리해두면 다음에 필요하게 되면 금방 다시 사용할 수 있을 것이라고 생각한다
참고 사이트
Application SpaceWarp Developer Guide: Unity | Oculus Developers
GitHub - Oculus-VR/Unity-Graphics at 2020.3/oculus-app-spacewarp
https://github.com/oculus-samples/Unity-AppSpaceWarp
'Unity > VR 게임 개발' 카테고리의 다른 글
Unity로 간단한 VR 씬 만들기 (0) | 2023.04.17 |
---|---|
OVR Metrics Tool로 VR기기(Meta Quest)의 성능 측정을 실시간으로 확인해보자! (0) | 2023.02.21 |
RenderDoc for Oculus 도입 (0) | 2023.02.20 |
Oculus에서의 퍼포먼스를 Unity 프로파일러에서 확인하기 (0) | 2023.02.17 |
Oculus용 빌드 만들기 (0) | 2023.02.14 |