<< 12/15 >>
MetasequoiaからRenderMan RIB出力
Metasequoiaをシェアウェア登録するとRenderMan RIBが出力できるが
デフォルトでは、カメラ位置は原点から1000離れたところ
distantlightは固定。
材質名がコメントアウトされて出力されたPolygonに割り当てられている。
エディタ使って、Surfaceシェーダを加えれば良い。
カメラ位置もpython scriptでなんとかなる。
問題はPolygonが三角形または四角形でバラバラになっているところである。これはAutoRIBで解決できた。
Polygon "P" [ ]
これをPointsPolygons [ ]に変換するInstructionが、
Objects {
ForNames "uma" {
CombinePolys
}
}
これで変換できました。
さらに、出力したRenderMan RIBをサブディビジョンサーフィスに変換します。
Objects {
ForNames "uma" {
ToSubdivision
}
}
メタセコイアから出力したRenderMan RIBを左手系座標で出したので
下の記事と反対の足が上がっているのがわかります。
課題はありますが、実験して納得するのが一番ですね。
ありがとうございます。
jrManとAutoRIBでRenderManシャドーマップ生成
RenderManの勉強続けています。jrManを使って付属のソースGenCubes.javaから、立方体を生成する。
平面を設けて、distantlightを入れる。シャドーマップ生成はAutoRIBを利用した。
元ファイルは以下の通り、
Display "cubesauto2.tif" "framebuffer" "rgb"
PixelFilter "gaussian" 2 2
Format 800 600 1
PixelSamples 4 4
Exposure 1 2.2
Clipping 10 150
Projection "perspective" "fov" 30
Translate 0 0 75
Rotate -33 1 0 0
Rotate 23 0 1 0
WorldBegin
Declare "shadowmap" "string"
Declare "bias" "uniform float"
Declare "samples" "uniform float"
Declare "blur" "uniform float"
LightSource "distantlight" 1 "intensity" [1.0]
"from" [100 100 100] "to" [0 0 0]
"shadowmap" [""] "bias" [.1]
"samples" [128] "blur" [8]
LightSource "ambientlight" 2 "intensity" [.2]
#LightSource "distantlight" 3 "intensity" .2 "from" [1 0 -1] "to" [0 0 0]
ShadingRate 1
ReadArchive "cubeData10.rib"
AttributeBegin
Attribute "identifier" "name" ["floor"]
Surface "plastic"
Color [1 1 0.7]
Polygon "P" [-100 4 -100 -100 4 100 100 4 100 100 4 -100]
"st" [0 0 0 1 1 1 1 0]
AttributeEnd
WorldEnd
AutoRIBの自動マップ生成のShadowDistAutoを使う。Instruction Fileは以下の通り
Option "zdriver" "file"
Lights
{
ForShaders "light" "distantlight"
{
Omit "floor"
MapFormat 1024 1024
RenameShader "light" "shadowdistantlight"
ShadowDistAuto "shadowmap" 1.1
}
}
AutoRIBで生成したRenderMan RIBは、jrManでそのままレンダリングしようとするとエラーが出てしまう。jitterがつかえない。
#Hider "hidden" "jitter" [0] "depthfilter" "midpoint"コメントアウトする。
Display "cubesauto2_F_L1.z" "file" "z"を
Display "cubesauto2_F_L1.shad" "file" "z"と変更する。
jrManではMakeShadowを使わなくてもよいので、
#MakeShadow "cubesauto2_F_L1.z" "cubesauto2_F_L1.shad"とコメントアウトした。
jrManでレンダリングすると以下のように影の向きも変更できました。
ありがとうございます。
autoRIBのダウンロード先
RenderManのシャドーマップや反射・環境マップを自動生成してくれ、サブディビジョンサーフィスも変換できる便利ツールです。
javaが必要です。JDKをインストールしておく必要があります。
また、ダウンロードしてLhaplusで解凍しましたが、2回解凍しないとファイルが出てきませんでした。
http://sourceforge.net/projects/autorib/
http://sourceforge.jp/projects/sfnet_autorib/
Shrimp
Mac OS X対応 3Dソフト Pixels3D
12年前に国内でも、使っている人が多かったMac 3DソフトウェアPixels3Dは、レンダリング部分はTempestという、REYESをもとに開発されている。RenderMan規格に準拠しているということで、RIBもレンダリングしてくれる。
デモ版を使っていたが、約4000円で購入した。たぶんPoserのレンダラとして使われていたのだと思うが、ここ4年、開発は止まっているようだ、現在はPixels:3d5.6となっている。
RIB出力できるから他のレンダラでも遊べるでしょう。3Delightと組み合わせている記事をみたことがあった。
App Storeで検索したがありませんでした。
http://www.pixels.net/products/
ただいま、ちょっとトップページがおかしくなっているが、ブラウザキャッシュから入って、Storeでライセンスキーを購入し、ダウンロードしたデモ版のKeyXを捨ててキーを登録し直すとインストール完了しました。
ライセンスキーはブラウザに表示されるだけで、メールで送られてこないので、要注意、ページをプリントするかPDFにして控えておくとよいです。
Mac OS XにjrManをインストール
RenderMan互換レンダラのjrManを
ユーザrman下にjrman-0_4フォルダをつくる。
ターミナルでvimを使わないでエディタmiで
.bash_profileを編集する。
以下を書き込む。
export PATH=$PATH:/Users/rman/jrman-0_4/bin
export JRMAN_HOME=/Users/rman/jrman-0_4
設定しなおす。
>:~ rman$ source .bash_profile
>:~ rman$ pwd
/Users/rman
>:~ rman$ cd jrman-0_4/
>:jrman-0_4 rman$ cd model/
サンプルをレンダリングする。
>:model rman$ jrman shadowTest.rib
-bash: /Users/rman/jrman-0_4/bin/jrman: Permission denied
>:model rman$ cd /
>:/ rman$ cd Users/rman/jrman-0_4/bin/
>:bin rman$ ls
jrman jrmangui mktxr
jrman.bat jrmangui.bat mktxr.bat
起動のjrManのパーミッションを確認
>:bin rman$ ls -l jrman
-rw-r--r--@ 1 rman staff 179 2 20 2007 jrman
実行できるように変更する。
>:bin rman$ chmod +x jrman
>:bin rman$ ls -l jrman
-rwxr-xr-x@ 1 rman staff 179 2 20 2007 jrman
>:bin rman$ cd ..
>:jrman-0_4 rman$ cd model/
再びレンダリングしてみる。
>:model rman$ jrman shadowTest.rib
shadowTest.rib time: 0h0m20s
Total time: 0h0m20s
できました。
Bootcampのvistaより速度が1秒速い。
ありがとうございます。
ついったー始める
XRT renderer その2
checkerシェーダーを再コンパイル。立方体にはshinyを割り当てる。
レイトレーシングしています。
#box_check.pyg
Output ("box_check.tif", "tiff", "rgb", "camera", "float gain", 1, "float gamma",
1, "string filter", "gaussian", "float[2] filterwidth", (2, 2))
Attribute ("float shadingquality",1.2)
Attribute ("string projection", "perspective")
Attribute ("float fov", 20)
Attribute ("int[2] resolution", (640, 480))
#placecam 10 5 -10 0 0 0
Rotate (-19.47, 1.00, 0.00, 0.00)
Rotate (45.00, 0.00, 1.00, 0.00)
Translate (-10.00, -5.00, 10.00)
#Attribute ( "int ray:shadows", 0 )
Attribute ("string geometryset", "+shadows")
Attribute ("string geometryset", "+reflection")
World ()
Light ("light1", "pointlight", "float intensity", 400, "point from", (-10, 10, -10),"string shadowname", "shadows")
Light ("light2", "pointlight", "float intensity", 400, "point from", (10, 10, -10),"string shadowname", "shadows")
PushTransform ()
Attribute ("color C", (0.2, 0.4, 0.75))
Sphere (100, -100, 100, 360)
PopTransform ()
for i in range(5):
PushTransform ()
Attribute ("color C", (1, 1, 1))
Shader ( "surface", "shiny", "float Kd", 0, "float Kr", 0.75, "float roughness", 0 )
#Shader ("surface", "plastic")
i=1.2*i
Translate ( 0, 0.5, i-2)
Input ("BoxGeom.rib")
PopTransform ()
Attribute ("color C", (1, 1, 1))
Rotate (90.00, 1.00, 0.00, 0.00)
ShaderGroupBegin ()
Shader ("surface", "checker","float frequency",10,"color blackcolor",(0, 0, 0))
#Shader ("surface", "plastic", "layer2")
#ConnectShaders ("layer1", "Cout", "layer2", "C")
ShaderGroupEnd ()
Input("PlaneGeom.rib")
Render()
ありがとうございます。さらに勉強します。
STANDARD PROCEDURAL DATABASES
STANDARD PROCEDURAL DATABASES
http://tog.acm.org/resources/SPD/
これの実行ファイルを作成するのに試してみました。
以下、Windowsでの作業です。
MinGWをインストールする。
最新バージョンはインストール時にmakeも含まれているようで楽かも。
環境パスも設定します。
さてさて、コンパイルの作業をします。
gccのオプションは以下を参考にしました。
http://www.geocities.jp/woodwood77777/gcc.htm
makefile.dosを以下、書き換え
CC =gcc
CFLAGS =-O2
以下を実行します。
mingw32-make -f makefile.dos
libinf.cの32行目あたりで
"initializer element is not constant" と出て止まったら
変更前 FILE *gOutfile = stdout;
変更後 FILE *gOutfile;
以下を実行します。
mingw32-make -f makefile.dos
mingw/lib/libmingw32.a(main.o):main.c.text+0x104): undefined
reference to `WinMain@16'
エラーメッセージ
このあたり、エラーがでますが、くりかえしてみる。
mingw32-make -f makefile.dos
ちょっとうろ覚え、
CFLAGS =-mx
と変更して
mingw32-make -f makefile.dos
をくりかえしてみる。
以上、コンパイルのみ実行してリンクは後で行う。
以下のようなバッチファイルを作ってしまう。
作成したオブジェクトファイルをリンクさせる。
gcc -o balls.exe balls.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
以下はバッチファイル
gcc -o balls.exe balls.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o gears.exe gears.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o mount.exe mount.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o rings.exe rings.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o teapot.exe teapot.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o tetra.exe tetra.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o tree.exe tree.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o readdxf.exe readdxf.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o readnff.exe readnff.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o readobj.exe readobj.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o sample.exe sample.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o lattice.exe lattice.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o shells.exe shells.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o jacks.exe jacks.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o sombrero.exe sombrero.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o nurbtst.exe nurbtst.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
できあがった実行ファイルがいくつかあります。
balls.exe
gears.exe
jacks.exe
lattice.exe
mount.exe
nurbtst.exe
rings.exe
sample.exe
shells.exe
sombrero.exe
teapot.exe
tetra.exe
tree.exe
balls.exe >balls.nff
でnffを出力します。
後は、XRT rendererでレンダリングしました。
balls.nff
lattice.nff
jacks.nff、これってケッソン先生のところで見たAOしてるブツのオリジナルになるのでしょうか。
いろいろと試してみたくなりました。
ありがとうございます。
Standard Procedural Databasesのmakefile
Standard Procedural Databases のNeutral File Format (NFF) を出力するために、MinGW gccでオプション設定しなおし、ちょっとだけmakefileを理解できました。Windows用の、makefile.dos
です。
mingw32-make -f makefile.dos
でコンパイル、リンクします。
makefile.dos
# Makefile for the SPD stuff - generic for IBM clones,
# modify to support whatever compiler you have.
CC =gcc
#
CFLAGS2 =-o
CFLAGS =-O2
EXE = exe
OBJ = o
# DOS version:
#SPDOBJS = drv_ibm.$(OBJ) libini.$(OBJ) libinf.$(OBJ) libpr1.$(OBJ) libpr2.$(OBJ) libpr3.$(OBJ) libply.$(OBJ) libdmp.$(OBJ) libvec.$(OBJ) libtx.$(OBJ)
# other versions...
SPDOBJS = drv_null.$(OBJ) libini.$(OBJ) libinf.$(OBJ) libpr1.$(OBJ) libpr2.$(OBJ) libpr3.$(OBJ) libply.$(OBJ) libdmp.$(OBJ) libvec.$(OBJ) libtx.$(OBJ)
# Zortech specific graphics library
#LIBFILES=fg.lib
#LIBFILES=fgp.lib
LIBFILES=-lm
all: balls.$(EXE) gears.$(EXE) mount.$(EXE) rings.$(EXE) teapot.$(EXE) \
tetra.$(EXE) tree.$(EXE) \
readdxf.$(EXE) readnff.$(EXE) readobj.$(EXE) \
sample.$(EXE) lattice.$(EXE) shells.$(EXE) jacks.$(EXE) \
sombrero.$(EXE) nurbtst.$(EXE)
# Rule to compile c progs into obj's
.c.$(OBJ):
$(CC) $(CFLAGS) -c $<
# DOS only
#drv_ibm.$(OBJ): drv_ibm.c drv.h def.h
drv_null.$(OBJ): drv_null.c drv.h def.h
libini.$(OBJ): libini.c lib.h libvec.h drv.h
libinf.$(OBJ): libinf.c lib.h libvec.h drv.h
libpr1.$(OBJ): libpr1.c lib.h libvec.h drv.h
libpr2.$(OBJ): libpr2.c lib.h libvec.h drv.h
libpr3.$(OBJ): libpr3.c lib.h libvec.h drv.h
libply.$(OBJ): libply.c lib.h libvec.h drv.h
libdmp.$(OBJ): libdmp.c lib.h libvec.h drv.h
libvec.$(OBJ): libvec.c libvec.h
libtx.$(OBJ): libtx.c lib.h libvec.h drv.h
balls.$(EXE): balls.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) balls.$(EXE) balls.c $(SPDOBJS) $(LIBFILES)
gears.$(EXE): gears.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) gears.$(EXE) gears.c $(SPDOBJS) $(LIBFILES)
mount.$(EXE): mount.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) mount.$(EXE) mount.c $(SPDOBJS) $(LIBFILES)
rings.$(EXE): rings.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) rings.$(EXE) rings.c $(SPDOBJS) $(LIBFILES)
teapot.$(EXE): teapot.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) teapot.$(EXE) teapot.c $(SPDOBJS) $(LIBFILES)
tetra.$(EXE): tetra.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) tetra.$(EXE) tetra.c $(SPDOBJS) $(LIBFILES)
tree.$(EXE): tree.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) tree.$(EXE) tree.c $(SPDOBJS) $(LIBFILES)
readdxf.$(EXE): readdxf.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) readdxf.$(EXE) readdxf.c $(SPDOBJS) $(LIBFILES)
readnff.$(EXE): readnff.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) readnff.$(EXE) readnff.c $(SPDOBJS) $(LIBFILES)
readobj.$(EXE): readobj.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) readobj.$(EXE) readobj.c $(SPDOBJS) $(LIBFILES)
sample.$(EXE): sample.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) sample.$(EXE) sample.c $(SPDOBJS) $(LIBFILES)
lattice.$(EXE): lattice.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) lattice.$(EXE) lattice.c $(SPDOBJS) $(LIBFILES)
shells.$(EXE): shells.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) shells.$(EXE) shells.c $(SPDOBJS) $(LIBFILES)
jacks.$(EXE): jacks.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) jacks.$(EXE) jacks.c $(SPDOBJS) $(LIBFILES)
sombrero.$(EXE): sombrero.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) sombrero.$(EXE) sombrero.c $(SPDOBJS) $(LIBFILES)
nurbtst.$(EXE): nurbtst.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) nurbtst.$(EXE) nurbtst.c $(SPDOBJS) $(LIBFILES)
<< 12/15 >>