2009年03月15日

テクスチャプラグインをWindowsでコンパイルする

前回は付属のサンプルコードをコンパイルするだけで終わってしまったので、今回はオリジナルのプラグインを作ってみよう...と思ったのですが、前回できなかったWindowsでのコンパイルがようやくできるようになったので、その方法を書いておこうと思います。

まず、今回参考にしたインターネットのページです。
BlenderArtists.orgのフォーラムで検索してこちらのスレッドにたどり着きました。
そして、その中で紹介されていたのが、こちらのサイトです。

以下に、簡単に手順を説明します。基本的に上のサイトの手順そのままです。
ちなみに使用するコンパイラはMicrosoftのVisual C++ 2008 Express Editionのものです。

1.コマンドプロンプトを立ち上げます。Windowsのスタートメニューの「アクセサリ」とかにあります。
pic090314_01.jpg

2.Visual C++の機能をコマンドプロンプトから使えるようにします。具体的には、Visual C++に付属する「vcvars32.bat」というバッチファイルを実行します。

"\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat"

インストールの仕方によってファイルの場所は、違っていたりするかもしれません。
pic090314_03.jpg pic090314_04.jpg

3.「cd」コマンドで、Blenderのインストールフォルダにある「Plugins」ディレクトリに移動します。
あらかじめ「Plugins」フォルダだけを、どこかわかりやすい場所にコピーしておいた方がいいかもしれません。

cd \blender\plugins

今回は「C:\」直下に「blender」というフォルダを作って、そこに「Plugins」フォルダをコピーしてあります。
pic090314_05.jpg pic090314_06.jpg

4.コンパイルに必要な「lib」ファイルを作成します。
詳しいことは上記のサイトで説明されていますが、プラグインのソースファイルでBlenderの用意している関数を使うために必要なようです。サンプルの「tiles.c」と「clouds2.c」では、「plugins」-「include」フォルダの「plugin.h」に記述されているhnoise()関数が使われています。
そのためのコマンドは以下のようなものになります。

link /lib /nologo /MACHINE:X86 /DEF:include\plugin.def /NAME:blender.exe

これで、「plugin.lib」「plugin.exp」という2つのファイルが作成されます。
pic090314_07.jpg pic090314_08.jpg

5.プラグインをコンパイルします。

cl /nologo -Iinclude /LD texture/tiles.c plugin.lib /link /EXPORT:plugin_getinfo /EXPORT:plugin_tex_getversion

2行に分かれて表示されていますが、実際には1行にまとめて入力します。
上の例では、「texture」フォルダに入っている「tiles.c」を指定しました。
このコマンドを実行すると、コマンドプロンプトにずらっとメッセージが表示され、「tiles.obj」「tiles.dll」「tiles.lib」「tiles.exp」の4つのファイルが作成されます。このうち、「tiles.dll」がプラグイン本体となります。
pic090314_09.jpg pic090314_10.jpg

pic090314_11.jpg

Blenderの「plugin」パネルの「Load Plugins」ボタンで、今作ったプラグインファイルを開いてみます。
pic090314_12.jpg pic090314_13.jpg

無事、プラグインとして使用できました。


実は、今回参考にさせていただいた上記のサイト以外に、LCC、MinGWを使ってWindowsでテクスチャプラグインをコンパイルする方法が書かれているサイトがあって、最初はそちらを参考にしてコンパイルを試していたのですが、私の環境ではなぜかうまくいきませんでした。
そちらでは、今回の「4.」の「lib」ファイルを作成する部分に相当する手順が省かれているようですので、そのあたりを工夫すればLCCやMinGWでもコンパイルできるのかもしれません。
posted by mato at 00:21| Comment(0) | Blender | このブログの読者になる | 更新情報をチェックする

2009年03月13日

テクスチャプラグインのサンプルをコンパイルしてみる

「vectexを改良しよう!」と目標は定めてみたものの、予備知識がないことにはどうにもならないので、まずは基本から始めてみたいと思います。
とりあえず簡単なテクスチャプラグインを自作するところから始めてみます。プラグインファイルを作る際に参考になりそうなページがBlender.orgのWikiにあります。

こちらを読んでみるとBlenderのインストールディレクトリの「plugins」フォルダにプラグイン開発に必要なファイルが全部そろっていて、サンプルもいくつかあるということです。このフォルダは3Dマウス「SpaceNavigator」を使う際にプラグインファイルを置く場所だったので知っていましたが、テクスチャプラグインの開発用のファイルが置いてある場所でもあったんですね。
pic090313_01.jpg

