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

问题描述 投票:9回答:2

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

在网格最小的立方体上实现圆形边缘。

  • 我只想使用12个三角形的极简主义网格立方体,
  • 然后通过着色器,
  • 实现每个块的边缘(/角)略微倾斜。

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

谢谢,着色大师!

unity3d shader
2个回答
1
投票

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

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

Sharp Edge Smooth Edge

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

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

根据要求添加了一个比较立方体:Cubes with Bump Mapping

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

写了一个article


3
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.