Rendering学習日記

日々、3DCGの世界は進歩しています。勉強して理解したことをまとめていきます。RenderMan互換レンダラーやグローバル・イルミネーション。いろんなことに好奇心を持って、面白くなる。目指せShader書き!!
ありがとうございます。

面法線と頂点法線 その5

出力したRIBの調整。
場合によっては、コンバータで出力した面が裏向きなっていて、いくらライトのintensityをあげても明るくならなかったり、plasticなどのシェーダを入れておかないといけませんが、記述していないと明るくなりません。裏向きの場合、Scale 1 1 -1とWorldBeginの前に記入してみて実験してみるとわかります。

以下は、メタセコイアから出力した面。plasticシェーダを割り当てているので、ライトが強いとハイライトができます。
##RenderMan RIB-Structure 1.0
version 3.03
Format 512 300 1
PixelSamples 3 3
ShadingRate 1
Display "test_men2.tif" "file" "rgb"
Projection "perspective" "fov" 5.963
ConcatTransform [
0.423401210556 -0.592993260602 -0.684901750458 0
0 0.756010361246 -0.654559648686 0
-0.905942280115 -0.277141347635 -0.320095702145 0
-4.13227435274e-005 5.57033550876e-005 1499.99997798 1
]

WorldBegin
LightSource "ambientlight" 0 "intensity" [ 0.8 ] "lightcolor" [ 1 1 1 ]
LightSource "distantlight" 1 "intensity" [ 3 ] "lightcolor" [ 1 1 1 ] "from" [ -1 1 -1 ] "to" [ 0 0 0 ]
LightSource "distantlight" 2 "intensity" [ 0.8 ] "lightcolor" [ 1 1 1 ] "from" [ 1 1 2.5 ] "to" [ 0 0 0 ]

AttributeBegin
Attribute "identifier" "name" ["obj1"]
Color [1 0 0]
Surface "plastic"
PointsPolygons [ 3 3 3 3 ] [ 0 1 2 0 2 3 4 5 0 4 0 3 ]
"P" [
50 20 0
50 0 -100
-50 0 -100
-50 20 -0
-50 0 100
50 0 100
]
"N" [ 0 1 0
0 0.980581 -0.196116
0 0.980581 -0.196116
0 1 0
0 0.980581 0.196116
0 0.980581 0.196116 ] "st" [ 1 0 1 1 0 1 1 0 0 1 0 0 ]

AttributeEnd

WorldEnd

test_men2.jpg
  • -
  • -

mqo2rib(metared)

b2oxさん開発のRIBエクスポータ、webarchiveで探してダウンロードしました。
メタセコイアをRIBに変換しようとコマンドプロンプトから、打ったらエラー。
>mqo2rib.exe men_test.mqo

"men_test.mqo" is now loading and converting... Format Error at line 13, column 1 in "men_test.mqo".
complete! (Elapsed time: 0.0s)

検索したら、mqoファイル内にマテリアルが設定されていないからということがわかりました。メタセコイアで開いて、材質パネルで新規mat1を設けて上書き保存。こんどはできました。

3Delightでレンダリングしました。
mqo2rib.cfgをエディタで開き、コメントアウトを外す
RIB[:Renderer] = '3Delight'

付属のシェーダdistantlight2.slは、
shaderdl distantlight2.sl
でコンパイルしておきます。

レンダリングすると、下記のエラー
3DL ERROR P1107: [.../men_test.rib:27]: user p
arameter 'shadowname' has an unknown type

タイプを記述しておきました。
typeはshaderinfoでしらべるとわかります。

LightSource "distantlight2" 1
"uniform string shadowname" ["raytrace"]
"from" [0.236593 1.226111 -0.110574]
"uniform float shadowpower" [0.5]
"to" [0.000000 0.000000 0.000000]
"lightcolor" [1.000 1.000 1.000]
"uniform float blur" [0.03]
"uniform float samples" [10]

後、法線の計算で8点計算されて出力されました。
3DL WARNING P1104: [men_test_mdl.rib:13]:
array of 'normal's has wrong size, expected 18 'normal'(s), but given 24

"N" [0.000000 1.000000 -0.000000
0.000000 1.000000 -0.000000
0.000000 0.980581 -0.196116
0.000000 0.980581 -0.196116
0.000000 1.000000 -0.000000
0.000000 0.980581 0.196116
0.000000 0.980581 0.196116
0.000000 1.000000 -0.000000]

5行目
0.000000 1.000000 -0.000000
と8行目
0.000000 1.000000 -0.000000
を削除した。

レンダリングでエラーが出なくなった。

mqo2rib使ってみます。
ありがとうございます。
men_test.jpg
  • -
  • -

MetasequoiaとPython 面情報

サンプルのobj出力を元に、選択したオブジェクトの面情報を出力できるように工夫してみました。あまり、きれいではありませんが、面白いです。ありがとうございます。

#face_index3.py
doc=MQSystem.getDocument()
out=MQSystem.println

obj=doc.object[doc.currentObjectIndex]
out(str(obj.name))

count=obj.numFace
out("面の数:"+str(count))
ten=[]
for k in range(0,obj.numVertex):
out(str(obj.vertex[k].pos.x)+","+str(obj.vertex[k].pos.y)+","+str(obj.vertex[k].pos.z))
ten.append((obj.vertex[k].pos.x,obj.vertex[k].pos.y,obj.vertex[k].pos.z))

for i in range(0,count):
out("面のindex:"+str(obj.getFaceIndexFromUniqueID(i+1)))
out("頂点数"+str(str(obj.face[i].numVertex)))
for j in range(0,obj.face[i].numVertex):
out(str(obj.face[i].index[j])+":"+str(ten[obj.face[i].index[j]]))


■出力情報
plane_-1
面の数:2
-50.0,0.0,-100.0
50.0,0.0,-100.0
50.0,0.0,0.0
-50.0,0.0,0.0
-50.0,0.0,100.0
50.0,0.0,100.0
面のindex:0
頂点数4
0:(-50.0, 0.0, -100.0)
1:(50.0, 0.0, -100.0)
2:(50.0, 0.0, 0.0)
3:(-50.0, 0.0, 0.0)
面のindex:1
頂点数4
2:(50.0, 0.0, 0.0)
5:(50.0, 0.0, 100.0)
4:(-50.0, 0.0, 100.0)
3:(-50.0, 0.0, 0.0)
  • -
  • -
<< 97/184 >>