この「plugins」-「texture」フォルダを見てみると「clouds2.c」「tiles.c」という2つのサンプルファイルがありました。「plugins」-「include」フォルダの方にはプラグインの〜.cファイルを書く際に使われるC言語のヘッダファイルがあります。
pic090313_02.jpg pic090313_03.jpg

プラグインを実際にコンパイルするには「plugins」フォルダにあるMakefileを使えばいいようです。テクスチャプラグインの開発に必要なファイルは「plugins」フォルダの中にあるものだけで、Blenderのインストールディレクトリにあるその他のファイルは関係ないようです。実際にプラグインをコンパイルする場合、「plugins」フォルダごと別の場所にコピーしておいて、そちらで開発するという感じでもいいようです。

Linuxの環境でサンプルファイルをコンパイルしてみます。
コンソールウィンドウで「plugins」フォルダに移動して、

$ make

とするだけです。
コンソールにとくにエラーらしきものが表示されなければ、「texture」フォルダの中に「cloud2.so」「tiles.so」というファイルができているはずです。(エラーが表示されてもファイルができてしまうこともあるのですが、そういう場合はBlenderでプラグインをロードするときに失敗したりします)
pic090313_04.jpg pic090313_05.jpg

ちなみに「plugins」フォルダのMakefileはこんな感じになっています。

all: textures sequences

textures:
$(MAKE) -C texture

sequences:
$(MAKE) -C sequence

clean:
$(MAKE) -C texture clean
$(MAKE) -C sequence clean

「texture」フォルダと「sequence」フォルダに入っているMakefileを実行するように記述されています。
そして、「texture」フォルダのMakefileは、こんな感じです。

all: plugins

plugins:
@/bin/sh -c 'for i in *.c; do ../bmake $$i; done;'

clean:
rm -rf *.o *.so

「〜.c」という名前のファイルがあったら全部コンパイルする、ということですね。
自分で新しく「test.c」というようなプラグインを書いたとしても、Makefile自体を修正する必要はなくて、makeコマンドを実行するだけでコンパイルしてくれるというのは助かります。

さて、できあがったプラグインはどんなものなのでしょうか?
どちらもソースコードの行数は178行で、書かれているコードはそれほど多くはありませんが、かといって最低限の簡単さというわけでもなく、普通に実用的なプラグインとして使えそうな感じです。
pic090313_06.jpg pic090313_07.jpg

長くなってしまったので、今回はここまでにします。次回以降でオリジナルのプラグインを作ってみたいと思います。
(ちなみに、Windowsでも試してみようと思ったのですが今のところまだうまくコンパイルできていません。もう少し調べてみたいと思いますが、Windowsの開発環境(VisualStudio、MinGW、Cygwin、LCCなどで試してみています)自体についてかなり勉強しないと難しそうな感じです。ちょっと無理っぽいような...。)
posted by mato at 01:32| Comment(0) | Blender | このブログの読者になる | 更新情報をチェックする

2009年03月10日

vectexのソースコード

前々回の記事の中でも書きましたが、vectexはAGG SVG Viewerのソースコードを使って書かれています。実際に両者のソースコードを見比べてみると、かなりの部分が共通しています。vectexはオープンソースの既存のコードがとても効率よく使われていて、vectexの作者のmgmalheirosさんが自分で書き起こしたコードは意外なくらいに少ないです。
pic090310_01.jpg

上の図で、赤い部分は既存のコードがそのまま利用されているファイル、青の部分が新規に作成されているファイルです。
「agg-2.5」「blender」「expat-1.95.8」というフォルダの中身については、「agg-2.5」は2D描画のためのライブラリのソースコード、「expat-1.95.8」にはXML構文解析のライブラリのソースコードがまるごと入っていて、サンプルファイルが省かれたりはしていますが、基本的に中身は配布されているものそのものです。「blender」フォルダにはBlenderのテクスチャプラグイン開発用のヘッダファイルなどが入っていますが、こちらも配布されているものがそのままコピーされているだけです。

vectexのトップディレクトリには「.h」「.cpp」「.c」という拡張子のファイルが10個あるわけですが、このうちの7個はAGGのSVG Viewerのサンプルコードと同じ名前になっています。Meldという差分表示ツールを使ってみると、実際には少しだけ修正されているところがあるようですが、ほとんどそのままで使われています。
pic090310_02.jpg

