参考了nVIDIA SDK里水面渲染的实现,决定使用一个单独的Pass来实现水面合成模拟。把合成操作移动到pixel shader中,渲染成为一张纹理,再由vertex shader直接采样这样纹理,进行顶点置换。
最先决定把合成移动到pixel shader中是因为从高度域生成顶点法线,至少必须对周围额外两个点进行采样,才能计算差分。如果在vertex shader中实现,那么4张高度图就需要12次采样-_-#,必然会严重影响性能。而pixel shader中纹理采样的效率肯定要比顶点纹理高。
此外,渲染局部扰动(比如爆炸,船的轨迹)也比较容易,只需把扰动纹理再渲染、叠加到这张生成的高度图上就可以了。
另外,为了优化采样次数,偶把4张单通道的高度图合成为了一张4通道的高度图,这样只要3次普通的纹理采样就可以获得顶点合成以及计算法线所需的所有数据。
继续编码。。。。。^^
最先决定把合成移动到pixel shader中是因为从高度域生成顶点法线,至少必须对周围额外两个点进行采样,才能计算差分。如果在vertex shader中实现,那么4张高度图就需要12次采样-_-#,必然会严重影响性能。而pixel shader中纹理采样的效率肯定要比顶点纹理高。
此外,渲染局部扰动(比如爆炸,船的轨迹)也比较容易,只需把扰动纹理再渲染、叠加到这张生成的高度图上就可以了。
另外,为了优化采样次数,偶把4张单通道的高度图合成为了一张4通道的高度图,这样只要3次普通的纹理采样就可以获得顶点合成以及计算法线所需的所有数据。
继续编码。。。。。^^