首页 > 解决方案 > Unity:使用两个摄像头对单个图层进行灰度化也会对天空盒进行灰度化?

问题描述

我使用此处描述的技术对选定对象进行灰度化(通过将它们放置在不同的层上):http ://blog.theknightsofunity.com/using-multiple-unity-cameras-why-this-may-be-important/

但是,我找不到一种方法来做到这一点,它也不会对我的天空盒进行灰度化。根据我所知道的,这是有道理的——在第二台摄像机渲染颜色层之前,灰度化应用于天空盒清除的第一台摄像机图像。

需要明确的是,我的设置是这样的:

相机1:

相机 2:

我尝试在这些上方和下方添加相机以尝试单独渲染天空盒,但根据我对绘制顺序的理解,这些都不起作用。

有人有什么建议吗?提前致谢!

PS - 如果它很重要(不认为它很重要),这个项目在 Unity 2019.2 中,我没有使用 LWRP/HDRP(现在不希望这样做)。

更新:响应@derHugo的回答——我试过这个,它似乎产生了所有的灰色(在回答之后第一次又一次尝试,结果相同)。据我了解,这些是 derHugo 建议的设置的屏幕截图;主凸轮是第一个(带有音频监听器),灰度凸轮是第二个: 主摄像头 灰度相机

标签: c#unity3d

解决方案


在该示例和您的情况下,天空盒是灰度的,因为您将灰度效果放在也渲染天空盒(清除标志)的同一台相机上。

既然你希望你的天空盒被灰度化..让另一个未灰度化的相机渲染天空盒!

您只需要这两个相机:

主摄像头:

  • 清除标志:天空盒
  • 剔除蒙版:GrayscaleLayer 之外的所有内容
  • 深度:0(小于 GreyscaleCamera 的深度)

灰度相机:

  • 清除标志:不清除(除此处渲染的对象之外的所有内容都应“透明”)
  • 剔除蒙版:仅 GreyscaleLayer
  • 深度:1(任何大于 MainCamera 的深度)

Depth
相机在绘制顺序中的位置。具有较大值的相机将被绘制在具有较小值的相机之上。

意味着首先将渲染 MainCamera。然后是它上面的 GreyscaleCamera。但是由于您使用Don't Clear了深度缓冲区,因此其他图层上的对象(已经渲染)可能仍会出现在灰度对象的前面。并且由于您不清除未灰度化的天空盒,因此其他相机将简单地渲染并且以后不会更改。

当然,您还可以将 Skybox 进一步分离为第三个Culling Mask没有任何内容的相机并将其设置为Depth = -1.

简而言之:只要确保您的 Skybox(Background) Camera 始终具有最小值Depth


推荐阅读