2010年03月31日

Vectexビルド更新 r27840

Graphicall.orgのBlender2.5 Vectexビルドを更新しました。

Linux 64bit

Linux 32bit


Windows 32bit


ソースファイルのパッチ(Blender2.5_Vectex_patch.zip)

今回の更新内容は、

   1. トランクの変更(27332 : 27840)を取り込みました。
   3. SVGファイルを連番ファイルのアニメーションとして使用した場合の不具合の修正。

となっています。

注)3月25日にr27736のビルドをアップロードしましたが、そちらにバグを混入していたことに気付いて、バグフィックス版としてr27840のビルドをアップロードし直しました。前回の更新でも同様のことをしてしまったばかりなのに、同じような失敗を繰り替えしてしまってすみません。


○SVG 連番ファイルについて

SVGフォーマットはアニメーションを表現するための仕様も含んでいて、本来ならばAVI、MPEGなどの動画ファイルのように一つのファイルに複数フレーム分のデータを保持することができます。
そのためSVGファイルを連番ファイルとして使用することは通常はほとんどないと思います。
ほとんどないとは思いますが、Blenderのイメージテクスチャの仕様上このような形でのSVGファイルの使い方もできてしまうので、実際に使ってみるとどうなるのか試してみました。
pic100330_01.jpg pic100330_02.jpg

連番のSVGファイルを出力するようなソフトウェアは恐らく存在しないのではないかと思いますが、Freestyleとsvgwriterモジュールを使うことでBlenderで作成可能です。

BlenderのFreestyleブランチについては、こちらの開発ブログかBlenderartist.orgのフォーラムのスレッドに詳しい情報があります。
Freestyleの機能を試すにはGraphicall.orgにアップロードされるカスタムビルドを使うのが簡単です。

svgwriteモジュールはFreestyleブランチ開発チームのT.K.さんが作成したものです。こちらのT.K.さんのサイトから入手可能です。

もともとのアニメーション用svgwriterはXMLファイルとして各フレームのデータを一時的に保存して、それを一つのファイルにまとめるような仕組みになっています。
このXMLへの書き出し部分のpythonコードを静止画のSVGファイルのヘッダ作成を行う部分と置き換えると、SVGファイルを連番ファイルとして出力できます。

こちらにSVG連番ファイル出力用に改造したsvgwriterモジュールを置いておきます。

本来なら一つのファイルにまとめられたSVGアニメーションをVectexで使用できるようにしたいところですが、現在のところQtSVGでフレーム位置をコントロールする機能が見当たらないため、当面の間はアニメーションに対応するのは難しいと思います。


Blender2.49をベースとしていたときのVectexでも、一応SVG連番ファイルを使用することができました。
しかし、SVGファイルを連番のアニメーションとして使用すると各フレーム毎に大量のタイルキャッシュ画像が作成されるため、簡単に数ギガバイト単位のメモリを消費してしまいます。
前回の更新で、Blender2.5の現在のバージョンのVectexでは、連番のアニメーションとしてタイルキャッシュを使用した場合は、各フレームのレンダリング終了後に作成されたタイルキャッシュを削除してメモリを開放するようにしています。
これにより比較的メモリ搭載量の少ないコンピュータ上でも、Vectexでタイルキャッシュを使ったSVGの連番アニメーションが可能になっています。

SVGファイルを連番ファイルとしてBlenderに読み込んでいる場合、UI操作でタイムライン上のフレーム位置を変更するのに合わせてプレビューの更新が行われます。
通常のビットマップ画像ではフレーム位置に対応した画像をディスクから読み込む処理が行われるだけですが、VectexではSVGドキュメントの読み込みとそのレンダリングという通常より面倒な処理が行われます。
前回の更新の時点ではSVGファイルを連番アニメーションとして読み込んでいる状態でVectexパネルの設定(Base Colorなど)を変更すると、マテリアルのプレビューが表示されている場合などにBlenderがクラッシュする可能性がありました。
今回の更新でこのようなクラッシュが起こりにくくなっていると思います。


○SVG 連番ファイルの使い方
念のためVectexでSVGファイルを連番アニメーションとして使用する手順を書いておきます。

