<< 4/6 >>

metasequoiaからUVマップ

メタセコイアのPythonを使ってUVマップ座標を算出、RIBのst座標として記述した。また3Delightでレンダリングするので、テクスチャを変換。

MakeTexture "grade.tif" "grade.tdl" "periodic" "periodic" "gaussian" 1 1

menuv.jpg
以下、サンプルRIBです。ライトが明るすぎてテクスチャが白くなりすぎていました。


##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.500 0.500 0.600]

Sides 1
Orientation "lh"
Projection "perspective" "fov" [9.52728338145235]
Rotate -40.8862682605356 1 0 0 # pich
Rotate 52.9183819582828 0 1 0 # head
Translate -90.469199 -98.183947 68.375702
Scale 0.1 0.1 0.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_mdl.rib"
WorldEnd





##Renderman RIB-Structure 1.0
## filename: men_mdl.rib

MakeTexture "grade.tif" "grade.tdl" "periodic" "periodic" "gaussian" 1 1
AttributeBegin
Attribute "identifier" "name" ["obj1"]
Declare "st" "facevarying float[2]"
### MaterialName: Default
Surface "supertexmap" "string Csmapname" "grade.tdl"
#Surface "paintedplastic" "uniform float Ks" 0.5 "uniform float Kd" 0.5
#"uniform float Ka" 1 "uniform float roughness" 0.1 "uniform color specularcolor" [1 1 1] "uniform string texturename" "grade.tdl"
PointsPolygons
[3 3 3 3]
[0 1 2 0 2 3 4 5 2 4 2 1]
"P" [50.000000 0.000000 100.000000
50.000000 20.000000 0.000000
-50.000000 20.000000 0.000000
-50.000000 0.000000 100.000000
50.000000 0.000000 -100.000000
-50.000000 0.000000 -100.000000]
"N" [0.000000 0.980581 0.196116
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 0.980581 -0.196116]
"st" [0.9982 -0.0019
0.9982 0.4789
0.5174 0.4789
0.9965 -0.0001
0.4965 0.4905
0.4965 -0.0001
0.9916 0.9968
0.4916 0.9968
0.4916 0.4905
0.9965 0.9968
0.4965 0.4905
0.9949 0.4889]
AttributeEnd




何とかなりそう。面白いです。ありがとうございます。
  • -
  • -

No module named pygame

XPマシンで久々、python cgkitを使おうとしたら、
下記のエラー
Traceback (most recent call last):
File "C:\Python25\Scripts\viewer.py", line 56, in ?
import pygame
ImportError: No module named pygame

pygameはインストールされているし、おかしい。
最新版を入れなおしても、同じ。
最近は、メタセコイアpythonを利用している。新たに
python223jp-20030608.exeをインストールしていた。cgkitが動いている別のマシンに、このPython2.2.3日本語環境をインストールしたら、上記のエラーが出た。特別なモジュールを利用しないならば、2.2.3はアンインストールしても良いか。
アンインストールしたところ、今度は、viewer.pyがpython2.5.4で認識せず、python2.5.4とcgkitをアンインストールして再インストールした。
ちょっと、面倒なことになりましたが、cgkit動いています。

Windows Vistaではどうだったか、確認する必要があります。
Vista 64bitでは、両方インストールされても動きました。
ありがとうございます。

うーん、・・・Windows7 64bitでは、併用できないようです。・・・?
  • -
  • -

uv座標

メタセコイアからpythonを使ってRenderMan RIB出力を検証しているところ、勉強です。

メタセコイアのmqoでのUV座標は、RIBのst座標で、v反転するので
t座標値は、1-(v)とやれば良いですね。

obj出力したファイルをv反転で、さらに、cgkitを使う際は、
scaleを(-1,1,1)としてモデルを反転させてみた。

ひきつづき、勉強します。
  • -
  • -

ODE Dynamics

Python cgkitのチュートリアルに、ODEDynamicsの記事が3つあがっていました。これは勉強になりますね。
楽しみです。

odedynamics.pyをアップデートしないと、サンプルは動かないです。


http://cgkit.sourceforge.net/tutorials/
  • -
  • -

PointsGeneralPolygons

メタセコイアからobj出力して、cgkitでシーンを書き、
3Delightでレンダリングしてみた。
ずっと、PointsPolygonと思っていたら、PointsGeneralPolygonsでした。
勉強しなおします。面白いです。


Declare "N" "facevarying normal"
Declare "st" "facevarying float[2]"
PointsGeneralPolygons [1] [4] [0 1 2 3]
"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]
"st" [0.0 1.0
1.0 1.0
1.0 0.0
0.0 0.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]

cgkitでのシーン・スクリプト


import camctrl


Globals( rib='Imager "background" "color background" [0.2 0.4 0.6]',
up = (0,1,0),
handedness = 'r'
)

TargetCamera(
pos = (173.799, 236.458, 183.37),
target = (-0.150459, -8.30794, -6.52798),
fov = 45.000000,
)

SpotLight3DS( name = "SpotLight3DS",
enabled = True,
intensity = 1.0,
shadowed = True,
shadow_size = 512,
shadow_filter = 4.0,
shadow_bias = 0.05,
hotspot = 75,
falloff = 80,
pos=(100, 200, 100),
target = (0,0,0) )




GLPointLight(
pos = (10,10, -20),
intensity = 0.7,
diffuse = (1, 1, 1)
)

load("men_uv2.obj")
men = worldObject("obj1")

mat_men = GLMaterial(
diffuse = (1,1,1),
texture = GLTexture("uvmap.png",
transform = mat4().scaling(vec3(-1,-1,1)),
mode = GL_MODULATE)
)

men.setMaterial(mat_men)
men.pos=(0,0,0)
#men.scale=(-1,1,-1)



