【问题标题】:Unity: Grayscaling a single layer using two cameras also grayscales skybox?Unity:使用两个摄像头对单个图层进行灰度化也会对天空盒进行灰度化?
【发布时间】:2019-09-11 14:16:08
【问题描述】:

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

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

要清楚,我的设置是这样的:

相机 1:

  • 深度 0
  • 清晰的天空盒
  • 剔除蒙版:包含我想要灰度化的对象的图层

相机 2:

  • 深度 1
  • 不清楚
  • 剔除蒙版:除了我想要灰度的图层之外的所有内容

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

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

PS - 如果它很重要(不要认为它很重要),这个项目在 Unity 2019.2 中,我没有使用 LWRP/HDRP(暂时不想使用)。

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

【问题讨论】:

  • 这个Skybox 组件是什么?为什么它还在灰度相机上?
  • Greyscale 和着色器是什么样的?也许里面有什么奇怪的东西?
  • 这是标准资产之一,但很好的问题,我会调查一下。

标签: c# unity3d


【解决方案1】:

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

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

您只需要这两个相机:

主摄像头:

  • 清除标志:Skybox
  • 剔除蒙版:GrayscaleLayer 之外的所有内容
  • 深度:0(任何小于灰度相机的深度)

灰度相机:

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

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

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

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

简而言之:只要确保您的天空盒(背景)相机始终具有最小的Depth 值。

【讨论】:

  • 非常感谢您的回复。不过,我试过了,但它不起作用——至少我尝试过的方式是这样。我用您建议的设置的一些屏幕截图更新了问题。可能是我(我以前从未这样做过!),但似乎在我的案例和我链接的文章中,更高深度的相机将其效果应用于整个图像。有什么想法吗?无论如何都赞成但尚未接受:p
  • 我确实注意到我在两台摄像机上都连接了天空盒,但移除一个或另一个似乎没有任何区别。不确定是否相关。再次感谢您!
猜你喜欢
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 2015-02-04
  • 2019-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多