<< 3/4 >>

AutoRIB

RenderManを使っていく中で、シャドーマップ生成は手作業ではとても面倒で敬遠されてしまうところですが、RibFilterを使って自動生成してみました。
既にRibFilterは開発続いていないし、MacOS8.6でしか作動しない。RIBを編集してくれるツールがないかSourceForge探していたら、ありました!!
AutoRIB。
AutoRIBは、シャドーマップや環境マップの生成ができるし、他にできることがあるようで、サンプル見ながら、練習ですね。特定のOSに依存しないようにjavaで作られている。jrManと組み合わせれば、フリーでRenderManここまでできるかなってことにならないでしょうか。

ダウンロードしたバイナリautorib_0.81_bin.gzを解凍します。2回解凍したら、autorib.jarやマニュアルが出てきます。
java -jar autorib.jar test.ist test.rib
とやって
prman test_.rib
とやると、
PixelSamples 4 4とあげましたが、
test.jpg


shadowpointでの計算
shadowpoint.jpg

RibFilterで使っていたRIBも、整理してきちんと出力しました。
cone9.jpg

これは面白いですね。RenderManの勉強になります。
開発者peter quintさんは、AutoRIBの他に、mentalrayのコンバータ、shader開発をされてますね。
ありがとうございます。
  • -
  • -

AutoRIB その2

AutoRIBから出力されたRenderManのRIBには、
前の記事のコーンの影が離れていた。

Option "shadow" "bias0" [0.15] "bias1" [0.15]

を追加した。

cone9bias0.15.jpg

shadowspotもデフォルトのものにし、widthを上げた。
LightSource "shadowspot" 1 "from" [ -1 1 0 ] "to" [ -0.292893 0.292893
0 ] "intensity" [ 1 ] "coneangle" [ 1.0472 ] "conedeltaangle" [ 0.174533
] "width" [4] "float samples" [32] "shadowname" [ "cone9_F_L1.shad" ]

くりかえしRenderManの勉強します。
  • -
  • -

AutoRIB サンプル

RenderManを使いこなすための勉強になります。
AutoRIBのサンプルをいくつかやってみました。

Distantlightの自動影生成
shadowdistauto.jpg

色を変更する
forcolors.jpg

反射マップの設定、映り込み
reflmap.jpg

ちょっと力業、ambient occulusion
lightdome.jpg

課題はたくさんありますね。ありがとうございます。
  • -
  • -

AutoRIB その3

サンプルにあるlightdomeいろいろと試してみた。
RenderMan 元になるRIBに、レイトレーシング関連のAttributeを
たとえば、
Attribute "visibility" "int diffuse" 1 # make objects visible to rays
Attribute "visibility" "int specular" 1 # make objects visible to rays
Attribute "trace" "bias" 0.005

と。加えておくと、出力したAutoRIBでは各オブジェクトのAttributeブロックに書き込まれていた。これは、コメントアウトしたり調整すれば良い。
lightdome128.jpg


以下はレイトレーシングを使わないで疑似AOのInstruction Fileです。
36個のshadowspotを加えています。明るさを調整し、
LightSource "ambientlight" 1 "intensity" [0.01 ] "lightcolor" [0.85098 1 1]と影響を与えないように暗めにしました。

Option "depthfilter" "midpoint"
Option "convertshadows" 0
Option "zdriver" "shadow"

LightDome 33 [0 0 1] "shadowspot" 1000 1
Objects {
Surface "*" "plastic"
}
Lights
{
ForShaders "light" "shadowspot"
{
Omit "floor"
MapFormat 512 512
AppendParam "light" "intensity" [ 220 ] "uniform float"
AppendParam "light" "width" [ 8 ] "uniform float" //introduce a bit of softness
AppendParam "light" "samples" [16] "uniform float"
ShadowSpot "shadowname"
}
}


lightdome36.jpg

まだまだ実験する必要がありますが、
AutoRIBのlightdome機能いろいろと使っていきたいところです。
ありがとうございます。RenderMan面白い。
  • -
  • -

AutoRIB その4

RibFilterでやってみたサンプルをAutoRIBで試してみた。段取りさえよければうまくいきます。
kyu_ref_c.jpg
元となるRnderMan RIB

#kyu_ref.rib
Display "kyu_ref.tif" "framebuffer" "rgb"
Projection "perspective" "fov" 20
Format 480 360 1
Imager "background" "color background" [0.2 0.4 0.6]
# 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