SVG連番ファイルの作成はFreestyle BranchのBlenderで行います。
あらかじめ上記の改造版svgwiterモジュールを適当な名前でハードディスク上に保存しておきます。
適当にアニメーションが設定された状態であると想定して、SVGファイルの出力に必要な手順だけを説明します。
プロパティエディタの「Render」コンテキストで「Post Processing」パネルを開き、「Freestyle」チェックボックスをオンにします。
pic100330_03.jpg

「Layers」パネルを開き、一番下の「Add Style Modue」ボタンを押します。
pic100330_04.jpg

「Add Style Module」ボタンのすぐ下にデフォルトのスタイルモジュールが追加されるので、ファイル名の横のフォルダボタンを押して他のスタイルモジュールを選択するためのファイルブラウザを開きます。
ファイルブラウザが開いたら、上記の改造版svgwriterモジュールを選択します。
pic100330_05.jpg pic100330_06.jpg

「Output」パネルで出力先を指定します。
pic100330_07.jpg

「Render」パネルで「Animation」ボタンを押して、アニメーションのレンダリングを実行します。
pic100330_08.jpg

これで、JpegやPNGなどのビットマップ画像のレンダリングイメージの他に、SVGファイルが出力先のディレクトリに作成されます。
pic100330_09.jpg


VectexでSVG連番ファイルを使う手順です。
プロパティエディタのTextureコンテキストでテクスチャのタイプを「Image or Movie」にします。
pic100330_10.jpg

表示されるImageパネルで「Open」ボタンを押し、ファイルブラウザでSVG連番ファイルの一番最初の番号のファイルを開きます。
pic100330_11.jpg pic100330_12.jpg

上記のFreestyle + svgwriterモジュールを使ってSVGファイルを作成すると透明な背景に黒の線で描画されることになるので、テクスチャプレビューは真っ黒のままでわかりにくいかもしれません。
その場合、Vector ImageパネルのBase Colorを適当に変更します。
pic100330_13.jpg

Imageパネルの上から2段目に「File」「Sequence」「Movie」「Generated」という4つのトグルボタンがあり、SVGファイルを開いた時点では「File」が選択されています。(r27757以降は、トグルボタンからプルダウンメニューに変更されているようです。)
この中の「Sequence」を選択します。
pic100330_14.jpg

するとテクスチャプレビューが真っ黒になるかもしれません。
これは、トグルボタンのすぐ下を見ると理由が分かります。
連番ファイルの最初のファイルとしてframe0000.svgという名前が設定されていますが、実際に保存されている連番ファイルはframe0001.svgが最初のファイルになっているため、存在しないファイルを開こうとして失敗しているという状態です。
連番ファイルを使用する場合、全体でいくつのファイルを使用するのかを指定する必要があります。
「(0)Frames:0」となっている数値ボタンに連番アニメーションの最終番号を入力します。
pic100330_15.jpg

「Start:1」の値を変更すると、使用される連番ファイルの最初の番号を変更できます。
「Offset:0」の値を変更すると、Blenderのタイムラインと連番ファイルの対応の仕方をずらすことができます。
「Auto Refresh」をオンにすると、Timelineエディタなどでカレントフレームを移動するのに合わせて、対応する位置の連番ファイルが自動で読み込まれテクスチャプレビューが更新されます。
pic100330_16.jpg

「Cycric」をオンにすると、連番ファイルのアニメーションの長さを超えるフレーム数に対して、連番アニメーションを繰り返すように対応させることができます。

この他、コンポジットノードのイメージインプット(ヘッダメニューのAdd->Input->Image)でもほぼ同じような操作でSVG連番ファイルを使用できます。
pic100330_17.jpg

上記の手順を手っ取り早く試せるようにテストデータを用意しました。(改造版のsvgwriterも一緒に入れてあります)
test_data100330.zip

Freestyle用の.blendファイルでは、改造版のsvgwriterのファイルパスを指定しなおす必要があります。
posted by mato at 00:27| Comment(22) | Blender Vectex | このブログの読者になる | 更新情報をチェックする

2010年03月11日

Vectexビルド更新 r27332

Graphicall.orgのBlender2.5 Vectexビルドを更新しました。

Linux 64bit

Linux 32bit


Windows 32bit


ソースファイルのパッチ(Blender2.5_Vectex_patch.zip)

今回の更新内容は、
  1. トランクの変更(r27100 : 27332)を取り込みました。
  2. テクスチャノードでのイメージインプットでタイルキャッシュ機能を使用できるようにしました。
  3. SVGファイルを連番ファイルのアニメーションとして使用した場合の不具合の修正(途中)。
