Unity HDRP下VRTK传送、穿墙 时画面淡入淡出、视觉遮挡无法正确显示问题解决

本文档介绍了在Unity High Definition Render Pipeline (HDRP) 下,如何解决使用VRTK进行VR传送时,画面淡入淡出和视觉遮挡效果无法正确显示的问题。关键在于将SteamVR_Fade脚本中的OnPostRender方法改为在 UnityEngine.Rendering.RenderPipelineManager.endFrameRendering 回调中执行,以确保在HDRP环境中正确渲染。同时,还需要调用OpenVR的Compositor.FadeToColor方法处理VR头盔内的画面淡入淡出。代码示例详细展示了修改后的实现方式。

Unity HDRP下VRTK传送、穿墙 时画面淡入淡出、视觉遮挡无法正确显示问题解决

Unity HDRP的渲染方式和普通Unity有所不同,而SteamVR插件中负责VR画面淡入、淡出的脚本“SteamVR_Fade”是通过在相机渲染一帧后执行的方法OnPostRender调用GL.QUADS去执行绘制一个片,然后使用Shader控制这个片的颜色、渐变等来实现画面淡入、淡出遮当视线的功能;
SteamVR控制画面淡入、淡出的脚本
然而在HDRP中在OnPostRender下的GL绘制不会正常显示,要把“SteamVR_Fade”脚本原来普通方式放在 OnRenderObject 方法中调用GL来绘制的部分放到
UnityEngine.Rendering.RenderPipelineManager.endFrameRendering 这个方法回调中。


	protected void OnCameraRender(ScriptableRenderContext context, Camera[] cameraList)
	{
   
   
		foreach (var camera in cameraList)
		{
   
   
			
				DrawLines();
		}
	}

	void DrawLines()
	{
   
   
		
		if (currentColor != targetColor)
		{
   
   
			
			if (Mathf.Abs(currentColor.a - targetColor.a) < Mathf.Abs(deltaColor.a) * Time.deltaTime)
			{
   
   
				currentColor = targetColor;
				deltaColor = new Color(0, 0, 0, 0);
			}
			else
			{
   
   
				currentColor += deltaColor * Time.deltaTime;
			}

			if (fadeOverlay)
			{
   
   
				var overlay = SteamVR_Overlay.instance;
				if (overlay != null)
				{
   
   
					overlay.alpha = 1.0f - currentColor.a;
				}
			}
		}

		if (currentColor.a > 0 && fadeMaterial)
		{
   
   
			
			fadeMaterial.SetColor(fadeMaterialColorID, currentColor);
			fadeMaterial.SetPass(0);
			GL.Begin(GL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值