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

削除された内容 追加された内容
編集の要約なし
編集の要約なし
2,509 行
 
==== 黒コピー拡大背景の方法 ====
;シルエットなんとか法
手法のひとつとして、単に人物の画像をコピーして、それをすべてシルエット上に真っ黒にコピーしてから、やや大きく拡大し、さらにその上にもとの画像(黒くしてない画像)を載せると、輪郭ちかくのハジッコのほうだけは手前の画像に隠されずに奥側の黒い画像が見えるので、あたかも輪郭線っぽく見えるという手法がある。
 
2,524 ⟶ 2,525行目:
 
 
;黒ポリゴンを少し後ろに追加の方式(「裏ポリゴン」なんとか法)
なお、シルエットの2次元黒画像を転写するかわりに、黒色の3Dポリゴンを拡大コピーして、表画像から少しだけ奥の場所に黒ポリゴンを配置する方法もあるが、これだとポリゴン描画量が倍増してしまうので(単純計算で2倍のポリゴン数になる)、ゲームとしては(ゲームでは描画の軽量化・高速化が必要なので)、ややデメリットがある。
 
どうしても黒ポリゴン追加の方式をゲームで活用する場合、ローポリ(ポリゴン数を低くする)にする必要があるだろう。
 
 
なお、後述するポリゴンの法線には、表向きと符号を裏返した裏向きの2種類があるので、背景黒側の法線を裏返して、そして法線がカメラから見て裏向き(法線とカメラの向きが同じ向きのとき)の場合の被写体を黒く塗ることで、この方式の輪郭に流用できる。俗に「裏ポリゴン」なんとか方式とか言われる。
 
 
 
シルエット法も裏ポリゴン法も発想は同じで、違いは単に、黒い背景画像の追加をどの段階で行うかの違いだけである。
 
 
2,635 ⟶ 2,642行目:
フィレットがあってもどうしても輪郭を検出したい場合、後述のいくつかの方法がある。
# テクスチャ的に、輪郭線として検出したい場所を最初から輪郭線の色でモデル表面に塗っておく方法。
 
# 他にもレイトレーシングの併用で検出できる場合があるが、これはちょっとメモリ負担がキツイ。
 
 
2,655 ⟶ 2,662行目:
対策として、カメラと被写体の距離や角度によって、輪郭にしたい部分のモデルだけをこっそりと輪郭テクスチャなしのモデルに入れ替える手法だと(たとえばカメラが接写になるほど近くなった場合には、輪郭部テクスチャをオフにして、テクスチャ無し3Dモデルに入れ替えるなどの方法)などが考えられる。ただし、少しメンドウくさい。
 
==== レイトレーシングの併用 ====
フィレットのような丸みのある方法でも輪郭線を検出する方法としては、レイトレーシングを併用する方法がある。
 
つまり、丸みがあろうが何だろうが、全体的に見て、デコボコしてたり、段差のある場所なら、光を当てたとき、そこで明暗が変化する可能性が高い。
 
なので、いろんな方向で被写体にレイトレーシングを試行してみて、明暗の変化の激しいポイント付近にあるパーツを見つければ、そこを輪郭として認識すればいい。
 
 
欠点として、メモリの負担がかなり大きくなり、そのため処理速度にも負担になりかねない。なので、携帯ゲームでの利用は、絶望的である。筐体ゲーム(プレステやx-boxなど)ですら、やや厳しいかもしれない。
 
また、アルゴリズムも高度である。
 
 
ただし、この方法だと、アニメ調のキャラクターデザインだけでなく、リアル調のCGキャラクターでも、鼻と顔などのような境目の微妙な輪郭ですら検出できるので、劇画などにも応用の可能性がある。
 
ただし、残念ながら市場の需要として、そもそもリアル調の劇画風CGの需要が少ない。