1/4 >>
RIB出力検証
メタセコイアPythonを使ってRIB出力ができるスクリプトができた。
視野変換では、ConcatTransformを求めた。
uvマップはきちんと出るようにした。右手系での出力になります。
以下はRIB出力。レンダリングは3Delightを使用しました。レイトレーシング設定しています。
##Renderman RIB-Structure 1.0
Display "men.tif" "file" "rgba"
Display "+men.tif" "framebuffer" "rgba"
Format 640 480 1
PixelSamples 4 4
PixelFilter "catmull-rom" 3 3
ShadingRate 1
Imager "background" "background" [0.200 0.400 0.600]
Sides 1
Orientation "rh"
Projection "perspective" "fov" [9.527]
ConcatTransform [
0.586877119816 -0.615504654203 -0.526050631489 0
0 0.649705095569 -0.760186351359 0
-0.809676013129 -0.446135976409 -0.381297055217 0
-14.6153686718 -5.38463034481 1500.00000696 1
]
Scale 1 1 -1
WorldBegin
Attribute "visibility" "trace" [1]
Attribute "visibility" "transmission" ["Os"]
Attribute "visibility" "transmission" "opaque"
Attribute "light" "shadows" "on"
Attribute "trace" "displacements" [1]
LightSource "ambientlight" 0 "intensity" [ 0.1 ] "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" [ 3 ] "lightcolor" [ 1 1 1 ] "from" [ 1 1 2.5 ] "to" [ 0 0 0 ]
ReadArchive "men_uv_model2.rib"
WorldEnd
MakeTexture "grade.tif" "grade.tdl" "periodic" "periodic" "gaussian" 1 1
Surface "supertexmap" "string Csmapname" "grade.tdl"
AttributeBegin
Attribute "identifier" "name" ["obj1"]
Declare "st" "facevarying float[2]"
Scale 1 1 -1
PointsPolygons
[ 3 3 3 3 ][ 1 3 2 1 2 0 4 5 1 4 1 0 ]
"P" [-50.0 20.0 0.0
50.0 20.0 0.0
-50.0 0.0 100.0
50.0 0.0 100.0
-50.0 0.0 -100.0
50.0 0.0 -100.0
]
"N" [-0.0 1.0 0.0
-0.0 1.0 0.0
0.0 0.980580675691 0.196116135138
0.0 0.980580675691 0.196116135138
-0.0 0.980580675691 -0.196116135138
-0.0 0.980580675691 -0.196116135138
]
"st" [0.995700001717 0.494610011578
0.995700001717 0.975380003452
0.514930009842 0.975380003452
0.993009984493 0.489219993353
0.512239992619 0.96999001503
0.512239992619 0.489219993353
0.520319998264 0.000369999994291
1.00109004974 0.000369999994291
1.00109004974 0.481139987707
0.520319998264 0.00576000008732
1.00109004974 0.486530005932
0.520319998264 0.486530005932 ]
AttributeEnd
RIB出力検証その2
metasequoia pythonを使って、メタセコイアからモデルをRIB出力するプログラムを検証した。あれれ、面の向きがちょっと違いました。
モデルの部分、
AttributeBeginの後に
Scale 1 1 -1
を加えました。
以下は、RIB出力です。レンダリングは3Delightを使用しました。
Display "maptest.tif" "file" "rgba"
Format 640 480 1
PixelSamples 2 2
PixelFilter "catmull-rom" 3 3
ShadingRate 1
MakeTexture "uvmap.tif" "uvmap.tdl" "periodic" "periodic" "gaussian" 1 1
Imager "background" "background" [0.2 0.4 0.6]
Sides 1
Orientation "rh"
Projection "perspective" "fov" [9.527]
ConcatTransform [
0.742768750199 -0.412412747762 -0.527456452431 0
0 0.787779841733 -0.615956914857 0
-0.669548044376 -0.457513547825 -0.585138248476 0
6.36650111119e-006 2.36958414916e-005 1500.00001648 1
]
Scale 1 1 -1
WorldBegin
Attribute "visibility" "trace" [1]
Attribute "visibility" "transmission" ["Os"]
Attribute "visibility" "transmission" "opaque"
Attribute "light" "shadows" "on"
LightSource "distantlight" 1
"from" [0.205154 1.226111 -0.161600]
"to" [0.000000 0.000000 0.000000]
"lightcolor" [0.800 0.800 0.800]
LightSource "ambientlight" 2
"lightcolor" [0.300 0.300 0.300]
AttributeBegin
Scale 1 1 -1
Surface "supertexmap" "string Csmapname" "uvmap.tdl"
Declare "st" "facevarying float[2]"
Attribute "identifier" "name" ["obj1"]
PointsPolygons
[ 4 ][ 0 1 3 2 ]
"P" [-100.0 0.0 -100.0
100.0 0.0 -100.0
-100.0 0.0 100.0
100.0 0.0 100.0
]
"N" [-0.0 1.0 -0.0
-0.0 1.0 -0.0
0.0 1.0 0.0
-0.0 1.0 -0.0
]
"st" [0.0 0.0 1.0 0.0 1.0 1.0 0.0 1.0 ]
AttributeEnd
WorldEnd
RIB出力検証その3
ということで、メタセコイアのサンプルモデルmekaをRIB出力。metasequoia pythonを使って視野変換してConcatTransformを求める。
エディタ使って、以下のように書きました。3Delightでレンダリングできるように設定してあります。レイトレーシング設定で影もでます。
ここまでくる道のりは長かった。できるとうれしいです。
ありがとうございます。わくわくしてきた。楽しいね。
以下はRIBです。長すぎですので、下からダウンロードして3Delightでレンダリングしてみてください。。
Display "mekatest.tif" "file" "rgba"
Format 640 480 1
PixelSamples 2 2
PixelFilter "catmull-rom" 3 3
ShadingRate 1
MakeTexture "00tex_master.tif" "00tex_master.tdl" "periodic" "periodic" "gaussian" 1 1
Imager "background" "background" [0.2 0.4 0.6]
Sides 1
Orientation "rh"
Projection "perspective" "fov" [48.728]
ConcatTransform [
0.912762334333 -0.256856235992 -0.317631539769 0
0 0.777572864472 -0.628792843818 0
-0.408491029306 -0.573938423935 -0.709739222889 0
-14.5441391986 -308.526077317 1143.67912849 1
]
Scale 1 1 -1
WorldBegin
Attribute "visibility" "trace" [1]
Attribute "visibility" "transmission" ["Os"]
Attribute "visibility" "transmission" "opaque"
Attribute "light" "shadows" "on"
LightSource "distantlight" 1
"from" [0.205154 1.226111 -0.161600]
"to" [0.000000 0.000000 0.000000]
"lightcolor" [0.800 0.800 0.800]
LightSource "ambientlight" 2
"lightcolor" [0.300 0.300 0.300]
AttributeBegin
Scale 1 1 -1
Surface "supertexmap" "string Csmapname" "00tex_master.tdl"
Declare "st" "facevarying float[2]"
Attribute "identifier" "name" ["body01"]
PointsPolygons
[ 4 4 4 4 4 4 4 4 4 4 3 4 4 3 3 4 4 4 4 4 4 4 4 3 4 4 4 4 4 4 4 4 3 4 3
4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 4 4 4 3 4 4 4 4 4 4 4 4 4 4 4 4 3
3 4 4 4 4 4 4 4 4 4 4 4 3 4 4 4 4 4 4 4 4 4 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
4 4 4 4 4 4 4 4 4 4 4 3 3 4 4 4 4 4 4 4 4 4 3 3 4 4 4 4 4 4 4 4 4 4 3 3 4 4 4 4
4 4 4 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 4 4 4 4 4 4 4 4 3 3 4 4 3 3 3 3 4
4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3
3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
4 4 4 4 3 3 4 4 4 4 4 4 4 4 4 3 3 4 4 4 4 4 4 4 4 4 4 3 3 4 4 4 4 4 4 4 3 3 4 4
4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 4 4 4 4 4 4 4 4 3 3 4 4 3 3 3 3 4 4 4 4 4 4 4 4
4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 4 4 4 4 4
4 4 4 4 4 4 4 4 4 ][ 8 1 3 9 8 9 2 0 10 5 7 11 10 11 6 4 17 15 5 10 16 13 15 17
14 17 10 4 12 14 4 2 16 12 2 9 16 17 14 12 6 19 4 7 18 20 11 11 20 19 6 2 4 19
2 19 0 22 24 18 1 23 22 1 8 24 26 20 18 24 22 23 26 21 23 8 0 25 21 0 19 26 25
19 20 26 23 21 25 28 16 9 27 13 16 28 27 28 9 3 13 27 5 15 7 5 27 18 27 3 1 18
29 30 32 31 31 32 34 33 38 29 31 33 35 38 33 37 30 29 38 34 37 36 30 37 34 32
39 40 42 41 41 42 44 43 43 44 46 45 45 46 48 47 47 48 50 49 49 50 40 39 40 50
48 42 42 48 46 44 49 39 41 47 47 41 43 45 53 54 52 51 55 56 54 53 57 58 56 55
59 60 58 57 61 62 60 59 51 52 62 61 54 60 62 52 56 58 60 54 59 53 51 61 57 55
53 59 68 67 66 65 68 65 64 68 64 63 69 71 70 66 67 74 75 76 77 73 74 77 78 72
73 77 76 75 79 80 65 66 75 74 67 68 77 76 68 69 78 77 69 63 72 78 71 67 76 80
70 71 80 79 83 84 86 85 85 86 88 87 82 89 90 81 89 84 83 90 84 89 82 81 90 83
85 87 81 83 84 82 88 86 91 92 94 93 95 96 98 97 97 98 100 99 99 100 92 91 92
100 98 94 102 101 93 94 104 102 94 96 103 104 96 95 101 102 104 103 94 98 96 93
106 105 91 97 108 107 95 99 109 108 97 91 105 109 99 106 108 109 105 106 93 101
110 107 106 110 111 95 107 111 103 103 111 110 101 107 108 106 112 113 115 114
.....................................省略....................
AttributeEnd
WorldEnd
ダウンロードはこちら
mekatest.rib
RIB出力検証その4
metasequoia pythonから出力したRIBは、頂点法線も計算して出力しているので、スムージングがかかっている。
RIB内の"N"[・・・]で始まる部分をすべて削除してレンダリングすると、かくっとしたモデルになります。
以下は、3Delightでレンダリングしました。速いです。
頂点法線 vertex normalを求める part2
metasequoia pythonで作ったスクリプトについて、
以前書いた頂点法線の記事と比べてみる。今回は、三角形、四角形に分割し、頂点の数がたくさん増えてしまいます。mqo2ribでの求め方と似ているか?
各頂点ごと、重複していますが、RIBで以下を宣言しておけば良いかな。
フォン・スムースシェーディングになるのか?
検証してみます。metasequoia python楽しいね。
Declare "N" "facevarying normal"
以下は、メタセコイア Pythonでの頂点法線出力のサンプルです。
#norm04.py
import math
doc=MQSystem.getDocument()
out=MQSystem.println
def normalize(x,y,z):
s=math.sqrt(x*x+y*y+z*z)
if s==0.0:s=1
else: s=1.0/s
return x*s,y*s,z*s
def add(a,b):
return [ a[i]+b[i] for i in range(len(a)) ]
obj=doc.object[doc.currentObjectIndex]
out(str(obj.name))
count=obj.numFace
out("面の数:"+str(count))
v=[]
f=[]
for i in range(0,count):
v.append(obj.face[i].numVertex)
for j in range(0,obj.face[i].numVertex):
f.append(obj.face[i].index[j])
#v.reverse()
#f.reverse()
out(str(list(v)))
out(str(list(f)))
ten=[]
c={}
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))
c[k]=[]
for i in range(0,count):
#out("面のindex:"+str(obj.getFaceIndexFromUniqueID(i+1)))
#out("頂点数"+str(str(obj.face[i].numVertex)))
#out(str(faceid))
for j in range(0,obj.face[i].numVertex):
#out(str(obj.face[i].index[j])+":"+str(ten[obj.face[i].index[j]]))
x1=ten[obj.face[i].index[j-1]][0]
y1=ten[obj.face[i].index[j-1]][1]
z1=ten[obj.face[i].index[j-1]][2]
x2=ten[obj.face[i].index[j]][0]
y2=ten[obj.face[i].index[j]][1]
z2=ten[obj.face[i].index[j]][2]
#out("j+1 "+str(j+1))
if j+1==obj.face[i].numVertex:
x3=ten[obj.face[i].index[0]][0]
y3=ten[obj.face[i].index[0]][1]
z3=ten[obj.face[i].index[0]][2]
else:
x3=ten[obj.face[i].index[j+1]][0]
y3=ten[obj.face[i].index[j+1]][1]
z3=ten[obj.face[i].index[j+1]][2]
nx=(y2-y1)*(z3-z2)-(z2-z1)*(y3-y2)
ny=(z2-z1)*(x3-x2)-(x2-x1)*(z3-z2)
nz=(x2-x1)*(y3-y2)-(y2-y1)*(x3-x2)
if c[obj.face[i].index[j]]==[]:
c[obj.face[i].index[j]]=[-1*nx,-1*ny,-1*nz]
else:
c[obj.face[i].index[j]]=add(c[obj.face[i].index[j]],[-1*nx,-1*ny,-1*nz])
#out(str(c[obj.face[i].index[j]]))
#out(str(normalize(*c[obj.face[i].index[j]])))
for k in f:
out(str(k)+":"+str(normalize(*c[k])))
出力例
obj1
面の数:4
[3, 3, 3, 3]
[1, 3, 2, 1, 2, 0, 4, 5, 1, 4, 1, 0]
-50.0, 20.0, 0.0
50.0, 20.0, 0.0
-50.0, 0.0, 100.0
50.0, 0.0, 100.0
-50.0, 0.0, -100.0
50.0, 0.0, -100.0
頂点法線
1:(-0.0, 1.0, 0.0)
3:(0.0, 0.98058067569092011, 0.19611613513818402)
2:(0.0, 0.98058067569092011, 0.19611613513818402)
1:(-0.0, 1.0, 0.0)
2:(0.0, 0.98058067569092011, 0.19611613513818402)
0:(-0.0, 1.0, 0.0)
4:(-0.0, 0.98058067569092011, -0.19611613513818402)
5:(-0.0, 0.98058067569092011, -0.19611613513818402)
1:(-0.0, 1.0, 0.0)
4:(-0.0, 0.98058067569092011, -0.19611613513818402)
1:(-0.0, 1.0, 0.0)
0:(-0.0, 1.0, 0.0)
metasequoia Python RIB export
メタセコイア PythonでのRIB出力について、ある程度スクリプトができた。頂点法線の出力方法を前の記事で書いたように、重複する頂点法線を何度も記入するとファイルが大きくなってしまう。また宣言をしておかなければならない、
Surface "plastic"
Color 1.000 0.243 0.439
とシェーダを加えて、3Delightでレンダリングしてみた。頂点法線の求め方は、どちらもグローシェーディングによる求め方だ。記述がちょっと違うだけだが、レンダリング結果は同じだった。
次に、頂点法線を求めないように、
normalcheck=False
として、求めてみた。
フラットシェーディングになり、plasticシェーダを入れていても、ハイライトは出ません。
最後に、メタセコイア上で、「面をなめらかにする」を選んで、ポリゴン数を増やした。ちよっときめ細かくなりますね。
metasequoiaからRenderManへ
メタセコイアのサンプルwitchを三角形化しておき、obj出力する。
さらに、cgkitでシーンが作成できるようにmetasequoia pythonを使って
シーンを出力した。
レンダラは、RenderMan互換レンダラの3DelightとSitex Airを利用した。
occlightとenvlightを使ってそれぞれ、アンビエントオクルージョンを求める。ポリゴンのメッシュ部分がレンダリング時に出てしまうのをどのように調整するかが、課題。パラメータをどういじるのか、わかりませんが、いろいろ実験君です。勉強を続けます。楽しいですね。
ありがとうございます。
面白いことをやってみよーその4
uv座標に対応したスクリプトを考えてもらった。ありがたいです。面白いことをやってみよー「
メタセコのPythonスクリプトをやってみよー3」試してみました。
1.まず、増やすモデルを準備します。オブジェクトobj1
2.つぎに、高さ0の平面をつくります。適当に拡大しておく。オブジェクトobj2
3.シフトキーを押しながら、オブジェクトパネルのobj1をクリックします。obj1が選択状態になります。
4.オブジェクトパネルのobj2をクリックします。
5.スクリプトエディタを開き、scatter2.pyを開きます。
rangeMin = MQSystem.newPoint(0, 0, 0)
rangeMax = MQSystem.newPoint(1, 0, 1)
6.実行します。
複製されたブツは、
ワイヤーフレーム表示でした。ちょっと調整が必要かも。メタセコのレンダリングでは表示されないところです。
しかしながら、RIB出力して、3Delightでレンダリングしてみました。
できました。ありがとうございます。
これはこれで、100体、すごいことになりました。なかなか面白いです。
ありがとうございます。
面白いことをやってみよーその5
metasequoia pythonを使って、RIB出力を工夫してみる。オブジェクトごとにだせるようにしてみた。
ブツごとにShaderを割り当てる。シーンをつくってみた。
Scatter2.py面白いですね。ありがとうございます。
はやぶさが取得したイトカワのデータ
はやぶさの取得したデータが一般公開されており、イトカワのモデルデータはアスキー形式のSTLもある。
さてさて、メタセコイアの形式に変換してくれている方がいた。
大変助かります。データはこちら、
今江科学 はやぶさが取得したイトカワのデータをしゃぶり尽くす
ありがとうございます。
イトカワデータを読み込んだら、大変小さいですが、カメラを近づけて、metasequoia pythonスクリプトを使って、RenderManのRIB形式に変換して、plasticシェーダを割り当てた。3つの視点からのRIBを出力し、3Delightでレンダリングしました。特にライトの設定はいじっていないので、らっこが見れるかとおもったら、暗かったです。ライトの設定が必要ですね。
このように楽しめるのは、面白いです。
はやぶさ、ありがとう!!
イトカワその1
イトカワその2
イトカワその3
ますます、楽しくなってきました。
1/4 >>