Unity3D 将 GameObject 渲染为线框
Posted
技术标签:
【中文标题】Unity3D 将 GameObject 渲染为线框【英文标题】:Unity3D render GameObject as Wireframe 【发布时间】:2021-05-07 17:59:35 【问题描述】:我是 Unity3D 的新手,对游戏对象的渲染有疑问。 我需要一个 .obj 文件中的模型,所以我只是将它导入并能够将它作为预制件放置在游戏视图中。我还添加了一个用于移动和转动这个对象的脚本。
我想做的是将对象显示为线框,以便用户识别对象结构但可以看穿它。 我发现这个示例脚本可以放在相机上
using UnityEngine;
public class Example : MonoBehaviour
// Attach this script to a camera, this will make it render in wireframe
void OnPreRender()
GL.wireframe = true;
void OnPostRender()
GL.wireframe = false;
我从这里得到了这个例子:https://docs.unity3d.com/ScriptReference/GL-wireframe.html
我的问题可以在图片中看到。 它以某种方式渲染对象两次。线框一个看起来和我想要的一模一样,但是第二个很奇怪,我不知道它为什么在那里以及如何摆脱它。如果这有助于调试,不需要的对象也会与线框一平行移动。
将对象显示为线框的最佳方式是什么? 提前谢谢!
【问题讨论】:
你有多个摄像头吗? 【参考方案1】:使用OnPostRender 不是可行的方法,因为您在相机已经渲染它们之后更改了它们。如果对象应始终显示为线框,则应将线框着色器应用于对象Material。 AFAIK untiy 没有内置线框着色器,但是有多个网站有教程或创建线框着色器的repos,如果你用谷歌搜索,你可以很容易地找到它们。
编辑:这是来自Shaders Laboratory的示例
编辑 2:我假设您使用两个相机渲染场景,并且没有线框对象(与线框对象相同的对象)是使用不使用线框的第二个相机渲染的对象。如果你真的想这样使用它,那么你应该在对象上添加一个Layer,并告诉另一个相机(在 Culling Mask 下)不要用这个图层渲染对象。
【讨论】:
正如 OP 所说,它是来自 Unity API 的示例,尽管 ^^ 并且 OP 明确打开了OnPreRender
中的线框,因此 before 东西被渲染并关闭在 OnPostRender
不再需要时
虽然这是真的,但“不需要的”对象与线框对象是同一个对象,如果 OP 的目标是仅使用 OnPreRender 显示线框对象,而 OnPostRender 不是要走的路
对我来说,它看起来像有多个相机的.. 否则没有解释为什么对象被渲染两次。并且使用不同的着色器当然是一个很好的提示,但是在这种情况下它不会完全回答这个问题,因为它只会被渲染为线框的两倍^^
@derHugo 是的,我将它作为第二次编辑添加到我的答案中,这样它应该可以根据需要使用两个摄像头,但如果不需要,我建议不要使用两个摄像头。
谢谢你们!我完全没有注意到场景中已经有另一台摄像机。多么初学者的错误。直到现在我还没有听说过着色器,但我一定会看看,这听起来不错!以上是关于Unity3D 将 GameObject 渲染为线框的主要内容,如果未能解决你的问题,请参考以下文章