Ruby/MetaRed

何これ?

今のところMetasequoiaのmqoファイルを Redqueen Rendering Toolのrrtファイルに変換する コマンドラインツール'mqo2rq2'を含んでいるシステムです。

そのうちrrt2mqoとかもできるかもしれません。まぁソースもあるので必要な機能が有れば自分で追加して下さい。

再配布などについて

パッケージに含まれる拡張子exe以外のファイルについては 改造&再配布は自由に行ってかまいませんが、 トラブル対処やサポート等は改造&再配布を行った人がやって下さい。

同梱のexeファイルは、 自作のRubyスクリプト群を Exerb 3.2.0と ActiveScriptRuby 1.8.1.1を用いて実行ファイル化したものです。

使い方

基本はコマンドラインからですが、デスクトップにショートカットを作ってやると アイコンへのドロップでも受け付けます。 アイコンへのドロップだとオプションの受け渡しができないので、 受け渡したいオプションはショートカットのプロパティで設定されている作業フォルダにある mqo2rq2.cfgで設定します。

コマンドラインからでもmqo2rq?.cfgを読み込みますが、その場合はカレントフォルダからの読込みになります。

Usage: mqo2rq2.rb [options] mqo_file ...
normal options:
    -x, --width=WIDTH                :integer [640]
    -y, --height=HEIGHT              :integer [480]
    -o, --oversampling=SAMPLE        :integer [3]
    -d, --tracedepth=DEPTH           :integer [5]
        --scaling=SCALING            :float [0.1]
        --no-default-lights

background options:
        --bgcolor=R,G,B              :float,float,float [MQO ambient color]
        --hdri=HDRI_FILE             :*.pfm, *.png, *.ppm, *.tif
        --patch=PATCH_FILE           :loading patch file for mqo2rq.rb

common options:
    -?, --help                       show this message

If exists 'mqo2rq2.cfg' in current folder then preload it.

変換について

おおざっぱにまとめると以下のような変換を行います。