SVGファイルの読み込みから描画までのほとんどの部分がAGG SVG Viewerのコードそのままということは、もとのAGGのファイルが更新されてより多くのSVGの機能を使えるようになれば、ほとんど自動的にVectexでもその恩恵を受けることができるということになります(使用変更とかがあると必ずしもそうはならないかもしれませんが...)。もしそうなると嬉しいのですが、残念ながらAGGのサイトを見た感じでは2006年10月を最後に更新されていないようです。
そして、vectexの方も公開されてから約1年になりますが、BlenderArtist.orgのスレッドの状況などからすると、更新の可能性は低そうに思えます。

私はこのプラグインの機能は、このまま埋もれさせてしまうのはあまりにも惜しいと思います。できれば、マルチスレッドに対応し、通常のSVGファイルならどれでも読み込めるようにして、普通のテクスチャと同じ感覚で使えるところまで発展させたいところです。
ちょうど私は3DCGのプログラミング技術をもう少しレベルアップしたいと思っていたところなので、しばらくの間、このプラグインを改良することを目標にしてプログラミングの勉強を進めてみようと思っています。

とはいっても、現時点ではプラグインというものを自分で作ったことさえ一度もなく、ほとんどプログラミング初心者という感じ(実際にはプログラミング歴数十年なのですが、初心者レベルから全然進歩していない)ですので、結局、何も変えることができないままで終わってしまうかもしれません。もし、そうなってしまったら、すみません。
posted by mato at 23:46| Comment(0) | Blender | このブログの読者になる | 更新情報をチェックする

2009年03月07日

vectexで服のテクスチャを試してみました

これまでBlenderのSVGテクスチャプラグイン「vectex」について色々調べてきましたので、テスト画像だけでなく実際に使ってみたいと思います。

実際に試していただけるように、一応サンプルデータsample_data090307.zipを用意してみましたが、自分の PC環境以外で上手く開けるかどうかよくわかりません。 vectexプラグイン自体は入っていませんので、公式サイトの方から入手して下さい。前々回の記事を参考にしていただければ、vectexをロードした状態でファイルを開くことができると思います。

私はこのプラグインを主にキャラクターの衣服のテクスチャを表現するのに使いたいと思っていました。
Poserなどでは既存の衣服のデータに対して、カスタムテクテクスチャを作成して使用することがよく行われています。そのため、衣服の形状データでUV展開をする場合は、可能なかぎりテクスチャを描きやすいようにしています。私の場合、実物の衣服が生地から型紙を使って裁断されるのをイメージしてみたりします。

この場合、服全体のUVが均等に展開されるので、繰り返しになる部分を重ねて面積を節約するような方法よりもテクスチャ画像を大きめにしないと模様の細部を再現できません。
私がPoser用のフィギュアに付属させた服のテクスチャのサイズは1024x1024程度です。上半身全体が入るような構図のレンダリングであれば、それと同じくらいの画像サイズなら十分かと思います。ただ、手や顔などのクローズアップの構図にたままた服も入ってしまうような場合、このテクスチャのサイズだとちょっときついかもしれません。

服のテクスチャとしてvectexを使用した場合の効果を確かめるため、以前作成したJpeg画像とほぼ同じ内容のSVG画像を作成して比較してみました。服のテクスチャーには、通常のカラー用、トランスマップ用、バンプマップ用の3枚の画像を使用しています。SVG画像の作成にはInkscapeを使ってみました。
pic090307_07.jpg

テスト用のデータとしてはこんな感じのものを使っています。
pic090307_01.jpg

テクスチャ部分をクローズアップして比較するとこんな感じになります。
pic090307_02.jpg pic090307_03.jpg

Jpegの方が1024x1024というのはちょっと解像度が低すぎというのもあるのですが、vectexの方はレースの模様がくっきりとしていてプラグインの効果を十分に発揮しているようです。トランスマップのエッジ部分がとても鮮明でいい感じなのですが、なぜかバンプマップはまったく効いていないように見えます。

ちょっと気になったので「texture」パネルでバンプマップ以外のテクスチャを無効にした状態でレンダリングしてみました。この状態で比較するとよりはっきりするのですが、vectexでは完全にバンプマップが機能していないようです。バンプを完全にオフにした状態とも若干違うようですが、とにかく模様が浮き出るような感じになりません。
pic090307_04.jpg pic090307_05.jpg

これがなぜなのか非常に悩んだのですが、もともとのバンプマップの計算の仕組みの関係で、解像度に依存しないプロシージャルテクスチャでは離散的な明度差の絵を使用した場合には普通にこういうことが起こるようです。
こちらのサイト(OpenGLのプログラミングについて、色々詳しく書かれています)にバンプマップの分かりやすい図がありましたので、それを参考にして比較用の図を作ってみました。左が普通の画像の場合、右が今回のような場合です。
pic090307_06.jpg

