Enable stereo in post credits scene (#509)

This commit is contained in:
artum 2022-06-16 19:21:26 +02:00 committed by GitHub
parent c2bfd281bf
commit fd45fe1171
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -13,10 +13,14 @@ namespace NomaiVR.EffectFixes
private Transform screenTransform; private Transform screenTransform;
private Transform cameraTransform; private Transform cameraTransform;
private Transform offsetTransform; private Transform offsetTransform;
private Camera originalCamera;
private Camera vrCamera;
private RenderTexture stereoTexture;
internal void Start() internal void Start()
{ {
cameraTransform = Instantiate(AssetLoader.PostCreditsPrefab).transform; cameraTransform = Instantiate(AssetLoader.PostCreditsPrefab).transform;
vrCamera = cameraTransform.GetComponentInChildren<Camera>();
screenTransform = cameraTransform.GetChild(0); screenTransform = cameraTransform.GetChild(0);
screenTransform.parent = null; screenTransform.parent = null;
@ -30,13 +34,19 @@ namespace NomaiVR.EffectFixes
cameraTransform.localPosition = Vector3.zero; cameraTransform.localPosition = Vector3.zero;
cameraTransform.localRotation = Quaternion.identity; cameraTransform.localRotation = Quaternion.identity;
var originalCamera = Camera.main; originalCamera = Camera.main;
originalCamera.tag = "Untagged"; originalCamera.tag = "Untagged";
originalCamera.cullingMask &= ~(1 << LayerMask.NameToLayer("UNUSED")); originalCamera.cullingMask &= ~(1 << LayerMask.NameToLayer("UNUSED"));
originalCamera.transform.position = new Vector3(1075, 505, -765); originalCamera.transform.position = new Vector3(1075, 505, -765);
originalCamera.transform.rotation = Quaternion.identity; originalCamera.transform.rotation = Quaternion.identity;
originalCamera.rect.Set(0, 0, 1, 0.5f); originalCamera.rect.Set(0, 0, 1, 0.5f);
originalCamera.targetTexture = AssetLoader.PostCreditsRenderTexture; originalCamera.targetTexture = AssetLoader.PostCreditsRenderTexture;
originalCamera.enabled = false;
stereoTexture = new RenderTexture(AssetLoader.PostCreditsRenderTexture.descriptor);
stereoTexture.Create();
Camera.onPreRender += OnCameraPreRender;
} }
internal void Update() internal void Update()
@ -49,6 +59,19 @@ namespace NomaiVR.EffectFixes
{ {
offsetTransform.localRotation *= Quaternion.Euler(0, signedCameraAngle, 0); offsetTransform.localRotation *= Quaternion.Euler(0, signedCameraAngle, 0);
} }
originalCamera.targetTexture = AssetLoader.PostCreditsRenderTexture;
originalCamera.Render();
originalCamera.transform.position += Vector3.right * 10;
originalCamera.targetTexture = stereoTexture;
originalCamera.Render();
}
void OnCameraPreRender(Camera camera)
{
if (camera != vrCamera || camera.stereoActiveEye != Camera.MonoOrStereoscopicEye.Right)
return;
Graphics.CopyTexture(stereoTexture, AssetLoader.PostCreditsRenderTexture);
} }
} }
} }