WorldBegin
LightSource "ambientlight" 1 "intensity" [0.1]
Declare "intensity" "uniform float"
Declare "from" "uniform point"
Declare "shadows" "string"
Attribute "light" "shadows" ["off"]
LightSource "pointlight" 2 "from" [ 10 10 -10] "intensity" [250.0]
LightSource "pointlight" 3 "from" [ -10 10 -10] "intensity" [250.0]

AttributeBegin
Attribute "identifier" "name" ["dome"]
Color [0.2773 0.2855 0.6679]
Opacity [1 1 1]
Surface "matte"
Sphere 40 -40 40 360
AttributeEnd

AttributeBegin
Attribute "identifier" "name" ["kyu1"]
Translate 0 0 0
Color [0.921875 0.796875 0.91796875]
Surface "shinymetal" "string texturename" [""]
Sphere 1 -1 1 360
AttributeEnd


AttributeBegin
Translate 3 0 0
Color [1 1 0]
Surface "plastic"
Sphere 0.8 -1 1 360
AttributeEnd

AttributeBegin
Attribute "identifier" "name" ["kyu2"]
Translate 0 0 3
Color [0.9 0.7 0.4]
Surface "shinymetal" "string texturename" [""]
Sphere 1 -1 1 360
AttributeEnd

AttributeBegin
Translate 0 0 0
Surface "plastic"

Color [0 0 1] #blue
Cylinder 0.1 -100 100 360 # Z axis

Color [0 1 0] #green
Rotate 90 1 0 0
Cylinder 0.1 -100 100 360 # Y axis

Color [1 0 0] #red
Rotate 90 0 1 0
Cylinder 0.1 -100 100 360 # X axis
AttributeEnd

AttributeBegin
Color [1 1 1]
Translate 0 -1.5 0
Scale 5 5 5
Surface "matte"
Polygon "P" [-4 0 -4 -4 0 4 4 0 4 4 0 -4] "st" [0 0 0 1 1 1 1 0]
AttributeEnd

WorldEnd


試してみたInstruction File

Option "envmapfov" 92
Objects
{
ForNames "kyu1"
{
MapFormat 512 512
MapSamples 4 4
MapFilter "gaussian" 2 2
EnvMap [0.666667 0.333333 -0.666667 ] "surface" "texturename"
}
}

Objects
{
ForNames "kyu2"
{
MapFormat 512 512
MapSamples 4 4
MapFilter "gaussian" 2 2
EnvMap [0.666667 0.333333 2.333333 ] "surface" "texturename"
}
}

Lights
{
ForShaders "light" "pointlight"
{
MapFormat 1024 1024
RenameShader "light" "shadowpoint"
AppendParam "light" "width" [16] "uniform float" //introduce a bit of softness
AppendParam "light" "samples" [256] "uniform float"
ShadowPoint "sfnx" "sfpx" "sfny" "sfpy" "sfnz" "sfpz"
}
}



RenderManくりかえしくりかえし、勉強ですね。ありがとうございます。
上の画像はきれいに出力するために
PixelSamples 4 4
ShadingRate 0.25
を付け加えた。感謝しています。

環境マップ生成の際の中心位置はそれぞれ少しずらしている。
EnvMap [0.666667 0.333333 -0.666667 ]

以前の記事で書いた
python cgkitを使って
単位ベクトルを求めいる。
>>> from cgkit.all import *
>>> v=vec3(-10,-5,10)
>>> v.normalize()
(-0.666667, -0.333333, 0.666667)

符号は逆にした。

EnvMap [0.666667 0.333333 2.333333 ]
こちらは(0 0 3)に(0.666667 0.333333 -0.666667)を加えた。
  • -
  • -

AutoRIB その5

AutoRIBは、RenderManのRIBファイルに、環境マップとシャドーマップを自動生成してくれる便利ツールです。

RibFilterでやってみたRIBも、さくっと変換してくれました。
以下はInstruction File

Option "envmapfov" 92

GlobalRIB //this RIB will be added before the first frame
{
PixelSamples 4 4
ShadingRate 0.25
}

Objects
{
ForNames "_EV_n1_s1.0"
{
MapFormat 512 512
MapSamples 4 4
MapFilter "gaussian" 2 2
EnvMap [0 1 0 ] "surface" "texturename"
}
}

