【问题标题】:Stop display through object despite transparent material?尽管有透明材料,但停止通过对象显示?
【发布时间】:2016-05-05 16:56:46
【问题描述】:

这很难描述,但我觉得应该可以做到。

基本上,这就是我所在的位置:

由于地球的材质有外部法线,它自己的材质不会显示在地球的另一边。但是,由于材料的透明性,我看到了存在于地球另一端的标记。

如何阻止内容通过材料显示?背景是天空盒,是我唯一想通过透明度显示的东西。

感谢任何帮助或建议。

【问题讨论】:

  • 你是说绿色摩天大楼吧?确实,您将能够看到远处的那些...
  • 对任何在这里搜索的人来说都是一个指针。在某些情况下,您需要TransparencySortMode.Orthographic 来解决当天的问题。

标签: unity3d camera shader renderer


【解决方案1】:

这样做有点棘手:

唯一的办法是:

关闭每个绿色摩天大楼,当它在“后面”时。

假设你的世界只是以 000 为中心。

这样的话,想想就这么简单……

如果z>0f,那么您希望绿色摩天大楼不可见。如果是z<0f,你希望它正常显示。

由于这是 Unity,您必须以类似代理的方式工作。所以实际上就是这么简单。制作脚本(伪代码)

Class HideMeIfAwayFromCamera
{
Update()
 {
 if ( z > 0f ) renderer.enabled = true;
 else renderer.enabled = false;
 }
}

这可能是您最简单和最好的解决方案。无论如何,我会先尝试。让我们听听它是如何为您工作的。

考虑到您可能希望将开/关点设置在中途平面的前方或后方,试试吧。

请注意,另一种方法是。您需要使用剪切着色器;对摩天大楼完全使用不同的层;并为任何基础超出地平线的摩天大楼使用另一层;通过这种方式,您可以让它显示任何摩天大楼的“顶部”,这些摩天大楼“就在”地平线“后面”但隐藏了底部。不过,这似乎太复杂了。我认为最好的结果就是关闭后面的,如上所示。

(还要注意它不是“物理的”。如果地球是透明的:你应该能够看到后面的摩天大楼。所以你必须尝试一些东西才能看到感觉良好。)

【讨论】:

  • 我想过这个方法,但我停下来决定先在这里问。我最担心的是他们的数量。大约有 1000 个。这样的东西在 Update 中运行会很密集吗?
  • 没有没有。感谢您重申此解决方案。我刚试了一下,效果很好。但我对着色器的另一种方法很好奇。您是否有任何关于“剪切着色器”的参考资料,我可以将其视为替代方案。
  • 无论哪种方式都标记为答案。
  • unity 自己的 doco 是公平的,你可以从那里开始 .. docs.unity3d.com/Manual/shader-TransparentCutoutFamily.html 进入着色器绝对是一件苦差事,你知道的。这是一种努力!
  • Joe,您要求让我知道它对我的效果如何。虽然在 BehaviorUpdate 的分析器中似乎肯定有一些额外的开销,但我仍然处于非常好的帧速率。这是该方法如何为我工作的小屏幕截图:i.imgur.com/PoYucsE.png 感谢您继续回答我的问题!
猜你喜欢
  • 2012-09-04
  • 1970-01-01
  • 2017-01-18
  • 2019-02-28
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
相关资源
最近更新 更多