というような感じです。

あまり目立った変更はありませんが、とりあえず今回も変更内容についての補足を記事にしたいと思います。

(※このビルドをアッップロードする前に、Vectexパネルで画像サイズを変更したときにSVGレンダリングの再描画が行われないバグのあるビルドをアップロードしてしまいました。もし、スプラッシュスクリーンにr27332ではなく、r27322というリビジョン番号が表示される場合は、新しい方をダウンロードしなおしてください。お手数をおかけしてすみません。)


○テクスチャノードでのイメージインプットでのタイルキャッシュ機能
前回の更新でトランクの修正によって自動的にVectexの機能がテクスチャノードで使用できるようになりましたが、そちらはテクスチャインプットを使用する方法です。(テクスチャノードでヘッダメニューからAdd->Input->Textureを実行)

今回の更新で、イメージインプット(テクスチャノードでヘッダメニューからAdd->Input->Imageを実行)でもタイルキャッシュ機能を使えるようになりました。
pic100310_01.jpg

テクスチャインプットでSVGファイルを使用するためには、あらかじめSVGファイルを使用したテクスチャのデータを作成しておいて、それをノードパネルのメニューから選択する必要があります。

一方、イメージインプットでSVGファイルを使用する場合は、ノードパネルの「Open」ボタンを押すことで直接SVGファイルを開くことができるので、少し手間が省けます。
(すでにUV/Image Editorなどで開いた画像があれば、イメージ選択ボタン(Browse ID data)のメニューから選択できます。)
pic100310_02.jpg

今回の更新で、こちらのイメージインプットでもタイルキャッシュ機能が使えるようになりました...が、実際にはテクスチャインプットでイメージファイルを使用する場合と、イメージインプットでイメージファイルを使用する場合とではレンダリング結果がかなり違ってきます。

とりあえず、イメージインプットでタイルキャッシュを使うまでの手順です。
イメージインプットでSVGファイルを開くだけならノードパネルの「Open」ボタンを押すだけで済みますが、そのイメージの設定を変更するためにはテクスチャの場合のようにノードエディタの外でイメージを開いてプロパティエディタからアクセスできるようにする必要があります。

そのためには実際にオブジェクトに割り当てているテクスチャとは別のテクスチャを作成してテクスチャタイプをImage or Movieに設定、Imageパネルのイメージ選択ボタン(Browse ID data)で既にオープン済みの画像ファイルを選択するというような操作が必要になります。

この状態でVectexパネルでSVGイメージのタイルキャッシュを有効にするかどうか、背景色の変更などを操作できます。

設定を変更したらオブジェクトに本来割り当てるべきテクスチャノードのデータをテクスチャ選択ボタン(Browse ID data)で選択しなおします。

これで、F12ボタンでレンダリング結果を確認できます。

テクスチャインプットを使った場合でも、VectexパネルでSVGファイルの設定を変更するためには同じような操作が必要になります。

それでは、テクスチャインプットを使用した場合と、イメージインプットを使用した場合とでは、レンダリングの結果がどう違うのでしょうか。
テクスチャインプットを使用している場合、Image Samplingパネルでの設定がテクスチャノードに反映されますが、イメージインプットではこれらの設定内容は無視されます。
つまりイメージインプットを使用してVectexのタイルキャッシュを使用しても、ミップマップやテクスチャフィルタリングなどが使えないので画像が粗くなります。
pic100310_03.jpg

また、Mappingパネルの設定についても、Imageインプットを使用した場合は一部の設定が反映されないようです。
以上のことはVectexの機能とは関係なく、JpegやPNGを使っている場合でも同じです。

コードを書いている時点で予想はできたのですが、せっかく使えるようにしたもののテクスチャインプットを使わずに、イメージインプットを使う必要性というのはほとんど無いような気がします。
イメージインプットがなぜこのような仕様になっているのか理由はちょっと分からないのですが、テクスチャノードのシステムは比較的最近(Blender2.49)追加されたばかりなので、まだ細部まで作り込まれていないのかなという感じがします。

