Directx 在PS_2_0着色器中模拟VFACE语义
我正在对我们的一些HLSL着色器做一些工作,试图让它们在SM2.0中工作。我几乎成功了,但我们的一个着色器接受了一个参数:Directx 在PS_2_0着色器中模拟VFACE语义,directx,direct3d,hlsl,shader,Directx,Direct3d,Hlsl,Shader,我正在对我们的一些HLSL着色器做一些工作,试图让它们在SM2.0中工作。我几乎成功了,但我们的一个着色器接受了一个参数: float alignment : VFACE 我从MSDN的理解是,这是一个自动计算的var,以防我需要它,但SM2.0不支持它。。。那么,我该如何复制这个呢?我不是着色器程序员,所以任何(伪)代码都会非常有用。我了解VFACE的功能,但不了解我如何在像素着色器中或在VS中计算它并将其传递到PS。计算每个像素的值听起来很昂贵,因此可能有人可以在VS中显示一个骨架来计算它
float alignment : VFACE
我从MSDN的理解是,这是一个自动计算的var,以防我需要它,但SM2.0不支持它。。。那么,我该如何复制这个呢?我不是着色器程序员,所以任何(伪)代码都会非常有用。我了解VFACE的功能,但不了解我如何在像素着色器中或在VS中计算它并将其传递到PS。计算每个像素的值听起来很昂贵,因此可能有人可以在VS中显示一个骨架来计算它并在PS中使用它?你不能。因为
VFACE
表示三角形的方向(后面或前面),VS或PS级无法访问整个原语(如SM4/5 GS级)
唯一的方法是在两次过程中渲染几何体(一次使用背面消隐,另一次使用正面消隐),并将常量值传递给着色器匹配
VFACE
的意思。您不能。因为VFACE
表示三角形的方向(后面或前面),VS或PS级无法访问整个原语(如SM4/5 GS级)
唯一的方法是在两次过程中渲染几何体(一次使用背面消隐,另一次使用正面消隐),并将一个常量值传递给着色器匹配
VFACE
意思。VS不会获得三角形的面法线,并访问摄影机位置/向量吗?我不知道它如何访问这些,甚至不知道VS是否可以将值传递给PS?当然,VS可以获得给定的面法线,也可以访问视向量(如果将其传递给VS)。VS也可以将值传递给PS。但这不会给你面子。至少不是很精确,因为在某些拐角处,tri的两条法线将被检测为前向,最后一条法线将被检测为后向(或者两条法线将被检测为后向,另一条法线将被检测为前向)。这会导致非常令人不快的人工制品(我猜您使用VFACE进行双面照明)。这是由于光栅化器中的属性插值造成的。唯一正确的方法是使用我在回答中提到的两个过程。面法线对于三角形的每个顶点都是相同的,我想你的意思是说VS可以访问顶点法线,或者插值面法线?这不是用于照明,但您的工件点仍然有效。。。不过,这可能值得一试。确切地说,我的意思是VS可以访问顶点法线(存储在VB中的法线)。只有PS可以访问插值法线或VS传递给PS的任何其他基本插值属性。VS不是获得三角形的面法线,并且可以访问摄影机位置/向量吗?我不知道它如何访问这些,甚至不知道VS是否可以将值传递给PS?当然,VS可以获得给定的面法线,也可以访问视向量(如果将其传递给VS)。VS也可以将值传递给PS。但这不会给你面子。至少不是很精确,因为在某些拐角处,tri的两条法线将被检测为前向,最后一条法线将被检测为后向(或者两条法线将被检测为后向,另一条法线将被检测为前向)。这会导致非常令人不快的人工制品(我猜您使用VFACE进行双面照明)。这是由于光栅化器中的属性插值造成的。唯一正确的方法是使用我在回答中提到的两个过程。面法线对于三角形的每个顶点都是相同的,我想你的意思是说VS可以访问顶点法线,或者插值面法线?这不是用于照明,但您的工件点仍然有效。。。不过,这可能值得一试。确切地说,我的意思是VS可以访问顶点法线(存储在VB中的法线)。只有PS可以访问插值法线或VS传递给PS的任何其他基本插值属性。