はっきりと確認したわけではないのですが、おそらくこういう感じになっているのではないかと思います。

Blenderのプラグインリポジトリにあるテクスチャプラグインをいくつか調べてみると、vectexと同じようにバンプマップがうまく機能していないものがありました。さらに、いくつかのプラグインのパネルには、バンプマップとして使用するときのための設定ボタンが付いていました。どうもvectexではバンプマップを使うことは難しそうな感じです。

とりあえず、バンプマップ用に3072x3072のPNG画像をInkscapeから書き出して、vextexのカラー、トランスマップと組み合わせて使用してみました。
pic090307_08.jpg

あまりバンプの効果がわからないような...。それはともかく、これだと最初からカラー、トランスマップの分も含めて3枚の画像とも3072x3072で作成しておけばそれでいいのでは、という気もしてしまいますね。
それにしても、今回のサンプル画像を作るだけでも、ものすごく時間がかかるように感じました。マルチスレッドが使えないというのは、かなり厳しいです。
posted by mato at 03:37| Comment(0) | Blender | このブログの読者になる | 更新情報をチェックする

2009年03月04日

AGG SVG Viewer

vectexの話題の続きです。
vectexのソースコードをダウンロードすると、その中に「agg-2.5」「expat-1.95.8」というフォルダがあります。
pic090304_01.jpg

vectexのReadmeを読んでみると、このプラグインの作者 mgmalheirosさんは、オープンソースの2D描画ライブラリ「AGG」に付属しているSVGビュワーを元にして、このプラグインを作成したようです。
AGG」というのは「Anti-Grain Geometry」というのが正式名称で、Maxim Shemanarevさんという方が作られています。このサイトのトップページのメニューに「SVG Viewer」という項目があり、そこにこのライブラリを使ったSVG ViewerのWindows版ファイルとサンプルのSVGグラフィックがダウンロードできます。
pic090304_04.jpg

サンプルというだけあって、SVGファイル名を引数として指定してコマンドラインから実行するという使用方法になっています。
コマンドラインからの実行ということでちょっと面倒ですが、あるSVGファイルがBlenderのvectexプラグインで使えるかどうかを調べるのに使えそうです。
pic090304_02.jpg

ただ、なぜかLinux版の実行ファイルはダウンロードできるようになっていません。ソースコードから自分でコンパイルしてくださいということらしいです。基本的には「make」コマンドを使うだけなのですが、私がこのSVG_Viewerをコンパイルするまでにちょっととまどう部分がありましたので、少しその手順を説明したいと思います。

svg_viewerのソースファイルは「agg-2.5」フォルダの中の「examples」フォルダの中の「svg_viewer」というフォルダの中にあります。フォルダの中を見てみると、普通ならあるはずの「Makefile」が見当たりません。
pic090304_03.jpg

他のサンプルファイルは「examples」の中の「X11」フォルダにある「Makefile」を使ってまとめてコンパイルすることができましたが、その中にSVG Viewerはみつかりません。これは、もしかして自分で「Makefile」を作れということなのかと思って、しばらく悩みました。

結果的には「agg-2.5」フォルダのreadmeファイルをよく見ると、そこにコンパイルの仕方が書かれていました。
実は他のサンプルファイルと同じく「X11」フォルダにある「Makefile」に、SVG Viewerのための記述も書かれているのですが、SVG Viewerは他のライブラリ(freetype,expat)に依存しているためデフォルトではコンパイルされないようになっているそうです。
Ubuntuのパッケージマネージャ「Synaptic」で確認すると、私の環境ではどちらもインストール済みでしたので、そのままでコンパイルできそうです。SVG Viewerをコンパイルするには、端末ウィンドウで「exapmles」-「X11」に移動して、

$ make svg_test


と入力するだけです。
ちなみに、makeの後に指定しているのは、すべてをコンパイルするときに指定する「all」、makeで作成されたオブジェクトファイルなどを削除する「clean」などと同じ「ターゲット」というものです。「Makefile」の中でSVG Viewerに関する記述が「svg_test」というターゲットの下に書かれているので、この名前を指定することでmakeコマンドにSVG Viewerをコンパイルさせることができるということです。

Linuxでプログラミングをする場合、makeコマンドの動作の仕組みとかをある程度知っていないといけないようです。
※追記
「Makefile」について「make」コマンドとまぎらわしい記述になっていたのを修正しました。
posted by mato at 03:20| Comment(0) | Linux | このブログの読者になる | 更新情報をチェックする
×

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