一般的做周期曲线都采用sin来做,但是sin这个操作是个很费的操作,有时候需要一个近似的类似于sin的周期曲线,GPU Gems3第16章详细讲解了Crysis树木渲染的关键技术,其中就提到这个问题,这个方法被称之为Triangle Wave。Crysis将shader共享出来用的时候可以直接替换掉sin函数,赶紧记下来免得日后忘记了,Speedtree的shader里也是用这个来做树的动画的,可见的确很有优势,下次有空了再补上指令数目和具体的性能差别。
float4 SmoothCurve( float4 x ) {
return x * x *( 3.0 - 2.0 * x );
}
float4 TriangleWave( float4 x ) {
return abs( frac( x + 0.5 ) * 2.0 - 1.0 );
}
float4 SmoothTriangleWave( float4 x ) {
return SmoothCurve( TriangleWave( x ) );
}