Ruby/MetaRedによるMQO→RRT変換(概要)
Metasequoia Redqueen
非表示オブジェクト 出力しません
オブジェクト 基本的に材質ごとに分解しますが、
特別な名前のオブジェクト オブジェクト名の先頭が@の場合はprimaryunvisible="true"を出力します。
オブジェクト名の最後が!の場合はthroughphoton="true"を出力します。
Point[〜]等の場合は面を各光源に変換します(詳細は後述)
オブジェクト名 オブジェクト名_材質名
材質未割当の面 default_materialを割当てる
四角形面 三角形に分割して
三角形面 座標値を変更して
座標値 座標系変換&1/10にスケールダウンして出力
スケーリングはRRT[:scaling], RRT[:camera_scaling]で任意に設定可能
UV そのまま出力
ロック On castshadow="false"
材質 材質変換についてを参照のこと
ドキュメント設定/周囲光 RRT[:ambient] = :use_mqoの場合renderer/ambientとして出力
下絵/透視 sky/imageとして出力しますが、RRT[:bgtype] = 'hdri'にしないと無意味です。
視点情報 cameraとlightへ適当に(^^;

なお、mqo2rq?の処理対象はmqoファイルであって、それが参照しているテクスチャなどの画像ファイルには手を出しません。 また、Redqueenで扱える形式かどうかのチェックもしないので、そのあたりは各自で対処して下さい。 まぁフルカラーのPNGファイルを使っておくのが無難だとは思う。

材質変換について

mqo2rq2は材質色をdiffusion/colorに変換します。 また、マッピング/模様はdiffusion/imageに、 マッピング/透明をtrimming/imageに、 マッピング/凹凸をbumpiness/imageにそれぞれ変換します。 不透明度が1未満の時はrefractionindex="1"を出力します。 ただし、後述の材質名によるrefractionindex値の指定があればそちらを優先します。

mqo2rq2では材質名で変換方法を制御します。

凡例: "mat01 (@1.23) [_tG]"

(@〜)の部分はrefractionindexの指定です。この例だとrefractionindex="1.23"となります。
[〜]の部分はtransparency等の変換方法の指定で、括弧内には英数字及び'_'を記入します。
(@〜)や[〜]の中には空白は入れないでください。

各属性の変換制御

diffusion
[〜]中に_がある場合、diffusionは出力しません。
transparency
[〜]中にtがある場合は材質色をそのままtransparency値として書き出します。
[〜]中にTがある場合は材質色を(1-不透明度)倍したものをtransparency値として書き出します。
[〜]中にtもTもない場合は、rgb(1-不透明度, 1-不透明度, 1-不透明度)をtransparency値として書き出します。
emission
RRT[:no_emi_to_emission]がtrueの場合は書き出しを行いません
[〜]中にeがある場合は材質色をそのままemission値として書き出します。
[〜]中にEがある場合は材質色を(自己照明)倍したものをemission値として書き出します。
[〜]中にeもEもない場合は、rgb(自己照明, 自己照明, 自己照明)をemission値として書き出します。
glossiness
RRT[:no_amb_to_glossiness]がtrueの場合は書き出しを行いません
[〜]中にgがある場合は材質色をそのままglossiness値として書き出します。
[〜]中にGがある場合は材質色を(周囲光)倍したものをglossiness値として書き出します。
[〜]中にeもEもない場合は、rgb(周囲光, 周囲光, 周囲光)をglossiness値として書き出します。
reflection
RRT[:no_dif_to_reflection]がtrueの場合は書き出しを行いません
[〜]中にrがある場合は材質色をそのままreflection値として書き出します。
[〜]中にRがある場合は材質色を(1-拡散光)倍したものをreflection値として書き出します。
[〜]中にrもRもない場合は、rgb(1-拡散光, 1-拡散光, 1-拡散光)をreflection値として書き出します。
specularity
RRT[:no_spc_to_specular]がtrueの場合は書き出しを行いません
[〜]中にsがある場合は材質色をそのままspecular値として書き出します。
[〜]中にSがある場合は材質色を(反射光)倍したものをspecular値として書き出します。
[〜]中にsもSもない場合は、rgb(反射光, 反射光, 反射光)をspecular値として書き出します。

光源への変換

mqo2rq2は特殊な名前のオブジェクトを光源に変換します。 各面に割り当てられた材質の色をscale倍した値を光源の色として用います。 材質が割り当てられていない場合には白のscale倍になります。 ちなみに、scaleは省略可能で、その場合は1.0倍とみなします。 また、光源に変換した面はRedqueenの面としては出力しません。

点光源: Point[photon, scale]〜

'Point'と'['の間には空白を入れないで下さい。'['以降は空白を入れてもかまいません。 photonは正整数で、scaleは正数です。 scaleを省略する場合は'Point[5000]〜'のような書き方になります。

オブジェクト内の全ての面と辺を点光源に変換します。 光源の位置は各面(辺)の中心です。

"Point"は"Pnt", "Pt"のように省略できます。

平行光源: Parallel[photon, blur, scale]〜

blurは正数です。 オブジェクト内の全ての三角形面を平行光源に変換します。

図のような三角形ABC(辺AB > 辺BC > 辺CA)があったとき、変換された平行光源はA→Bの向きを照らします。

省略形: Para, Par, Pr

球光源: Sphere[photon, shadowray, scale]〜

shadowrayは正整数です。 オブジェクト内の全ての三角形面を球光源に変換します。 球の中心は図で言うと頂点Aになり、半径は辺ABの長さになります。

省略形: Sphe, Sph, Sp

面光源: Area[photon, shadowray, scale]〜

オブジェクト内の全ての面を面光源に変換します。 辺は変換されません。 面の第1頂点をlocation、第2頂点-第1頂点をvectorv、第3頂点-第2頂点をvectoruに変換します。 (四角形だと第4頂点がありますが、面光源変換においては利用しません。)

省略形: Ar

今後の予定

リクエストがあってそれが実現可能なことであれば追加する可能性はあります。 が、基本的に自分で何とかして下さい。

備考

mqo2rq2.cfgは実のところ生のRubyスクリプトです。 だから、mqo2rq2.cfgの記述でmqo2rq2自体の動作の大部分を書き換えることができます(^^;
最悪 exit なんて書き込んでたらmqo2rq2.cfgを読み込んだだけで終わってしまう(笑。

BlackBoxLaboratory (c)blackbox. All rights reserved.