<< 1〜20まで重複しない乱数表示 その3 戻る 「実践CGへの誘い」例題をPythonで行う その1 >>

PythonからRenderManを使う その1

RenderManはC APIで記述されているが、cgkitと3Delightを使えば、次のように球体を表示、レンダリングできます。
本来ならば、C言語を使ってコンパイルしてやりますが、Python良いですね。便利です。

以下はcgkitを使って3Delightで直接レンダリングしました。3DelightのLibフォルダの3Delight.libが働いてくれます。


#min.py
import cgkit.cri

ri = cgkit.cri.loadRI("3Delight")
cgkit.cri.importRINames(ri, globals())

RiBegin(RI_NULL)
RiDisplay("min.tif", RI_FRAMEBUFFER, RI_RGB)
RiProjection(RI_PERSPECTIVE)
RiTranslate(0,0,1.5)
RiWorldBegin()
RiLightSource("ambientlight","intensity",0.4)
RiLightSource("distantlight")
RiSurface("plastic")
RiColor((1,0.2,0.2))
RiSphere(1,-1,1,360)
RiWorldEnd()
RiEnd()



ri = cgkit.cri.loadRI("3Delight")の部分を
オープンソースRenderMan互換レンダラのAqsis Renderer1.6を使用するならば、


ri = cgkit.cri.loadRI("aqsis_ri2rib")


コマンドプロンプトから、
>min.py
と打ち込むと、RIBが生成されて表示されるだけです。
なので、パイプを使います。こんな感じ・・
>min.py |aqsis

prmanの場合も、cgkitを使う場合は、
ri = cgkit.cri.loadRI("libprman")
>min.py |prman
となります。直接レンダリングではないので、
RenderManProServer-14からついているimport prmanを利用します。


# set PYTHONPATH=C:\Python25;C:\Python\Scripts;%RMANTREE%\bin
#min_pr.py
import prman
ri=prman.Ri()
rendertarget="min_pr.rib"
ri.Begin(ri.RENDER)
ri.Imager("background", {"color color":(.2,.4,.6)})
ri.Display("min_pr.tif", "framebuffer", "rgb")
ri.Format(640,480,1)
ri.Projection(ri.PERSPECTIVE, {ri.FOV: 90})
ri.Translate(0,0,1.5)
ri.WorldBegin()
ri.LightSource("distantlight", {ri.HANDLEID: "1"})
ri.LightSource("ambientlight", {ri.HANDLEID: "2", "intensity":[0.4]})
ri.Color((1,0.2,0.2))
ri.Surface("plastic")
ri.Sphere(1,-1,1,360)
ri.WorldEnd()
ri.End()


>min.pyと打ち込む前に
>set PYTHONPATH=C:\Python25;C:\Python\Scripts;%RMANTREE%\bin
でパスを通しておきます。
以下はレンダリング結果。
min_pr.jpg
  • -
  • -

<< 1〜20まで重複しない乱数表示 その3 戻る 「実践CGへの誘い」例題をPythonで行う その1 >>