更新
主要问题是:如何将三角形的世界空间顶点位置传递给 Unity 着色器中的表面着色器。正如评论中提到的,可能可以从几何着色器中传递它们。但是我在某处读到,实现自定义几何着色器会覆盖 Unitys 逻辑以计算阴影等。我将在 Input 结构中添加三角形信息。但在我改变我的网格生成逻辑之前,我想知道这是否可行。对于这个解决方案,三角形的顶点位置对于三角形中的每个像素都必须是恒定的,并且不能被插值。
这是原始问题:
我正在为三角形网格编写表面着色器。我为每个顶点设置了一个带有纹理 ID 的自定义顶点属性。现在我希望表面着色器应用纹理,如下图所示。(注意每种颜色代表一种纹理)

在表面着色器中,我需要定义三角形的 3 个顶点及其纹理 ID。此外,我需要定位我正在绘制的像素。
表面着色器需要知道像素三角形。有了这个逻辑,我应该得到我正在寻找的阴影。我正在以编程方式创建我的网格,因此我可以将三角形顶点及其纹理 ID 添加为顶点属性并将其传递给表面着色器。
但我不确定这对于表面/顶点着色器的工作方式是否可行。顶点和像素之间是否存在关系以获取我的自定义三角形信息?有没有更好的方法来做到这一点?
我正在为我的着色器使用 Unitys ShaderLab。
