在 PS_2_0 着色器中模拟 VFACE 语义

发布于 2024-10-17 01:11:02 字数 311 浏览 7 评论 0原文

我正在对一些 HLSL 着色器进行一些工作,试图让它们在 SM2.0 中工作。我几乎成功了,但我们的一个着色器接受一个参数:

float alignment : VFACE

我从 MSDN 的理解是,这是一个自动计算的变量,以防我需要它,但 SM2.0 不支持它......那么,我如何重现这个?我不是着色器程序员,因此任何(伪)代码都会非常有帮助。我了解 VFACE 的作用,但不知道如何在像素着色器或 VS 中自行计算并将其传递到 PS 中。按像素计算听起来很昂贵,所以也许有人可以展示一个框架来在 VS 中计算它并在 PS 中使用它?

I am doing a bit of work on some of our HLSL shaders, trying to get them to work in SM2.0. I've nearly succeeded but one of our shaders accepts a parameter:

float alignment : VFACE

My understanding from MSDN is this is an automatic var calculated in case I need it, but it's not supported under SM2.0... so, how might I reproduce this? I'm not a shader programmer so any (pseudo) code would be really helpful. I understand what VFACE does, but not how I might calculate it myself in a pixel shader, or in a VS and pass it into the PS. Calculating it per-pixel sounds expensive so maybe someone can show a skeleton to calculate it in a VS and use it in a PS?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

西瑶 2024-10-24 01:11:02

你不能。因为 VFACE 表示三角形的方向(后或前),并且 VS 或 PS 阶段无法访问整个基元(如 SM4/5 GS 阶段)。

唯一的方法是分两次渲染几何体(一次使用背面剔除,另一次使用正面剔除),并将一个常量值传递给与 VFACE 含义匹配的着色器。

You can't. Because VFACE means orientation of the triangle (back or front) and the VS or PS stages have not access to the whole primitive (like in SM4/5 GS stage).

The only way is to render your geometry in two passes (one with back face culling, the other with front face culling) and pass a constant value to the shader matching VFACE meaning.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文