在看完了毛星云的《实时渲染提炼总结》9.6-9.7与冯乐乐的《Unity Shader入门精要》后,我对公告板技术有了大概的认识,在这里总结一下。
公告板,英文名Billboarding,是一项让着色四边形根据视角方向来旋转的技术,这样看起来似乎物体总是面向观察者。与alpha纹理和动画技术结合,可用公告板创建许多不具有平滑实体表面的现象,比如常见的烟雾,云朵,爆炸效果,能量盾等等。
让物体根据视角来旋转,这无疑就产生了旋转矩阵,而旋转矩阵需要三个正交基,这就是Billboarding的难点所在。公告板技术通常选取表面法线(n)、上方向(u)以及指向右的方向(r),因为u和n往往不是垂直的,故还需要指定一个锚点,使其固定不变,这样我们就能确定物体在空间中的位置。
如上所示,固定n,则r=n x u(叉乘),此时r和n是垂直的,对r进行归一化,再更新上方向u’=n x r,这样n,r,u两两正交,这样就确定了正交基。当然也可以固定u,计算过程类似。通常根据需求来确定是固定u还是n,当要模拟自然界的花草树木是,我们当然需要固定上方向u,使u的方向始终为(0,0,1);固定n的例子就太多了(现在好多资料都只讲固定n)英雄联盟中人物的名字和血条就是最好的例子。
公告板不能孤立存在,它们通常扎根于一个公告集,在该公告集内有相同的尺寸、材质等,这样能节省计算机的计算和渲染时间,当公告集内有大量的公告板时,这样的渲染方式就十分有必要了。因为有相同的材质和尺寸,这就意味着GPU在进行渲染时,300和3000个公告板并没有多大区别。