09/04/18 00:09:56 DCijMV7K
>>942
トゥーンレンダリングの技術はプリレンダリング用とリアルタイムレンダリング用の2つに大別できる。
プリレンダは表示を始める前に全部レンダリングしておく方法で、要するに動画ファイルを作るときの技術。
リアルタイムレンダは実時間で計算しながら表示するための技術でゲーム中にプレーヤーの操作に
応じてキャラクタを動かしたり視点を変えたりするときに使う技術。タイムリープと言っているから
後者のリアルタイムレンダのことを知りたいと仮定して話を進める。
リアルタイムレンダ用のトゥーンレンダリング技術は、プログラマブルシェーダを使う方法とそれ以外の
方法の2つに大別できる。また、典型的なトゥーンレンダリングを実現するには (a) 輪郭線の抽出と
(b) アニメ的な表面色の2つの処理が必要になる。
プログラマブルシェーダは、元々固定だったレンダリングパイプラインの一部をシェーディング言語で
変更できるようにしたもの。リアルタイムレンダ用のシェーディング言語には GLSL (OpenGL), Cg,
HLSL (DirectX) などがある。これらのシェーディング言語を用いて輪郭線と表面色の計算方法を
記述して OpenGL や DirectX 等の 3D 表示ライブラリのレンダリングパイプラインの一部に組み込む。
この方法はグラフィックアクセラレータ(GPU)による高速化の恩恵を受けられる。その反面、実行環境に
対する要求(「実行には○○必須」的な条件)が厳しくなる。
一方、プログラマブルシェーダーを使わずにやるには従来の C/C++ 等のプログラミング言語で
3D 形状データから輪郭線と表面色を計算する。実行環境に対する特別な要求は生じない。
以上の文中に出てきたキーワードでググればサンプルプログラムが多数見つかると思う。例:
URLリンク(tpot.jpn.ph)
このサイトはプログラマブルシェーダの使い方を DirectX と OpenGL の両方で解説している。
URLリンク(www.postulate.org)
こちらはプログラマブルシェーダを使わないで輪郭線と表面色を計算する方法を解説している。
サンプルは OpenGL (GLUT ライブラリ) で VC++ のプロジェクトファイル付き。手元で試したら動いた。