Lights
{
ForShaders "light" "pointlight"
{
MapFormat 1024 1024
RenameShader "light" "shadowpoint"
AppendParam "light" "width" [16] "uniform float"
AppendParam "light" "samples" [256] "uniform float"
ShadowPoint "sfnx" "sfpx" "sfny" "sfpy" "sfnz" "sfpz"
}
}


sphere_env8.jpg
いろいろとできてくると楽しくなります。RenderManありがとうございます。
  • -
  • -

AutoRIB その6

RenderManにおいて、カメラ位置視点
placecam 0 2 -10 0 1 0から見た反射マップを生成するために
まず、cgkitで計算
>>> from cgkit.all import *
>>> v=vec3(0,2,-10)-vec3(0,1,0)
>>> v
(0, 1, -10)
>>> v.normalize()
(0, 0.0995037, -0.995037)
>>> _+vec3(0,1,0)
(0, 1.0995, -0.995037)

AutoRIBのInstruction Fileを書き換え、ちょっとずらしてみた。
EnvMap [0 1.0995 -0.995037 ] "surface" "texturename"

前回の記事の画像よりはきちんと映り込んでいます。
RenderManまだまだ勉強です。ありがとうございます。
sphere_env82.jpg
  • -
  • -

AutoRIB その7

AutoRIBには、RenderManの技術の一つサブディビジョンサーフィスのSubdivisionMesh "catmull-clark"に変換してくれる機能がある。
Instruction Fileに一言
Objects {
ForNames "uma" {
ToSubdivision
}
}
と、記入しておけばよい。

基本Polygon "P"は変換できない。PointsPolygonに変換しておかなければならない。今回は、Meatasequoia PythonでRIB出力変換するツールで出してみた。

PointsPolygonを含み、各モデルにシェーダを割り当て、distantlightを入れておく、普通にprmanでレンダリングするとこんな感じになる。
uma_scn0.jpg
次に以下のファイルを使ってAutoRIBで変換する。
>
//Tests ToSubdivision instruction
Objects {
ForNames "uma" {
ToSubdivision
}
}

Objects
{
ForNames "uma"
{
//Omit "mirror"
MapSamples 3 3
MapFilter "gaussian" 2 2
MapFormat 256 256
EnvMapAuto "surface" "texturename"
}
}


Lights
{
ForShaders "light" "distantlight"
{
MapFormat 1024 1024
RenameShader "light" "shadowdistant"
//AppendParam "light" "blur" [ 0.005 ] "uniform float" //introduce a bit of softness
ShadowDistAuto "shadowname" 1
}
}



RenderManでレンダリングした。空の代わりに球体をつくりTexturing & Moderingで有名なシェーダDPCloudplaneをつけた。
uma_scn.jpg
いろいろとやってみると面白いですね。レイトレーシングを使わなくてもここまできれいにできるとうれしいです。
何より計算速いです。ありがとうございます。
  • -
  • -

AutoRIB その8

shadowdistantを含む、RenderMan RIB出力する際、
AutoRIBエラー表示でわかったこと。
java.lang.NullPointerException
java.lang.NullPointerException
at org.pqt.autorib.instr.InstrShadowDistAuto.process(InstrShadowDistAuto.java:81)
at org.pqt.autorib.instr.InstrBlockRequest.process(InstrBlockRequest.java:92)
at org.pqt.autorib.instr.InstrBlockRequest.process(InstrBlockRequest.java:92)
at org.pqt.autorib.instr.InstrWReader.process(InstrWReader.java:710)
at org.pqt.autorib.ProcessRIB.doProcessRIB(ProcessRIB.java:365)
at org.pqt.autorib.AutoRIBmain.main(AutoRIBmain.java:351)

RenderMan RIBに
Format 640 480 1
を記述していないと自動的にShadowDistAutoが働かないようです。
ひとつひとつ確認ですね。ありがとうございます。
  • -
  • -

AutoRIB その9 RenderMan RIB調整

RenderManのRIBファイルをAutoRIBで読み込んでエラーが出ないように
RIBファイルを調整しておく必要がある。

Colorは [1 1 1]と[ ]をつけておくこと。

"uniform float fov"は"fov"にすること。

Geometry "teapot"は使えないので、
ReadArchive "teapot.rib"を使います。

Formatは書き込んでおくこと。
  • -
  • -

<< 3/4 >>