輪郭

outline.png

3Dオブジェクトの輪郭線

3Dオブジェクトの場合は、

法線と視線の内積=0

の時黒く塗るとすると
輪郭が描ける。

法線と光の方向ベクトルの内積=0

という説もある

輪郭線の種類

ステンシルバッファを用いた方法

手法 見た目 メモリ
ステンシルバッファ+太らせたポリゴンを重ねる方法 近いほど太く、遠いほど細くなるような線が描ける 線用に別データが必要
GL_LINESで重ねる方法 近いほど細く、遠いほど太くなるような線が描ける。 綺麗に輪郭を引くためには2つ頂点データを用意しなくてはならないから面倒 ファイルは1個でも、VBOが2倍必要
glPolygonOffset+線 glPolygonOffsetは線引いたときのz-fightingをなくすために有効

Generating Outlines in OpenGL…..ステンシルバッファ+polygon offsetを使う方法

法線ベクトルと視線ベクトルを使ってシェーダーでやる方法

Crease Edge

Creaseとは折り目、畳み目という意味です
オブジェクトの外枠、輪郭以外で線を引きたいような部位です
crease_angle.png
閾値として角度を指定するらしい。
面法線を使用する

Silhoute Edge

silhouetteedge.gif

法線マップから輪郭を取る方法

normalmap.png
レンダリング結果の法線マップを使って、画像の差分値から輪郭線を取得する方法

デプスマップから輪郭を取得する方法

depthmap.png
この2つを組み合わせるとばっちり
cel-shading non-photorealistic-rendering

サポートサイト Wikidot.com cel-shadingnon-photorealistic-rendering