【问题标题】:Shader to bevel the edges of a cube?着色器斜切立方体的边缘?
【发布时间】:2014-08-03 14:18:09
【问题描述】:

这个问题与使用着色器(可能在 Unity3D 环境中,但 Metal 或 OpenGL 很好)有关,以在网格最小的立方体上实现圆边。

  • 我希望只使用 12 个三角形的极简网格立方体,

  • 然后通过着色器,

  • 使每个块的边缘(/角)略微倾斜。

事实上,这可以使用着色器完成吗?

【问题讨论】:

标签: unity3d shader


【解决方案1】:

我最近完成了这样的着色器的创建。它可以工作的唯一方法是为每个顶点提供 4 个法向量,而不是一个(平滑、锐利,给定顶点的三角形的每个边一个)。您还需要一个 float3 来检测边缘。

为了在网格中添加此类数据,我制作了一个自定义网格编辑器,它附带了 Unity Asset Store 中的 Playtime Painter Asset。将在下次更新时发布着色器。也将发布到公共 GitHub。

您可以看到一些暗线,这是因为它开始内插到远离光源的法线向量,但由于没有额外的三角形,结果在面向相机的三角形上可见。

更新(2018 年 2 月 12 日) 意识到通过裁剪最终具有远离相机的法线的像素,可以平滑轮廓形状。它没有针对所有可能的场景进行测试,但适用于简单的形状:

根据请求添加了一个比较多维数据集:

目前,Playtime Painter 具有该着色器的简化版本,它在 2 个法线向量之间进行插值,并在某些边缘上给出良好的结果。

写了article

【讨论】:

  • 添加了立方体截图。
  • 没错,我是新手。很久以前用过。另外,不知道赏金是什么)
  • 哎呀,太好了)
  • @Fattie 添加了凹凸贴图并添加了您使用 2 个立方体请求的图像。
【解决方案2】:

一般来说Relief Mapping 能够像this 图片上那样修改对象轮廓。您需要准备一个在边界处降低的高度图,仅此而已。但是我认为对于这样一个简单的效果来说,使用这样的着色器可能有点过头了,所以最好只在你的几何体中制作它。

【讨论】:

  • 嗨 Kolenda,我很欣赏它可以使用凹凸贴图来完成。 (在 unity3d 上,docs.unity3d.com/Manual/HOWTO-bumpmap.html)我更好奇这是否可以通过着色器完成。干杯
  • 请注意,Bumpmapping 不会改变物体的形状,只会改变光的强度,所以你不能用这种方式使边缘真正变圆。
  • 你好,科伦达。非常正确,确实你帮助我意识到 Unity 上有一些浮雕着色器(例如 assetstore.unity3d.com/en/#!/content/5705)(但是,我不确定是否有任何可以在移动设备上运行,但我会检查一下.) 我想你是对的 Kolenda,我想我的问题的答案是“某种救济着色器”。好一个。
  • 很高兴能帮上忙。
猜你喜欢
  • 2022-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-13
相关资源
最近更新 更多