Unity HDRP下VRTK传送、穿墙 时画面淡入淡出、视觉遮挡无法正确显示问题解决
Unity HDRP的渲染方式和普通Unity有所不同,而SteamVR插件中负责VR画面淡入、淡出的脚本“SteamVR_Fade”是通过在相机渲染一帧后执行的方法OnPostRender调用GL.QUADS去执行绘制一个片,然后使用Shader控制这个片的颜色、渐变等来实现画面淡入、淡出遮当视线的功能;

然而在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

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

被折叠的 条评论
为什么被折叠?



