オープンソースのStructure SynthからRenderMan RIBを出せるようにちょっとやってみた。
http://structuresynth.sourceforge.net/
市松模様づくり参考に試してみました。
http://kyle-in-jp.blogspot.com/2009/07/structure-synth_10.html
RenderMan RIBも出力できるようにテンプレート調整してみた。
こちらの記事も参考にしてみた。
http://shin-ishimaru.cocolog-nifty.com/blog/2009/03/structure-syn-1.html
地面のレンダリングがずれてしまうので、RIBのTransformをいじってみた。
TransformBegin
Translate 0 -1 0
Scale 300 1 300
#ConcatTransform[ 300 0 0 0 0 1 0 0 0 0 300 0 -149.5 -1 -149.5 1]
ObjectInstance "box"
TransformEnd
RenderMan24.4でレンダリングしました。
ライトは4つ。
Light "PxrRectLight" "light4" "color lightColor" [1 1 1] "float intensity" [3] "float exposure" [0.5] "int traceLightPaths" [1]
デフォルトのデータは、こんな感じ
ということで、カメラ周りは逆行列を求めないといけないので、
python cgkitを使って、ConcatTransformを求めてみました。
以下は、テンプレート抜粋
#placecam.py {CamPosX} {CamPosY} {CamPosZ} {CamTargetX} {CamTargetY} {CamTargetZ}
#up {CamUpX} {CamUpY} {CamUpZ}
# cgkit commandline
# V=mat4(1).lookAt(pos=({CamPosX}, {CamPosY}, {CamPosZ}),target=({CamTargetX}, {CamTargetY}, {CamTargetZ}),up=({CamUpX}, {CamUpY}, {CamUpZ}))
# vt=(V.inverse()).transpose()
# fov {fov}
Scale -1 1 1
ConcatTransform [{CamColumnMatrix}]
ConcatTransform [{CamColumnMatrix}]部分は逆行列にしないとダメなんで、Structure SynthからExportした後、
以下python2.7のインタラクティブモードで、
from cgkit.all import *
V=mat4(1).lookAt(pos=(7.83552, 12.4411, 18.2554),target=(7.92488, -46.149, -34.0976),up=(-0.170831, 0.656364, -0.734849))
vt=V.inverse()
print("ConcatTransform ["+'{:.6f}'.format(vt[0][0])+' '+'{:.6f}'.format(vt[1][0])+' '+'{:.6f}'.format(vt[2][0])+' '+'{:.6f}'.format(vt[3][0])+' '+'{:.6f}'.format(vt[0][1])+' '+'{:.6f}'.format(vt[1][1])+' '+'{:.6f}'.format(vt[2][1])+' '+'{:.6f}'.format(vt[3][1])+' '+'{:.6f}'.format(vt[0][2])+' '+'{:.6f}'.format(vt[1][2])+' '+'{:.6f}'.format(vt[2][2])+' '+'{:.6f}'.format(vt[3][2])+' '+'{:.6f}'.format(vt[0][3])+' '+'{:.6f}'.format(vt[1][3])+' '+'{:.6f}'.format(vt[2][3])+' '+'{:.6f}'.format(vt[3][3])+' '+"]")
求めてみた。
以前、出力の順番を間違えていたので修正しました。ありがとうございます。
Structure Synthのtriangleは、templateでの出力には、対応していない。
triangleを使って、pyramidを作る。x軸周りに-90回転、y軸方向に8倍したruleを定義。
// Write EisenScript code here...
rule pyramid {
triangle[0,0,0;1,0,0;0.5,0.5,0.5]
triangle[1,0,0;1,1,0;0.5,0.5,0.5]
triangle[1,1,0;0,1,0;0.5,0.5,0.5]
triangle[0,1,0;0,0,0;0.5,0.5,0.5]
}
rule p2 { { y 4 s 3 8 3 rx -90 color green} pyramid
}
p2
5 * { x 5 }p2
{y -1 s 100 1 100 color white }box
template出力した。RIBを編集する。
いろいろ、工夫次第です。
ObjectBegin "bbox"
Polygon "P" [0 0 0 1 0 0 0.5 0.5 0.5]
Polygon "P" [1 0 0 1 1 0 0.5 0.5 0.5]
Polygon "P" [1 1 0 0 1 0 0.5 0.5 0.5]
Polygon "P" [0 1 0 0 0 0 0.5 0.5 0.5]
ObjectEnd
Bxdf "PxrDisney" "obj1_mat1" "color baseColor" [0.1 0.4 0.6]
TransformBegin
ConcatTransform[ 3 0 0 0 0 0 -3 0 0 8 0 0 19 0.5 18 1]
ObjectInstance "bbox"
TransformEnd
ありがとうございます。
prmanからの出力、4つのPxrRectLight使用。
Structure Synth and RenderMan24.3
Windows only.
it works under Windows11.
Thank you.
C:\xrt-2.5.0>set PYTHONPATH=;C:\xrt-2.5.0\\bin
C:\xrt-2.5.0>set OIIO_LIBRARY_PATH=C:\xrt-2.5.0\\plugins
C:\xrt-2.5.0>set RENDERER=xrt
C:\xrt-2.5.0>set COMPILER=oslc
C:\xrt-2.5.0>set TEXER=maketx
C:\xrt-2.5.0>set LIB=;C:\xrt-2.5.0\\lib
C:\xrt-2.5.0>set LIBRI=libri
C:\xrt-2.5.0>set INCLUDE=;C:\xrt-2.5.0\\include
C:\xrt-2.5.0>set SHADEREXT=osl
C:\xrt-2.5.0>set COMPILEEXT=oso
C:\xrt-2.5.0>set IMAGEEXT=png
C:\xrt-2.5.0>if AMD64 == x86 (call "C:\Program Files\Microsoft Visual Studio 10.0\VC\bin"\vcvars32.bat ) else (call "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin"\vcvars32.bat )
C:\xrt-2.5.0>"C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat"
Setting environment for using Microsoft Visual Studio 2008 x86 tools.
サイトにはつながりにくい。
pygとpythonは、32bitかな?
ImportError: DLL load failed while importing _ribclient: %1 は有効な Win32 アプリケーションではありません。
エラー解決。Python2.7.16の32bitをインストールし、pythonpathを
xrt.batを書き換えたら、python周りは動きました。
set XRT_HOME=%~dp0
set PATH=%XRT_HOME%\bin;c:\python27_32;%PATH%
set PYTHONPATH=c:\python27_32;%XRT_HOME%\bin
以下、過去記事
■2011年3月5日の記事
Structure Synthについて検索していたら、
レイトレーシング・レンダラのXRT Rendererを見つけた。
ダウンロードサイトはこちら
http://xrt.wikidot.com/
Windows Only
インストールに必要なものは、解凍ソフトの7-zip
解凍したら、C:\xrt1.0を環境変数のPathに追加しておく。
次に、Microsoft Visual Studio 10.0 Visual C++ Expressをダウンロードし、インストールしてしまう。
xrt1.0フォルダにある。xrt.bat内の最後の行を以下に書き換える。
call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin"\vcvars32.bat
Python2.6.6をインストールしておく。Python2.5との共存はちょっとわからないので、2.5はアンインストールした。
XRT rendererのサイトからexampleもダウンロードしてxrt1.0フォルダに入れておく。
さて、実行方法は、コマンドプロンプトから、
C:\xrt1.0>xrt.bat
C:\xrt1.0>set RENDERER=xrt
C:\xrt1.0>set COMPILER=slc
C:\xrt1.0>set TEXER=maketx
C:\xrt1.0>set LIB=;C:\xrt1.0\\lib
C:\xrt1.0>set LIBRI=libri
C:\xrt1.0>set INCLUDE=;C:\xrt1.0\\include
C:\xrt1.0>set COMPILEEXT=shader.dll
C:\xrt1.0>set IMAGEEXT=png
C:\xrt1.0>call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin"\vcva
rs32.bat
Setting environment for using Microsoft Visual Studio 2010 x86 tools.
続いてexampleフォルダに行き、
C:\xrt1.0\examples\quadrics>make.bat compile
metal01.cpp
ライブラリ .\metal01.shader.lib とオブジェクト .\metal01.shader.exp を作成中
コード生成しています。
コード生成が終了しました。
.\metal01.shader.dll generated !
シェーダを再コンパイルします。
レンダリングは、
C:\xrt1.0\examples\quadrics>make.bat render
フォルダ内のRIBはすべてレンダリングします。
make.bat cleanでフォルダ内の中間ファイルやレンダリング画像を削除してくれます。要は全部バッチファイル内に記述されています。
nVidia GelatoのPygファイルは、QuadroFXなどのカードがなくても、
XRT Rendererがレンダリングしてくれます。
RenderMan RIBでは、Aqsis,BMRT,jrManのサンプルファイルをレンダリングします。
そのほか、Standard Procedural Databases のNeutral File Format (NFF) もレンダリングします。
あと、Structure Synthでつくったモデルをpygで出力するエクスポータが付属しています。Structure Synthのmiscフォルダに入れておくとよいですが、Lookatモジュールが見当たらないということで、動いていません。
要検討です。
簡単なpygファイルもレンダリングしました。
spotlightシェーダも影を出すスクリプトをコンパイルしてからレンダリングしたら、きちんと影がでます。
今のところレンダリングは遅いです。マルチスレッド対応してません。
今後に期待したいところです。
シーン記述言語を学ぶ学習ツールとしてはまったりと最適かな、と思います。
ありがとうございます。