SVGファイルをシークエンスとして使用するための修正については、現時点でまだ完了していません。(SVGの連番ファイルを使用しているとき若干動作が不安定になるようです)
次回の更新までになんとか問題を修正できるようにしたいと思っています。
詳細については、次回の更新のときに説明したいと思います。
(前回の記事で10日に一回くらいは更新したいとか書いてましたが、多分2週間に1回とかになるような気がします。)
posted by mato at 01:01| Comment(0) | Blender Vectex | このブログの読者になる | 更新情報をチェックする

2010年02月26日

Blener2.51 r27100に更新

Grapicall.orgのBlender Vectexビルドのファイルを更新しました。
pic100225_01.jpg

Blender2.51 r7100

Linux 64bit

Linux 32bit

Windows 32bit

ソースファイルのパッチ(Blender2.5_Vectex_patch.zip)


Blender2.5の開発は非常に活発に行われているのでGraphicall.orgには毎日最新のバージョンが次々とアップロードされています。
私はこれまであまり頻繁に更新を行ってきませんでした。しかし、VectexビルドもBlender2.5をベースとするようになったので、なるべく最新の状態を維持するのが望ましいと思います。
もしVectex自体のコードに変更がない場合でも、週に1回...は無理かもしれませんが、10日に一回くらいの頻度で更新していきたいと思います。

今回のアップデートでの具体的な変更内容は、
○Blender2.5のトランクの変更を反映しました。(r26884 : 27100)
Vectexのコードの変更は、わずか1行のみです。

○QtSVGのバージョンを更新しました。(4.6.1から4.6.2)
これはWindowsの場合だけです。

これまでLinux版ではシステムにインストールされたQtを使用するようにしていましたが、今回からプラグインファイル(appdir/plugins/libqtsvg_vectex.so)のコンパイル時に静的リンクを行うように変更しました。
このためLinux版を使用する場合でもQtをインストールしなくても使用できるようになりました。


ということで、今回の記事は上記の更新内容について、もう少し詳しい説明を行いたいと思います。

○Blender2.5のトランクの変更
今回の更新までの間に、Blender2.5 Alpha1のリリースが行われました。このためVectexビルドでもスプラッシュスクリーンが新しいものに変更されています。
昨年の11月にリリースされたBlender2.5 Alpha0のときと比べると、たくさんのバグが修正されたことに加えて、かなりの機能追加が行われています。

今回のリビジョン27100と前回のリビジョン26884との違いのうち、Vectexビルドに直接影響している内容は以下のようになります。

これまでBlenderのソースツリーに含まれていたFFMpegのソースコードが外され、OSが管理するシステムのライブラリを使用するようになりました。
Blender.orgで配布されているBlender2.5 Alpha1のバイナリファイルについては特にシステムを変更しなくても使えるようですが、今回のVectexビルドではLinux版についてはシステム側でFFMpeg関連のライブラリをインストールする必要があります。
Ubuntuを使用している場合はとくに問題ないと思いますが、Fedoraなどではシステム標準のリポジトリにFFMpegが含まれないためサードパーティーのリポジトリから取得する、ソースコードから自分でインストールするなどの対応をする必要があるようです。

ちなみに前回の記事では全く触れませんでしたが、Blender2.5で必要なPython3.1も、同じようにFedoraではシステム標準のリポジトリからは取得できないようです。
Python3.1については、このVectexビルドでは静的リンクを行うことで、システム側でインストールしなくても済むようにしています。

FFMpeg、Python3.1ともWindows版についてはDllファイルが同梱されるので、ライブラリのリンクの仕方はあまり関係ありません。


そして、前回の時点では対応できなかったVectexのテクスチャノードでの使用が可能になりました。
pic100225_02.jpg

前回の更新時点では、Vectex用にテクスチャノードのソースコードをかなり書き換える必要があると思っていました。
そのときのテクスチャノードは、画像データから色情報を読み出すための処理でアンチエイリアス(OSA)が含まれないようにして、すべてのノードの処理が終了した時点で最後にアンチエイリアス処理を行うようになっていました。
しかし、Vectexでタイルキャッシュを作成する機能はアンチエイリアスをするためのdxt, dytという情報が必要なため、そのままではまったくテクスチャノードに対応できません。

Blender2.49のときはどうしていたかというと、テクスチャノードの処理にはまだアンチエイリアスが行われるようになっていませんでした。
そのためVectexのために必要なコードを追加して、その部分を変更してもとくに問題ありませんでした。

今回の更新には次のようなものが含まれていました。(Subversionのログを引用)
r26958 | blendix | 2010-02-17 00:45:19 +0900 (水, 17  2月 2010) | 14 lines

