【问题标题】:Discard vertex in Unity's vertex shader在 Unity 的顶点着色器中丢弃顶点
【发布时间】:2019-01-04 07:30:14
【问题描述】:

在我的情况下,我在 Unity 中有一个网格,我想在顶点着色器中丢弃一些顶点。 'Discard vertex' 表示顶点和与之相连的线都不会被绘制。

我偶然实现了它,但我认为这不是一种优雅或安全的方式。我的方法是将位置的y部分设置为无效数字,即1.0 / 0

这是我的部分代码:

    // count may be 0, but no crash, and the point will not be drawn, seems all good.
    sum /= count;
    pos.y = sum;
    o.pos = UnityObjectToClipPos(pos);
    return o;

这是我的结果:

绿色方框中的部分顶点和与其相连的线没有被绘制出来。

我想知道是否有任何其他优雅和安全的方式。

【问题讨论】:

    标签: unity3d shader vertex-shader


    【解决方案1】:

    您可以在称为“几何着色器”的阶段修改顶点流,在顶点着色器中,您只能修改提供给片段着色器的插值器的值

    【讨论】:

    • 我以前从没用过“几何着色器”,以后再学。我想知道在我使用无效值设置顶点位置后,默认几何着色器是否可能完全符合我的要求。
    • 除以零的问题在于未指定发生的情况。虽然保证着色器不会崩溃,但它可能会在不同的显卡上执行其他操作
    • 我昨天学会了如何写一个简单的几何着色器。我在几何着色器中丢弃了三角形,得到的结果与之前除以零相同。非常感谢。
    【解决方案2】:

    来自 opengl 规范:

    类似地,处理除以 0 等条件可能会导致 未指定的结果,但在任何情况下,这种情况都不应导致 处理中断或终止。

    你不能在顶点着色器中丢弃一个顶点,顶点仍然在这里。

    【讨论】:

    • 顶点可能实际上并没有被丢弃,但看起来像被丢弃了。如果顶点在某处有位置,那么该位置值正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    相关资源
    最近更新 更多