2014-01-21 25 views
2

这是一个愚蠢的问题,但我是着色器编程的新手,所以请和我一起裸照。
我知道(至少在xna项目中使用.fx中的hlsl)每种技术都可以有多次通过,每次通过都会关联某个设备状态及其顶点和像素着色器功能。现在我的问题是:鉴于一个技术中的通行证是一个接一个地执行的,每个通行证是否意味着通过渲染管道的完整通道? 对于遗传,如果我有两次通过的技巧,是否正确如下语句: 第一次通过为应用程序(VertexBuffer)获取数据并通过管道,而第二次通过则是第一次通过的数据,再过一段时间,通过管道。HLSL多通道

回答

1

通常通行证是相互独立的。所有通道将使用相同的输入几何体(通常由顶点缓冲区定义)。他们对这个几何体所做的事情会有所不同

E.g.你可以通过两次传球来获得技术。第一遍以通常的方式绘制对象。第二遍不会画出物体,但是法线就像小线条一样。结果是以法线表示法线的对象。

类似地,多次遍历可以用于广泛的效果,如毛发,发光,晕...请记住,管道的结果通常是一种颜色。如果你想使用这个结果作为另一个着色器的输入,你需要重新布线(即设置新的输入对象,着色器...)。

+1

感谢您的明确回答,但现在我有一个疑问:使用两遍渲染着色器而不是仅制作两个着色器有什么区别?仅仅是为了保持事物的整齐性并赋予其效果的连接感? – Geoffrey91

+0

是的,这基本上是关键。大多数渲染对象的代码都涉及'对于技巧{apply pass,render object}中的每个传递''。这样做更具可读性,而不是每次都应用不同的着色器。而且,这个功能可以封装在一个方法中。 –