Texture Nodes:

* Remove the manual OSA method but rather pass on derivatives to the
  textures. This means that at the moment e.g. the bricks node is not
  antialiased, but that image textures are now using mipmaps. Doing
  oversampling on the whole nodetree is convenient but it is really
  the individual textures that can do filtering best and quickest.
* Image textures in a texture node tree were not color corrected and
  did not support 2d mapping, now it's passing along shadeinput to
  make this possible. Would like to avoid this but not sure how.
* Fix preview not filling in all pixels when scaling or rotating in
  the texture nodes.

この変更で、テクスチャノードエディタでヘッダメニューから、Add->Input->Texuteを実行し、ノードで使用するテクスチャとしてSVGイメージを使用しているテクスチャを指定すると、Vectexのタイルキャッシュ機能がテクスチャノードでも使用できるようになりました。
pic100225_03.jpg

Blender2.49のVectexビルドで行っているノードへの対応は、これとほとんど同じです。

ただし、ヘッダメニューから Add->Input->Imageを実行して、ノードエディタにイメージとしてSVGファイルを使用することはできません。
pic100225_04.jpg

Blender2.49のVectexでもこの機能については対応を見送っていました。
しかし、あらためてソースコードを見てみると、この処理を行っている関数内でVectexのタイルキャッシュ計算に必要な情報は十分に揃っていることに気が付きました。
Sequence Editorへの対応を始める前に、このImageインプットへの対応を行いたいと思っています。

今回私自身が行ったソースコードの修正はたったの1行ですが、これはSVGファイルを開く処理でカラーマネージメントへの対応が正しく行われなかったことを修正しています。
以前のバージョンでは、テクスチャノードにSVGファイルを使用した場合、PNGやJpegなどの画像を使用したときよりも色が明るく表示されていました。(以前のバージョンではタイルキャッシュの機能は使えませんでしたが、テクスチャノードで使用すること自体はできました)
pic100225_06.jpg

調べてみるとImBufを使用してPNG、Jpegなどの画像を開くためのソースコードすべてに対して、カラーマネージメントに対応するためのフラグを設定するための1行が追加されていました。
SVGファイルを開くソースコードに同じ処理を追加してあります。

blender/source/blender/imbuf/intern/svg.c
struct ImBuf *imb_loadsvg(unsigned char *mem ,int size, int flags, int width, int height)
{
...
    if (ibuf) {
        ibuf->ftype = SVG;
        ibuf->profile = IB_PROFILE_SRGB;
    } else {
        printf("Couldn't allocate memory for PNG image\n");
    }
...
}

○QtSVGのバージョンを更新
VectexビルドのSVG描画を行うバックエンドレンダラには、現在QtSVGを使用しています。
Qtのライブラリは年に数回程度安定版の更新を行っているようですが、たまたま前回の更新の後でバージョン4.6.1から4.6.2へと更新が行われました。
このためWindows版に同梱しているDllファイルを最新版に入れ替えてあります。

一方、Linux版ではWindows版とは違ってDllファイルを添付するというようなことはできず、システムにインストールされたシェアードライブラリのファイルを使っていました。
今回、このプラグインファイルの作成時にQtライブラリを静的リンクすることで、Linux版でも最新版のバージョン4.6.2を使用できるようにしました。
このためGnome環境のように標準ではQtライブラリがインストールされない環境の場合、システム側でQtをインストールする必要がなくなりました。

このようにしたことには別の理由もあります。
VectexビルドのBlenderでSVGファイルを開く際、ファイルブラウザの参照していフォルダ内にQtSVGが表示できないSVGファイルがあるとBlenderがクラッシュする可能性があります。
これは、サムネイル画像の作成にQtSVGが使用されるためです。
このようにQtSVGをクラッシュさせるようなSVGファイルをLinux上で見つけた場合、それを使ってWindows上でテストすると問題なく開ける場合があるようです。
詳しいことは分かりませんが、テキスト(フォント)を使用しているSVGファイルで、このようなことが起こる可能性が高いようです。
(テキストを使用していても問題なく開けるSVGファイルもあるので、はっきりとは断定できません)

このため、Qtライブラリについては今後も可能な限り新しいものに更新していきたいと思っています。
posted by mato at 00:34| Comment(0) | Blender Vectex | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。