【问题标题】:Unity3D, round the edges of a box, cube?Unity3D,圆一个盒子的边缘,立方体?
【发布时间】:2014-08-01 10:29:27
【问题描述】:

在立方体(如示例中的矩形对象)上圆边的常用方法是什么?

理想的结果看起来与这些图像非常相似。

(当然,您可以从字面上使用具有仔细圆角的网格,但要实现这一点需要很多 tris。)


注意,当然对于 NON-shader 方法...

添加两个小扁平盒子,然后在两侧之间简单地使新的正常状态,即 45 度:

那会被完美地画成圆形......

下面的 GDG 提供了一篇文章,其中有人断言这确实是最好的方法,如果不使用着色器方法。

我真的很想知道如何使用着色器


注意 - 关于非着色器方法的非常详细的教程

http://catlikecoding.com/unity/tutorials/rounded-cube/

【问题讨论】:

  • 这对于着色器来说并不是真正的工作(嗯,它可能是,但似乎没有必要)。不过,任何 3D 建模包都会有类似斜角修改器的东西。
  • 是的,我愿意。以一天为周期。而你要求“通常”。据我所知,这是通过简单地创建网格来完成的。我不知道您是否有特殊的理由不想这样做?
  • 不用担心。很高兴它以某种方式有所帮助。 ;)
  • Tutorial,不是你要求的 100%,但一个不错的选择。
  • @Catwood,这是一个非常详细且非常棒的教程。完全史诗!

标签: unity3d shader bump-mapping


【解决方案1】:

使用延迟着色,您可以访问 G 缓冲区来定位和圆化边缘,就像在 this paper 中所做的那样。虽然它是一种后处理技术,所以它能够在某些像素的限制内模拟圆度。

简单平均法线(1 像素宽度):

简单平均法线(2 像素宽度):

简单平均法线(3 像素宽度):

【讨论】:

  • 是的,这项技术(至少是实时方法)只有 2 年的历史,因此很难(如果不是不可能的话)为移动平台制定适用的解决方案。尽管我认为可能会找到某种简化的技术。首先,您可能会开始尝试使用 G-buffer 的着色器。实际上,我相信仅通过平均表面法线 G-Buffer 中的法线,您可能会得到与上面非常相似的图片。当然,如果你想使用法线贴图来排除错误边缘,你将需要另一个没有法线贴图的 G-buffer。
  • 老实说,这不是一门火箭科学。你只需要时间来试验。
  • 前段时间我看到一篇关于使用额外几何特征制作圆角边角的excellet文章(以及许多其他技巧)。不幸的是,我忘记了在哪里看到的。但核心思想和你一样。 Here is similar article.
【解决方案2】:

我当然会遵循面向着色器的答案,但特别是如果在给定平台上没有必要的着色器,我会使用一些“细节级别”模型(即 LoD)来完成此任务。

  • 为此对象的 GameObject 提供一个 6 面框、一个略微弯曲的框和一个近距离非常弯曲的框的网格。 (http://www.wings3d.com/ 是我常用的简单建模工具)
  • 为游戏对象提供一个行为脚本,用于检查每一帧与相机的距离。

  • 根据距离激活适当的网格,并停用其他网格,这应该在玩家可用的最高分辨率下无法检测到变化的距离上完成。

这种技术在 3D 游戏中得到了相当广泛的应用,这是一种很好的方式来表示远处的物体群,一旦相机靠近,这些物体就会变得更加详细。

【讨论】:

  • 嗨,Peter,LOD 完全内置于所有现代 3D 引擎中,并且是完全自动的。这真的与手头的问题无关。
  • 嗯...有点——Unity3d 专门允许使用专业版的 LOD 功能设置多个 LOD 网格:docs.unity3d.com/Manual/LevelOfDetail.html 我想看看我是否可以为您节省一些 tris,或者也许有人没有 Unity Pro。我很好奇是否有基于着色器的解决方案。
【解决方案3】:

我们能够为我们的游戏 WorldToBuild 完成斜角立方体。关键是您可以继续制作斜面模型,然后将顶点分组移动。

所以简而言之,我所要做的就是:

  • 创建一个斜角立方体(我使用了 Blender)。
  • 通过从中心的位置找出您要在每个方向上移动的顶点。
  • 计算出斜边,并设置确切的尺寸。

我在这里写了一篇关于它的文章。如果您只想了解流程,请滚动至文章底部:

https://www.linkedin.com/pulse/coding-resizable-beveled-cubes-unity-richard-christley

【讨论】:

  • 虽然这在理论上可以回答问题,it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。
  • 嗨@BhargavRao。确切地说,答案确实包括了答案的基本部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-21
  • 1970-01-01
  • 2017-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多