RenderManのお勉強


RenderManとは?

Pixar社(http://www.pixar.com)によって仕様が定められ(https://renderman.pixar.com/products/rispec/index....)、その仕様に基づいて開発された3次元形状記述とフォトリアリスティックな画像を生成するするためのAPIやソフトウェアの総称です。この仕様のことを、RenderManインターフェース仕様(RenderMan Interface Specification、略してRISpec)と呼んでいます。
RenderManにおける3次元形状情報は、RISpecに基づき記述されます。これには、RIB(RenderMan Interface Bytestream、リブ)またはC言語が利用されます。さらにshaderと呼ばれる機能を利用することにより、様々な形状や表現を実現することが出来ます。通常、Shaderを利用するためには、Shader言語によってプログラムを作成することになります。

RIBには、物体形状の情報、カメラに関する情報、光源に関する情報などのシーン記述やレンダリング時に利用するshader名やパラメータなどの情報が記述されています。RIBは、RenderMan Interfaceをサポートしているモデラから保存することも出来ますが、適当なエディタを利用して自分でも書くことが出来ます。

RenderMan互換ソフトウェア

一般的には、RenderManと言うとPixar社が開発したシステムを指すことが多いと思いますが、Pixar社の実装以外のも多くのものがあります。
PhotoRealistic RenderMan(http://renderman.pixar.com/products/tools/index.ht...
本家です。PRManと呼ばれることもあります。
3Delight(http://www.3delight.com/
商用のシステムです。評価版をダウンロードできます。
AIR(http://www.sitexgraphics.com/
商用のシステムです。評価版がダウンロードできます。
Angel(http://www.dctsystems.co.uk/RenderMan/angel.html
フリーなシステムだと思います。Essential RenderManの著者Ian Stephensonが開発しているみたいです。
Aqsis(http://www.aqsis.org/
フリーのシステムです。
jrMan(http://www.jrman.org/
Java言語を用いて開発されているオープンソースなシステムです。
Pixie(http://www.cs.utexas.edu/~okan/Pixie/pixie.htm
フリーなシステムです。個人的にはメインで使用中。
RenderDotC(http://www.dotcsw.com/rdc.html
商用のシステムです。
BMRT(Blue Moon Rendering Tools)
RenderMan互換のソフトウェアとして一世を風靡したfreeware。NVIDIA社のGelato(http://www.nvidia.com/page/gz_home.html)の前身と思われます。現在は配布されていません。個人的には初めて触れたRISpecに基づいたシステムでした。

RIBを書いてみる

ここでは、RIBを手書きすることに挑戦しています。通常のエディタで書くことが出来ます。拡張子は.ribとします。
エディタとしてemacsを利用する場合には、ribモード用のemacs lispのプログラムがhttp://rib-mode.sourceforge.net/にあるので、利用すると良いかも知れません。ただし、それほどの機能(インデントとキーワードなどのハイライト表示)は持っていないようですが。

座標系に関するお約束

3次元空間で物体の位置をあらわすためには、x座標の値、y座標の値、z座標の値の3つの数字を利用して指定します。
x座標の値はx軸上の位置を、y座標の値はy軸上の位置を、z座標の値はz軸上の位置を示しています。このときに、x軸、y軸、z軸の組み合わせ方には、左手座標系と右手座標系の2つがあります。この2つの区別は、親指にx軸、人差し指にy軸、中指にz軸を対応させたときに、どちらの手のように座標軸を対応させているかで決めています。
RenderManでは左手座標系を利用しています。


簡単なrib(その1)

# minimal02.rib : minimal rib file
Display "minimal02.tiff" "file" "rgba"
WorldBegin
	Translate 0 0 2
	Sphere 1 -1 1 360
WorldEnd

実行結果



レンダリングするためには

RIBからレンダリング結果を得るためには、レンダラーと呼ばれるソフトウェアを使用します。使用するプログラムによって、コマンド名が異なりますが、
コマンド名 RIBファイル名
のようになります。
例えば、この例題(minimal.rib)をPixieでレンダリングをする場合には、
rndr minimal.rib
となります。この結果、minamal.tiffというファイルに結果が保存されます。

PhotoRealistic RenderMan
prman minimal.rib
3Delight
renderdl minimal.rib
AIR
air minimal.rib
Angel
angel minimal.rib
Aqsis
aqsis minimal.rib
jrMan
jrman minimal.rib
Pixie
rndr minimal.rib
RenderDotC
renderdc minimal.rib

説明

  1. #からその行の最後まではコメントとして扱われます。一応、minimal.ribというファイル名で保存するつもりであることをコメントとして書いています。
  2. Displayでは、結果を保存に関する設定を指定します。最初のパラメータはファイル名、2番目は結果の出力方法、3番目は保存するデータの種類となっています。この例題では、ファイル名"minimal.tiff"の画像ファイルとして("file")結果を保存することにしています。保存されるデータは赤緑青と不透明度("rgba")となっています。2番目のパラメータを"framebuffer"とすると、画面に表示されます。その際のウインドウ名が最初のパラメータで指定した名称となっています。"framebuffer"を指定した場合の挙動は、利用するソフトウェアによって異なること可能性があります。また、"file"や"framebuffer"以外の出力方法を指定できる場合もあります。
  3. WorldBeing・・・WorldEndの中に物体の形や色などの情報を指定します。WorldBeginは、様々な設定が終了し、描画準備を始める必要のあることを示しています。これに対して、WorldEndは3次元形状の設定が終わり、結果を出力する必要があることを示しています。この部分のことをワールドブロックと呼ぶこともあります。物体の情報に関することはワールドブロック内に記述し、それ以外の情報はワールドブロック外で記述します。
  4. Sphereによって形状は球であることを宣言しています。球の中心はオブジェクト座標系の原点となっています。最初のパラメータは球の半径、2番目と3番目のパラメータは球の上部と下部の高さを示しています。最後のパラメータは描画範囲の角度を示しています。
  5. Traslateによって、物体を平行移動させることが出来ます。ここでは、球の中心を(0,0,2)の位置に移動させています。
  6. RIBの中で指定しない項目に関しては、デフォルトの値が使用されます。例えば、カメラは原点にあり、z軸正方向を向いています。また、物体表面色は白となっています。
  7. カメラの位置は原点、向きはz軸正の方向に固定されています。カメラを動かすことと物体全体を動かすことは相対的なので、カメラを動かす代わりに、物体の方を動かします。この例題では、最初のTranslateがそれにあたっています。

簡単なrib(その2)

# minimal.rib : minimal rib file
Display "minimal.tiff" "file" "rgba"
Projection "perspective" 
WorldBegin
	Translate 0 0 2
	Sphere 1 -1 1 360
WorldEnd

実行結果



レンダリングするためには

RIBからレンダリング結果を得るためには、レンダラーと呼ばれるソフトウェアを使用します。使用するプログラムによって、コマンド名が異なりますが、
コマンド名 RIBファイル名
のようになります。
例えば、この例題(minimal.rib)をPixieでレンダリングをする場合には、
rndr minimal.rib
となります。この結果、minamal.tiffというファイルに結果が保存されます。

PhotoRealistic RenderMan
prman minimal.rib
3Delight
renderdl minimal.rib
AIR
air minimal.rib
Angel
angel minimal.rib
Aqsis
aqsis minimal.rib
jrMan
jrman minimal.rib
Pixie
rndr minimal.rib
RenderDotC
renderdc minimal.rib

説明

  1. #からその行の最後まではコメントとして扱われます。一応、minimal.ribというファイル名で保存するつもりであることをコメントとして書いています。
  2. DIsplayでは、結果を保存に関する設定を指定します。最初のパラメータはファイル名、2番目は結果の出力方法、3番目は保存するデータの種類となっています。この例題では、ファイル名"minimal.tiff"の画像ファイルとして("file")結果を保存することにしています。保存されるデータは赤緑青と不透明度("rgba")となっています。2番目のパラメータを"framebuffer"とすると、画面に表示されます。その際のウインドウ名が最初のパラメータで指定した名称となっています。"framebuffer"を指定した場合の挙動は、利用するソフトウェアによって異なること可能性があります。また、"file"や"framebuffer"以外の出力方法を指定できる場合もあります。
  3. Projectionによって、投影方法を指定できます。Projectionで明示的に投影方法を指定しない場合には、平行投影("orthographic")が用いられます。ここでは、透視投影("perspective")を指定しています。投影方法だけを指定しているので、カメラは原点にあり、z軸正方向を向いています。
  4. WorldBeing・・・WorldEndの中に物体の形や色などの情報を指定します。WorldBeginは、様々な設定が終了し、描画準備を始める必要のあることを示しています。これに対して、WorldEndは3次元形状の設定が終わり、結果を出力する必要があることを示しています。この部分のことをワールドブロックと呼ぶこともあります。物体の情報に関することはワールドブロック内に記述し、それ以外の情報はワールドブロック外で記述します。
  5. Sphereによって形状は球であることを宣言しています。球の中心はオブジェクト座標系の原点となっています。最初のパラメータは球の半径、2番目と3番目のパラメータは球の上部と下部の高さを示しています。最後のパラメータは描画範囲の角度を示しています。
  6. Traslateによって、物体を平行移動させることが出来ます。ここでは、球の中心を(0,0,2)の位置に移動させています。
  7. RIBの中で指定しない項目に関しては、デフォルトの値が使用されます。

演習

  1. Transalteで指定している値を変更すると、どのような効果があるか確認してください。変な(?)値を指定すると、球が表示されませんので、びっくりしないで下さい。

画像サイズの変更

ここでは、出力結果の画像のサイズを変更する方法を説明します。
ついでに、Sphereの最後のパラメータも変えてみました。

Formatのサンプル

# format.rib
Display "minimal01.tiff" "file" "rgba"
Projection "perspective" 
Format 320 240 1
WorldBegin
	Translate 0 0 1.5
	Sphere 1 -1 1 200
WorldEnd

実行結果



説明

  1. Formatは、1番目のパラメータで縦方向、2番目のパラメータで横方向の解像度をあらわしています。最後のパラメータは、画素(pixel)の横の長さと縦の長さの比をあらわしています。
  2. "Translate 0 0 1.5"により球(の一部)の中心を(0,0,1.5)に移動させています。
  3. Sphereの最後のパラメータを200にしているので、球の一部が描かれています。このパラメータは、z軸を中心とした角度をあらわしています。

演習

  1. Formatで指定している数値を変更してみて、どのような画像ファイルが作られるかを確認してください。
  2. Sphereの最後のパラメータの値を変更してみて、最後のパラメータの意味を確認してください。

表面色の変更

物体表面色の変更を行います。もっと複雑な指定もできますが、ここでは単純な表面色の変更のみを扱っています。

表面色変更のサンプル

# colro01.rib : color sample
Display "color01.tiff" "file" "rgba"
Projection "perspective" "fov" [75]
WorldBegin
	Color 1 0 0
	Translate 0 0 2
	Sphere 1 -1 1 360
WorldEnd

実行結果



説明

  1. Colorによって、物体表面色の設定を行っています。RGBの値によって色を決めています。"Color [赤の値 緑の値 青の値]"となっています。それぞれの色を表す値は0〜1です。
  2. PRManなどでは、RGB以外の方法で色を指定することが出来るようです。

演習

  1. 球の表面色を色々と変えてみましょう。

視野角の変更

視野角を変更することに、ズームレンズのような効果がうまれます。視野角はProjectionで指定します。

視野角のサンプル

# fov.rib
Display "fov.tiff" "file" "rgba"
Projection "perspective"  "fov" [60]
Format 320 240 1
WorldBegin
	Translate 0 0 2
	Sphere 1 -1 1 360
WorldEnd

実行結果



実行結果


説明

  1. Projectionの「"fov" [角度]」の部分で視野角の指定を行っています。角度で指定できる値は0〜180です。角度の値を小さくすると望遠レンズのようなになり、角度を大きくすると魚眼レンズのようになります。fovは"filed of view"の略です。

演習

  1. 視野角を変更して、描画される形状の変化を確認してください。

円柱の描画

円柱(cylinder)の描画に挑戦してみます。

円柱のサンプル

# cylinder01.rib : rib file for cylinder sample
Display "cylinder01.tiff" "file" "rgba"
Projection "perspective" 
WorldBegin
	Translate 0 0 2
	Cylinder 1 1 -1 360
WorldEnd

実行結果



説明

ちょっと円柱には見えないかもしれませんが、筒をのぞいているというイメージです。

Cylinderの呼び出し
Cylinder radius zmin zmax sweepangle

  1. Cylinderで表される円柱は、xy平面に平行に底面があり、z軸が高さ方向となります。radiusで円柱の半径、zminで一つの底面がくるz座標値(イメージとしては下の底面)をあらわし、zmaxでもう一方の底面がくるz座標値(イメージとしては上の底面、上面?)をあらわし、sweepangleで側面が現れる範囲を指定します。
  2. ”Cylinder ・・・”の前に、"Translate 0 0 2"としているので、この円柱は、z=1(=-1+2)とz=3(=1+2)に底面が出来ています。
  3. カメラはz軸の正の方向を向いているので、円柱の高さ方向がz軸になっているので、筒を覗いているようなイメージの画像が出来上がっています。
  4. Cylinderでは、円柱の両底面は描画されません。

演習

  1. sweepangleを変更して,描画される形状の変化を確認してください。

つづき
Topページに戻る
2008年02月02日(土) 17:12:32 Modified by m_riho

添付ファイル一覧(全10件)
0a828621.jpg (45.21KB)
Uploaded by m_riho 2007年12月31日(月) 15:35:21
86aff922.jpg (41.21KB)
Uploaded by m_riho 2007年12月30日(日) 21:53:40
94160f5c.jpg (42.58KB)
Uploaded by m_riho 2007年12月30日(日) 01:20:19
b8d14402.jpg (45.94KB)
Uploaded by m_riho 2007年12月29日(土) 23:47:56
892d6d6c.jpg (39.76KB)
Uploaded by m_riho 2007年12月29日(土) 22:37:51
1dd435d9.jpg (39.09KB)
Uploaded by m_riho 2007年12月28日(金) 17:36:46
b1aba22a.jpg (34.15KB)
Uploaded by m_riho 2007年12月26日(水) 01:35:27
3a3c9344.jpg (30.98KB)
Uploaded by m_riho 2007年12月25日(火) 09:24:17
3ebf44b1.jpg (37.41KB)
Uploaded by m_riho 2007年12月25日(火) 00:25:38
8f2d3c23.jpg (37.41KB)
Uploaded by m_riho 2007年12月25日(火) 00:21:47



スマートフォン版で見る

×

この広告は60日間更新がないwikiに表示されております。