menuv_out.jpg
  • -
  • -

OBJファイルフォーマット

メタセコイアのPythonでエクスポートできるように、サンプルファイルを見ながら、検証・・・・・metasequoia pythonの勉強します。

OBJファイルフォーマットについて、参考になります。ありがとうございます。


http://www.hiramine.com/programming/3dmodelfileformat/objfileformat.html


http://www.fileformat.info/format/wavefrontobj/egff.htm
  • -
  • -

OBJエクスポート その2

metasequoia pythonでOBJ出力を考える。
objファイルとmtlファイルを出力する。
カメラ位置を取得し、cgkitのシーンファイルに書き込む。
後は、RenderMan、RenderMan互換レンダラでレンダリングする。

頂点法線を計算したので、メカが丸くなる。3Delightでレンダリングした。
meka_out.jpg

面ごとの色情報をテストしてみる。
men_out.jpg
以下は、cgkitのシーンファイル


import camctrl


Globals( rib='Imager "background" "color background" [0.2 0.4 0.6]',
up = (0,1,0),
handedness = 'r'
)

TargetCamera(
pos = (897.529, 889.788, 808.139),
target = (-13.524, 1.713, 13.592),
fov = 9.527,
)

SpotLight3DS( name = "SpotLight3DS",
enabled = True,
intensity = 1.0,
shadowed = True,
shadow_size = 512,
shadow_filter = 4.0,
shadow_bias = 0.05,
hotspot = 75,
falloff = 80,
pos=(100, 200, 100),
target = (0,0,0) )


GLPointLight(
pos = (10,10, -20),
intensity = 0.7,
diffuse = (1, 1, 1)
)

load("obj_men.obj")
model = worldObject("obj1")

m1=OBJMaterial( name = "mat1",
Ka = (0.600000023842, 0.489411790745, 0.0258823546621),
Kd = (0.800000011921, 0.65254903812, 0.0345098053591),
Ks = (0.0, 0.0, 0.0),
Ns = 5.0
)

m2=OBJMaterial( name = "mat2",
Ka = (0.600000023842, 0.0188235312729, 0.054117650454),
Kd = (0.800000011921, 0.0250980410739, 0.0721568654799),
Ks = (0.0, 0.0, 0.0),
Ns = 5.0
)

m3=OBJMaterial( name = "mat3",
Ka = (0.0211764724027, 0.0494117681945, 0.600000023842),
Kd = (0.0282352958357, 0.0658823559565, 0.800000011921),
Ks = (0.0, 0.0, 0.0),
Ns = 5.0
)

m4=OBJMaterial( name = "mat4",
Ka = (0.0494117681945, 0.600000023842, 0.0494117681945),
Kd = (0.0658823559565, 0.800000011921, 0.0658823559565),
Ks = (0.0, 0.0, 0.0),
Ns = 5.0
)

model.material = [m1,m2,m3,m4]

matids = model.geom.slot("matid")

i=0
for v in model.geom.slot("matid"):
matids[i] = v
i=i+1


"""
mat_men = GLMaterial(
diffuse = (1,1,1),
texture = GLTexture("uvmap.png",
transform = mat4().scaling(vec3(-1,-1,1)),
mode = GL_MODULATE)
)
"""
#men.setMaterial(mat_men)
model.pos=(0,0,0)
#men.scale=(-1,1,-1)

  • -
  • -

メタセコからcgkitへ

metasequoia pythonを使って、簡単なcgkitシーンをつくるスクリプトをかいてみた。複数のオブジェクトがある場合、面に色をつけていたり、テクスチャマップの混在だと、うまくいかない。
課題はまだまだ、たくさんあります。使い方を勉強していかなきゃ。

metasequoia pythonでは、enumerateが使えない。
複数オブジェクトの管理、OBJマテリアルの管理、課題です。

ありがとうございます。
  • -
  • -

Metasequoia→OBJ→python cgkit

metasequoia pythonを触りはじめて、勉強になっています。メタセコイアからOBJ出力をしておいて、cgkitでのシーンをメタセコイアから出力するスクリプトがなんとかできた。
ドキュメント内の一つのオブジェクトにマテリアルが複数割り当てられている場合、cgkit側で、matidをつかって調整する。
うまくいかないのは、三角ポリゴンに分割されていないからだということに気づくのに時間かかりました。
メタセコイアでつくったモデルをすべて選択して「三角形化」しておくこと。それから、OBJエクスポートする。
つぎに、metasequoia pythonでcgkitシーンを出力する。

若干、models[4].geom.newVariable("matid", UNIFORM, INT)とmatidを設けてあげなければならない部分もあるが、サンプルのタンクは3Delightでレンダリングできました。
ありがとうございます。
tank0.jpg
  • -
  • -

matid

各オブジェクトのジオメトリがmatidを持っているかどうかを調べてみた。
なるほど、本家のチュートリアル参考になりました。これでメタセコイアpythonを使って、cgkitのシーン出力できそうです。ありがとうございます。

>>> from cgkit.all import *
>>> load("sample.obj")
>>> listWorld()
Root
+---obj1 (TriMesh/TriMeshGeom)
+---obj2 (TriMesh/TriMeshGeom)
+---obj3 (TriMesh/TriMeshGeom)
>>> objs=["obj1","obj2","obj3"]
>>> model=worldObjects(objs)
>>> model
[, 0x0330E8A0>, ]
>>> for s in model[0].geom.iterSlots():print s
...
N
cog
faces
inertiatensor
matid
st
verts
>>> for s in model[1].geom.iterSlots():print s
...
N
cog
faces
inertiatensor
st
verts
>>> for s in model[2].geom.iterSlots():print s
...
N
cog
faces
inertiatensor
st
verts
>>>
  • -
  • -

<< 4/6 >>