ジオメトリシェーダのアクセラレーション的活用(3)~ファーシェーダを加速する/その2~シェル法のファーシェーダ

フィン法で生成されたファーは、毛ヒレを側面に近い方向から見た場合はフサフサとした感じが得られるのだが、毛先が視線方向に近い場合、すなわち毛ヒレを直下で見下ろすような方向関係で見たときには毛のボリューム感に乏しくなるという弱点がある。

もう一つのファーシェーダは、フィン法のファーシェーダの弱点を補間・克服するような特長を持つ技法だ。

フィン法では毛を縦方向に切った断面図を用意したが、もう一つの方法では、生えている毛を横方向に輪切りにしたような断面図を用意し、これを紙を積み重ねるような感じで一定間隔を開け、重ねて描いていく。輪切りにした断面図を重ねて元に戻すようなイメージになり、これが丁度外皮(Shell)を形成するように積層させる感じであることから、このアプローチのファーシェーダは「シェル」(Shell)法と呼ばれる。断面テキスチャから立体的なモノを再構成するレンダリング技法にはボリュームレンダリングというものがあるが、イメージ的にはこれに近いともいえる。なお、断面図画像テクスチャに透明要素を加味して半透明とすることで毛の透き通った感触を出すこともできる。

シェル法の概念

シェル法は断面図を適当な間隔で積層させるが、この間隔を密に多量の断面図を積層させることが毛の品質に関わってくることになる。積層させる枚数が少なければスカスカに見えるし、積層させる枚数が多くては高負荷になる。あまり視線が対象物に近寄らないものであれば、最近の3Dゲームでは4~8層程度の積層が一般的なようだが、視線が3Dキャラクタによったときには積層数が多い方が見応えがあるはずだ。

しかし、フィン法と同じように、SM3.0世代までのGPUでは、シェル法においても、断面図テクスチャを適用するポリゴンを、3Dモデル上に事前に仕込んでおく必要があった。

ジオメトリシェーダを活用すれば、この事前の仕込みをせずに、リアルタイムに動的に生成することが可能になる。また、視線と対象物の位置関係に応じて、断面図テクスチャの積層数を増減させるようなLOD的な実装をすることも可能だ。

シェル法によるファー

PS2用ゲームソフト「ワンダと巨像」では毛の表現にシェル法のファーシェーダーを活用していた

PS2にはジオメトリシェーダは無かったため、3Dモデルのオーサリング段階から、このファーを積層させなくてはならなかった

断面図テクスチャは単なる画像テクスチャだけでも良いが、一緒に対応する法線マップも用意しておき、光源ベクトルや視線ベクトルの位置関係に応じてピクセル単位の異方性のライティングを行ってやることで、ファーに独特の光沢感を出すこともできる。

ライティングは、フィンの時のように、やはり毛の根元の方はハイライトが暗くなるように調整した方がよいだろう。

絨毯のような短い毛では、視線から見て毛が"点"と見えるような毛先にはハイライトが弱まり、逆に毛の側面……すなわち毛を"線"として見えるときによく光が反射してハイライトが出やすい。この特性を実装するには、通常の拡散反射処理に加えて、法線ベクトルが視線ベクトルと相対しているとハイライトを弱める異方性処理をすればよい。このアイディアはPS2用ゲーム「ワンダと巨像」に活用されている。(続く)

通常の拡散反射ライティングではは光源に相対しているところほどハイライトが出る

視線と面の向き(法線ベクトル)が向かい合っているところではハイトライトが減退する処理を入れると短い毛の表現の陰影がリアルになる

(トライゼット西川善司)