【问题标题】:Unity - Vertex light ignored by static objects (lightmapped)Unity - 静态对象忽略的顶点光(光照贴图)
【发布时间】:2019-05-25 16:44:45
【问题描述】:

顶点光在动态对象上工作正常,但第二次我将它们设为静态并烘焙光照贴图,它们会被忽略。

我尝试在着色器中更改为不同的“光照模式”,但没有一个奏效。 Lightmode "ForwardBase" 似乎真的搞砸了,尽管我会假设它是可以使用的,因为它在https://docs.unity3d.com/Manual/SL-PassTags.html上的描述是@

任何建议将不胜感激:)

【问题讨论】:

  • 从声音上看,如果它只发生在您正在努力工作的特定着色器上,正确吗?
  • 这是一个自定义着色器,但似乎所有内置着色器也是如此(包括标准着色器)。如果您将对象设为静态并烘焙光照贴图,则只有像素灯可以工作,而且它们对我的用例来说太耗性能了。
  • 听起来您的项目中的某些设置设置错误。尝试创建一个新项目并测试是否可以在那里成功烘焙光照贴图。
  • 这也发生在新项目上。烘焙光照贴图不是问题,它们烘焙得很好。问题是使用带有光照贴图网格的顶点灯(不是像素灯)。使用顶点光照(例如,通过将光照渲染模式设置为“不重要”)适用于不使用光照贴图的动态对象。但是第二个对象设置为静态并烘焙了贴图,只有像素光会与表面交互。

标签: unity3d mapping shader vertex light


【解决方案1】:

我对手头问题的理解

据我了解,当您烘焙光照贴图时,唯一会改变烘焙对象光照的光源是像素光照。但你想让它与顶点光一起工作。

我仍然不完全确定你的意思是灯光根本不会烘焙到烘焙贴图中,还是它不会影响对象烘焙后的光照级别。

无论如何,我做了一些搜索。

可能的解决方案/解释 1

当我搜索时,我发现了这个工具和描述。

https://assetstore.unity.com/packages/vfx/shaders/vertex-lit-shader-baked-shadows-realtime-light-75977

默认情况下,使用 Unity 的内置着色器 Mobile/VertexLit 光照 只能作为烘焙或实时工作,但您不能显示 烘焙表面上的实时光照。此着色器允许烘焙表面 还可以接收实时照明。

请注意,该工具是免费的。


可能的解决方案/解释2

我也看到了这个教程:https://catlikecoding.com/unity/tutorials/rendering/part-16/

作者写的地方

使用光照贴图时,Unity 永远不会包含顶点光照。他们的 关键字是互斥的。所以我们不需要两者都有的变体 VERTEXLIGHT_ON 和 LIGHTMAP_ON 同时进行。

最后请注意,这些解决方案似乎是在早期版本的 Unity 中开发的。可能存在更合适的更新解决方案。

希望对你有所帮助。

【讨论】:

  • 首先感谢您的回复。是的,烤灯工作得很好,而且它们不应该混合在一起。问题纯粹在于应该影响静态模型的实时灯光(但不是烘焙原因)。关于“catlikecoding”的文章让我相信这将是一个问题,说明“当使用光照贴图时,Unity 将永远不会包含顶点光”,这就是我想要的。我没有注意到资产商店上的着色器,它似乎可以从我测试的内容中工作。 unity 论坛上的一位用户指出,我需要编写一个自定义光照函数。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-23
  • 2016-03-07
  • 2014-08-12
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多