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

削除された内容 追加された内容
編集の要約なし
レイトレーシングを併用して輪郭線を検出する方式
2,544 行
 
また、ほかの欠点として、計算の手間や、メモリなどへの計算量の負担が増える。
 
長所としては人物以外の流体などの自然物などにも応用が利く。
 
 
2,596 ⟶ 2,594行目:
 
 
エッジ法やその関連技術はこのように便利であるが、メモリ負担が大きいのがゲーム的には残念である。
なお、関連技術として、市販の3Dモデリングソフトでは、各部分の「材質」(『マテリアル』ともいう)をパーツごとに登録できるので、画素どうしの法線の比較のついでに、材質の比較をすることで、材質の変化をした部分に輪郭線を引くこともできる。このため、たとえば材質「服」と材質「肌」との境目の画素のぶぶんに輪郭線を引くこともできる。
 
 
エッジ法にかぎらず、上述のすべての方式の弱点として、カドっこを丸めるフィレット処理などの処理をされると、とたんに輪郭の検出が描画が難しくなる。
エッジ法やその関連技術はこのように便利であるが、メモリ負担が大きいのがゲーム的には残念である。
 
ゲームやアニメなどの娯楽検出では、あまり問題にはならないが、工業製品などの3D-CGでは、重要な問題である。工業製品では、(切り傷などのケガを防ぐための)安全のため、エッジをとがらずに、丸める。
 
 
==== レイトレーシングの併用 ====
フィレットのような丸みのある方法でも輪郭線を検出する方法としては、レイトレーシングを併用する方法がある。
 
つまり、丸みがあろうが何だろうが、全体的に見て、デコボコしてたり、段差のある場所なら、光を当てたとき、そこで明暗が変化する可能性が高い。
 
なので、いろんな方向で被写体にレイトレーシングを試行してみて、明暗の変化の激しいポイント付近にあるパーツを見つければ、そこを輪郭として認識すればいい。
 
 
欠点として、メモリの負担がかなり大きくなり、そのため処理速度にも負担になりかねない。なので、携帯ゲームでの利用は、絶望的である。筐体ゲーム(プレステやx-boxなど)ですら、やや厳しいかもしれない。
 
また、アルゴリズムも高度である。
 
 
ただし、この方法だと、アニメ調のキャラクターデザインだけでなく、リアル調のCGキャラクターでも、鼻と顔などのような境目の微妙な輪郭ですら検出できるので、劇画などにも応用の可能性がある。
 
ただし、残念ながら市場の需要として、そもそもリアル調の劇画風CGの需要が少ない。
 
 
==== 関連技術 ====
なお、関連技術として、市販の3Dモデリングソフトでは、各部分の「材質」(『マテリアル』ともいう)をパーツごとに登録できる。なので、エッジ法や深度法などでの、各部の画素どうしの法線の比較のついでに、材質の比較をすることで、材質の変化をした部分に輪郭線を引くこともできる。このため、たとえば材質「服」と材質「肌」との境目の画素のぶぶんに輪郭線を引くこともできる。
 
 
ただし、材質どうしの比較だと、たとえば手を胸(説明の簡単化のため、男の平らな胸にする)に当てている場合や、手を腹に当てている場合などは、手も胸も腹も材質は同じ「肌」なので、この方法では検出できない。
 
 
どうしても、このような場合でも、手と胸との境界線を「材質」比較の方法で描画したい場合、対策として、たとえば材質「肌-手」や材質「肌-胸」など、身体各部ごとに材質をつくっておけばいい。
 
 
なお、普通のアニメ絵では、胸と腹のあいだの境界線は書かないし、胸と肩のあいだの境界線も書かない。
 
なので、例外として、材質が違っていても境界線を書かない組み合わせをあらかじめ登録しておき、それ以外の組み合わせが隣りあった場合にだけ境界線を描けばいい。
 
もっとも、この方法を使わなくても、前述したような黒背景の方法や「法線」なんとか法などでも、手と男胸との輪郭線を描画できる可能性はある。
 
 
 
また、フィレット(丸み化)処理のある被写体の場合、黒背景法や「法線」法や深度法などでの検出が難しいので、このような場合にも、「材質」方式で輪郭を検出するのも有効であろう。
 
材質の表面上でとなりあった部分どうしの組み合わせは、例外として輪郭としては検出しないようにプログラムしておく。例外以外の組み合わせが隣り合った場合に、輪郭として検出すればいい。
 
 
== 参考文献 ==