首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复针对UI画布的激光渲染

如何修复针对UI画布的激光渲染
EN

Stack Overflow用户
提问于 2020-11-25 16:59:02
回答 1查看 502关注 0票数 1

在世界空间渲染模式下在画布中添加了一些UI元素。对于激光指针而言,UI元素的遮挡是一个问题。这里的指针是由行渲染器生成的。下面是一些已经尝试过的东西,但是指针仍然没有正确地封闭画布。

  • 更改层次结构
  • 改变z阶
  • 更改排序顺序

源代码来自统一,是可用的这里。没有需要修改的相关脚本。似乎一个设置或着色器更改可能只需要在这里。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-25 17:24:54

可以编写一个定制的着色器来测试深度,但是这将是一个非常昂贵的着色器--看起来你想在VR上使用它,我建议不要这样使用它。

过度设计的解决方案,仍然不是很便宜,但更便宜的解决方案是将UI渲染到相机上,渲染到RenderTarget中,并将输入传递给UI。

  1. 创建一个带有Redner目标输出的摄像机
  2. 创建使用屏幕空间相机的画布
  3. 把照相机贴在帆布上
  4. 把平面放进世界空间,用RenderTarget作为材料
  5. 添加允许将RayCasts通过RenderTarget传递到UI的脚本。可能孤子

很少有人注意到:

  • 相机需要禁用尽可能长的时间,以保存性能,只有通过Camera.Render()更新UI更新。
  • 这个解决方案仍然很昂贵。
  • 给一个简单的问题增加了很多复杂性。
  • 添加了围绕网格“包装”UI的可能性。

编辑:编辑后的问题要简单得多!

UI是在RenderQueue = 3000上呈现的,您可能有未点亮的材料作为行渲染器,其中有RenderQueue = 2450

您需要为您的行渲染器创建一个带有RenderQueue >= 3000的材料。

如果您不想创建新材料,可以从代码中更改它。

代码语言:javascript
复制
// use this with caution! As this can affect other materials when run in editor!
meshRenderer.material.renderQueue = 3100;

编辑2:如果您安装了URP,您可能需要将默认材料更改为URP。默认材料使用遗留着色器,这会引起线渲染和用户界面问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65009391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档