着色器斜切多维数据集的边缘?

时间:2014-08-03 14:18:10

标签: unity3d shader

这个问题与使用着色器有关(可能在Unity3D环境中,但是Metal或OpenGL很好),

在网格最小的立方体上实现圆角。

enter image description here

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

  • 然后通过着色器

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

事实上,这可以通过着色器 来完成吗?

谢谢,着色大师!

2 个答案:

答案 0 :(得分:3)

一般情况下,Relief Mapping可以像this图片一样修改对象轮廓。您需要准备一个在边界处降低的高度图。但是我认为使用这样的着色器可能对这种简单的效果来说太过分了,所以在你的几何体中制作它可能会更好。

答案 1 :(得分:1)

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

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

Sharp Edge Smooth Edge

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

更新(2/12/2018) 实现了通过剪切最终具有远离相机的法线背面的像素,可以平滑轮廓形状。它没有针对所有可能的场景进行测试,但对于简单的形状非常有用: Clipped edges

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

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

写了article