Siphon memo 1
現在開発している Blender アドオン Siphon についての雑多なメモ。
Siphon は Blender の Non-photorealistic rendering engine である Freestyle をベースに構築する予定である。Freestyle は contour drawings に特化しており、従来のピクセル単位 0D
ではないストローク 1D
という単位での表現手法を実現している。場所がバラバラになってしまうが Freestyle について GitHub 上にも簡単なメモをまとめている。
Freestyle では 3D と 2D の架け橋として View Map
と呼ばれる重要なデータ構造が用意されている。View Map の処理はポリゴン数が多くなるほど重くなる傾向にある。Siphon では計算した View Map をキャッシュしておき、ノード上でパラメータを変えストロークの描画をインタラクティブに行えるようにするのが目標の一つである。とは言うものの、Proposal for the Development of Blender's Non-Photorealistic Rendering Capabilities の Task 2 で View map caching が触れられており、もしかするとキャッシュ機構自体はすでに実装されているのかもしれない。
輪郭線編集
輪郭線編集の必要性を感じたのは以下のツイートを見たことがきっかけであった。
@kohta0130 質問がたくさん来たので、こういうことです。顔を変形させなかったら、顎下のシルエットラインの影響で太って見えたり、受け口っぽく見えるんですよね。 pic.twitter.com/p26F4zJlCb
— 森江康太 Kohta Morie (@kohta0130) April 7, 2016
この映像作品の場合、顎下のシルエットラインを 3D のモデルのポリゴンを編集することでレタッチしている。3D モデルを deform する方法については以下の記事も興味深い。
また、ポリゴンではなく輪郭線を 2D 上で操作するという方法もあり得る。Freestyle の論文には、歯車の歯先を丸くするというような例が載っており、輪郭線の編集についても可能なように設計されている。さらに、あるシーンの複数フレームの View Map をキャッシュし、ターゲットの輪郭線を deform する方法があれば、アニメーションもより 3D ぽく見えないように見せることもできるようになるかもしれない。あるいは temporal coherence へ対処する一つの方法になるかもしれないと考えている。
面の交差
Freestyle でよく聞く要望点として面と面の交差部分のエッジが描画されないというものがある。実装については T.K.氏の以下のディスカッションがとても参考になる。
影の輪郭線
知人から 3DCG セルアニメーションの違和感として、影の輪郭線を指摘されたことがある。もし影の輪郭線も編集できれば違和感を減らせるかもしれない。
Freestyle の論文では feature lines
の種類を将来拡張するということが future work として書かれている。影の輪郭線を追加することも可能かもしれない。その場合、discontinuity などいくつか条件を満たすかどうか調べる必要があるかもしれない。
また影の領域から hatching や shading も作れるかもしれない。領域というデータ構造は Freestyle では定義されていなさそうだ。いまのところ Freestyle の SVG 出力機能として Exporting Fills というものがある。これ自体は Contour
及び External Contour
と predicates の組み合わせによって実現されているようである。
懸念事項
いま心配しているのは、実際にアドオンとして配布する場合、PyPI の依存ライブラリを含めたインストール手法をユーザに提供可能かということだ。開発では Blender に pip を導入し改造している。PyEFD なら依存ライブラリが NumPy だけなので大丈夫そうだ。Menpo は conda へのインストールを推奨しているぐらい依存関係が複雑なので難しい。Keras や Chainer も同様で、サーバをたててもらい RPC で連携するような形になるかもしれない。
TODO
- Freestyle の関数や predicates をノード化する
- planar graph の操作と PyEFD による輪郭線の編集