2010年2月2日火曜日

スタイルモジュールとかのメモ

少しずつ勝手がわかってきたのでチュートリアルから脱線して、いろいろ試行錯誤中。
勝手気ままにいろいろ試してるとはまることも多くなるのでちょっとメモ。



-スタイルモジュール編集はblender内蔵でない別のテキストエディタを使った方が良さげ

最初はモデルいじってレンダしつつスタイルモジュールのコード編集ができるので
内蔵テキストエディタをつかってたけど、Freestyle統合版は開発版ということもあり
たまに落ちる。特に当てずっぽうで変なコードを書いてそれを読ませてレンダすると
blenderごと落ちることが多い。

編集中のスタイルモジュールでレンダするにはレンダ前にコードを保存する必要が
あるので、『blenderが落ちたせい』で未保存の編集内容が失われるという自体は
今のところ発生してない。

何が問題かというと、内蔵テキストエディタは自動的にスワップと言うかバックアップ
ファイルを作るらしい。そこまではいいんだが、落ちたあとにblenderを再度起動すると
レンダ前に保存済みの本ファイルでなくスワップの方を開いた状態でテキストエディタを
表示していることがある。

で、スワップの内容は保存した状態よりもだいぶ過去の内容であることがほとんどなので
"あれ、あの関数を追加したとこが消えてる?おかしいな保存に失敗してた?"と思って
同じ作業を繰り返したり、さらに古い内容のスワップファイルで最新の変更内容が正しく
保存されていたであろう本ファイルを上書きしたり・・・orz。

面倒がらずにテキストエディタ起動しとけ<自分



-公式のチュートリアルが作成された時点からモジュールの構成に変更があった?っぽい

最初にやったチュートリアルではモジュールの読み込みを
from Freestyle import *
の一文で済ませている。そのファイルに追記しつつ色々試していると関数が見つからない
という旨のエラーに遭遇。エラーメッセージを見るとNotUP1D()が見つからないらしい。

その関数を使用するスタイルモジュールのサンプルがFreestyle統合版blenderに含まれて
いたので正しくレンダ出来るか試してみるとエラーもなく普通にレンダ開始&終了。
レンダ画像を見てもその関数を利用している部分は正しく機能している感じ。

サンプルのコードを確認してみるとモジュール読み込み部分がチュートリアルと違ってた。

from freestyle_init import *
from logical_operators import *
from PredicatesB1D import *
from shaders import *
from PredicatesU0D import *
from math import *

と言う感じ。
mathはPythonの標準モジュールのはずだけど、その他はFreestyleのモジュールだよなぁ。
from Freestyle import *でFreestyleモジュールを読めば、間接的に他の必要なモジュールは
すべて読み込まれたと思ってたんだけど変更が有ったのかも。
もしくはFreestyle単体版と統合版でモジュール構成がちがう?
ちなみにNotUP1D()はlogical_operatorsにありました。

モジュール関連の情報がないかとFreestyleの公式ページを見てみたらFreestyle File Listって
いうページを発見。そこに各モジュールにどんな関数が含まれるか書いてあるかと思いきや
Cのヘッダファイルのリストでした。

残念。

前にpythonのチュートリアルだかリファレンス的なハンドブックを読んでいたときに
どのモジュールにどんなクラスや関数があるのかを表示する方法を目にした記憶が・・・。
どこで見たっけなぁ。最悪ファイルをエディタで開いて確認してけばいいんだろうけど。

Freestyleのモジュール内容一覧みたいなのがあると便利そうなので調べてみるかな。


今日の進捗はこんな感じ。



ドーナツの内側、手前と奥のラインがそれぞれ3つずつに分かれてたのを1本に、とまでは
行かなかったけど比較的長いストロークにまとめることはできた感じ。
ただ、chain系の操作で接続処理の終了を判定させるための条件を指定するのに、何を
どう指定すればいいのかがわかっていないので、とりあえず繋がったというレベル。

外側の長いストロークを分割する方は手付かず。

---------------------------------------------------------------

コメントなどありましたらこちらへ->web拍手