「ゲームプログラミング/3Dグラフィック」の版間の差分

削除された内容 追加された内容
編集の要約なし
トゥーン・レンダリング
2,479 行
===== SuperTuxKart =====
http://supertuxkart.berlios.de/
 
== 手書きアニメ調の3D ==
よく、3D-CGなのに、まるで手書きアニメっぽい画像を表示するゲームが、何本もある。
 
あれらの仕組みはどうなっているのかというと、トゥーン・レンダリングといわれる技術を使っており、下記のような工夫がよくある。
 
=== 色の階調化 ===
まず、手書きアニメでは、色のグラデーションが無いのが普通である。
 
なので、CG表示でも、そう処理すればいいだけである。具体的には、たとえば、各部の色を、何階調かに近似すればいいのである。
 
また、階調は、色ごとに設定する。
たとえば、ある物体の、光(ふつうの白色光)の当たる前の標準状態の色が水色だった場合、たとえば3階調として
:やや白みのある水色
:水色
:ややカゲで暗くなった水色
のように、3階調に分割する。
 
 
色ごろに階調を設定しないと、アカっぽい色は、ぜんぶアカになったりとかして、役に立たなくなってしまう。
 
 
なお、現代コンピュータでは色データの濃淡は普通は255段階である。256×256×256 = 16777216 の約1600万色である。
 
 
=== 輪郭線 ===
 
登場人物のCGの輪郭線を、マンガみたいに線を強調して表示したい場合、手法はいろいろとあるが、どれも仕組みは単純である。
 
;黒コピー拡大背景の方法
手法のひとつとして、単に人物の画像をコピーして、それをすべてシルエット上に真っ黒にコピーしてから、やや大きく拡大し、さらにその上にもとの画像(黒くしてない画像)を載せると、輪郭ちかくのハジッコのほうだけは手前の画像に隠されずに奥側の黒い画像が見えるので、あたかも輪郭線っぽく見えるという手法がある。
 
これは、3D計算が不要なので、簡便だが便利な方法である。
 
欠点としては、たとえば「腕をくんでるポーズの人」をカメラが見た場合のように、人物の胴体の手前に人物の手が重なっている等の、人体のパーツどうしが重なっている場合には、手間が増える(人物1体ごとの黒コピーでなく、身体各部の黒コピーをする必要がある)。
 
また、流体などのような自然物の描画では、利用が難しい。
 
 
;「深度」なんとか法
他の手法もある。
 
ようするに、奥行き方向(z方向)に段差のある場所で輪郭線が発生しているわけである。なので、元画像の各画素ごとに、その画素の対応するz座標を記録しておいて、そして隣の画素とのz数値との差によって、輪郭の点を描画するかどうかを決める方法である。
 
この方法は、カメラから見た深度をもとに計算しているので、「深度」なんとか法などとも言われる。
 
欠点として計算の手間や、メモリなどへの計算量の負担が増えるが、長所としては人物以外の流体などの自然物などにも応用が利く。
 
 
;法線なんとか法
[[画像:Koch_curve.svg|250px|thumb|right|フラクタル図形のひとつ、コッホ曲線]]
さらに他の方法もある。
 
それは、各ポリゴン面ごとに、その面の垂直線(面の垂線の場合、正確には「法線」(ほうせん)という)をあらかじめ全部の面ごとに計算しておいて、そして垂直線がカメラ向きに対して90度近くの場合にだけ、「そこに輪郭がある」として黒い点を描画していく方法である。
 
 
「法線」なんとか法などとも言われる。
 
長所としては、法線を計算しておけば、ほかの計算にも流用できる。
 
また、市販の3D-CGモデリングソフトによっては、すでに法線の自動計算の機能がついているものもある。
 
欠点としては、フラクタル図形のような被写体があるとき、見る角度によっては、その図形すべてを描画したりしかねず、真っ黒に写りかねない。
 
もっとも、通常の市販の3D-CGモデリングソフトでは、フラクタルの描画ができないので、めったにその事態に遭遇することは無いだろう。
 
== 参考文献 ==