<< 2/7 >>

Sitex Air購入

Core2 Quadにする。

Sitex AIRをリニューアルした。さすがに速い。
RenderMan互換レンダラーです。
http://www.sitexgraphics.com/

最近cgkitを検索するとトップに出てこない。
リンクを貼っておくことにした。

Python Computer Graphics Kit
  • -
  • -

CGkit練習

軸を設定して配置してみる。右手系です。
なかなか面白いです。

# -*- coding: utf-8 -*-
# 日本語のコメント挿入
import jiku_init

Globals( rib='Imager "background" "color background" [0.4 0.4 0.4]'
)

TargetCamera(
pos = (3,-4,3),
target = (0,0,0)
)


GLPointLight(
pos = (2.5, -1, 2),
diffuse = (1, 0.7, 0.2)
)

# ライト位置にBox
Box(
lx = 0.1,
ly = 0.1,
lz = 0.1,
pos = (2.5, -1, 2),
material = GLMaterial(diffuse=(1, 0.7, 0.2))
)

GLPointLight(
pos = (-5, 3, 0),
diffuse = (0.2, 1.0, 0.5),
intensity = 3.0
)
# ライト位置にBox
Box(
lx = 0.2,
ly = 0.2,
lz = 0.2,
pos = (-5, 3, 0),
material = GLMaterial(diffuse=(0.2, 1.0, 0.5))
)

Sphere(
name = "My Sphere",
radius = 0.2,
pos = (1.5,0,0),
material = GLMaterial(
diffuse = (1, 1, 1)
)
)

axis
  • -
  • -

Cgkit Metasequoia

MetasequoiaからOBJで出力し、cgkitで49体に増やしてみる。
スポットライトはおススメ。3Delightでレンダリングは29秒。
SpotLight3DS( name = "SpotLight3DS",
enabled = True,
intensity = 1.2,
color = (1,1,1),
see_cone = False,
roll = 0.0,
outer_range = 0,
inner_range = 0,
attenuation = 0,
rectangular_spot = 0,
shadowed = True,
shadow_bias = 0.02,
shadow_filter = 4.0,
shadow_size = 256,
spot_aspect = 0,
use_projector = False,
projector = 0,
overshoot = False,
ray_shadows = False,
ray_bias = False,
hotspot = 80,
falloff = 90,
pos=(-300, 2000, 3000),
target = (0,0,0) )

なかなか勉強になります。
ありがとうございます。
meka_duplicate2.jpg
  • -
  • -

Happy Buddha!!

cgkit+Darktree+AIRで連携してみる。
ひとつひとつ実験をしてみる。Airspaceで検証してから、cgkitにスクリプトをいれてみた。
darktree_test.jpg

darktree_test2.jpg

darktree_test3.jpg

darktree_test4.jpg

darktree_test5.jpg

buddha4.jpg

完成。レンダリングは、2分33秒ほど、Pentium4 2.4GHzです。
Happy Buddhaモデルは、研究用の3DモデルIndexed Face Set (IFS) から、
http://graphics.cs.brown.edu/games/brown-mesh-set/

もともとは、The Stanford 3D Scanning Repository
http://graphics.stanford.edu/data/3Dscanrep/

腐食したシェーダをかぶせていましたが、文化的、宗教的観点から
外しました。御利益高い「金」でいってみます。
ありがとうございます。
  • -
  • -

matid

メタセコイアからOBJ出力した面の色情報の割り当て方がわかる。
cgkitは面白い。

load("facetest.obj")

model=worldObject("obj1")

convertToTriMesh(model)

#model.geom.newVariable("matid", UNIFORM, INT)

m1=OBJMaterial( name = "mat1",
Ka = (0.6, 0.0, 0.0),
Kd = (0.8, 0.0, 0.0),
Ks = (0.0, 0.0, 0.0),
Ns = 5.0
)

m2=OBJMaterial( name = "mat2",
Ka = (0.0, 0.0, 0.6),
Kd = (0.0, 0.0, 0.8),
Ks = (0.0, 0.0, 0.0),
Ns = 5.0
)

m3=OBJMaterial( name = "mat3",
Ka = (0.6, 0.6, 0.0),
Kd = (0.8, 0.8, 0.0),
Ks = (0.0, 0.0, 0.0),
Ns = 5.0
)

model.material = [m1,m2,m3]


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

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

matid1.jpg

matid2.jpg

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

cgkit-2.0.0alpha9.win32-py2.5.exe

cgkitがアップデートした。
ますますRenderMan互換レンダラーで便利に使える。

Python2.5でのcgkitのインストール注意点をまとめておく。

■必要なファイル 
python-2.5.4.msi
PyOpenGL-3.0.1a2.win32.exe
PyODE-1.2.0.win32-py2.5.exe
pygame-1.8.1release.win32-py2.5.msi
PIL-1.1.6.win32-py2.5.exe
cgkit-2.0.0alpha9.win32-py2.5.exe
PyProtocols-0.9.3.zip
(msvcp71.dll)

■マイ コンピュータを右クリック
詳細設定→環境変数→システム環境変数のPATHを探して、「編集」をクリック。ここで変数値が選択状態になっているが、マウスでクリックして選択解除、他の設定を消さないように、変数値の最後の部分に次のパスを追加する。

;C:\Python25;C:\Python25\Scripts

■マシンを再起動。

以上をインストールしたら、
PyProtocols-0.9.3.zipをC:\Python25に解凍する。

■コマンドプロンプトから
C:\Python25\PyProtocols-0.9.3>python setup.py --without-speedups install

続いて、サンプルを動かしてみる。
C:\Python25>viewer.py demo1.py
Traceback (most recent call last):
File "C:\Python25\Scripts\viewer.py", line 63, in
from cgkit.all import *
File "C:\Python25\Lib\site-packages\cgkit\all\__init__.py", line 46, in
from cgkit import _core
ImportError: DLL load failed: 指定されたモジュールが見つかりません。

上記のエラーが出る場合はMicrosoft C++ Runtime Libraryがない。

msvcp71.dllを探してきて、Python25フォルダに入れておくとcgkitは動きます。
  • -
  • -

cgkitで変換を求める

Pythonコマンドラインから、

>>> from cgkit.all import *

ちょっと時間がかかる・・・・。とりあえず球体!!!
>>> s=Sphere()
45度の回転行列を求める。
>>> s.rot=mat3().fromEulerXYZ(0.25,0,0)
>>> s.rot
(1, 0, 0)
(0, 0.968912, -0.247404)
(0, 0.247404, 0.968912)

>>> s.rot=mat3().fromEulerXYZ(0,0.25,0)
>>> s.rot
(0.968912, 0, 0.247404)
(0, 1, 0)
(-0.247404, 0, 0.968912)

>>> s.rot=mat3().fromEulerXYZ(0,0,0.25)
>>> s.rot
(0.968912, -0.247404, 0)
(0.247404, 0.968912, 0)
(0, 0, 1)



>>> for slot in s.iterSlots():
... print slot
...
angularvel
cog
dynamics
inertiatensor
linearvel
mass
pos
rot
scale
static
totalmass
transform
visible
worldtransform
>>> s.radius
1.0
>>> s.pos
(0, 0, 0)
>>> s.rot
(1, 0, 0)
(0, 1, 0)
(0, 0, 1)

>>> s.static
False
>>> s.transform
[1, 0, 0, 0]
[0, 1, 0, 0]
[0, 0, 1, 0]
[0, 0, 0, 1]
  • -
  • -

MayaのRIB exportを調べる

mixi RenderManコミュから転載:

MayaからプラグインのRIBexportでカメラは
Transform [ ]で出ていますが、
いろいろと調べてみました。

RIBでの視野変換を以下のようにやるとして、
Rotate RX 1 0 0
Rotate RY 0 1 0
Rotate RZ 0 0 1
Translate -TX -TY TZ
Scale SX SY -SZ

行列は下から上へ、の順で乗算していき、逆行列を求めれば良いです。

Translateの行列は、TX,TX,-TZで求め
Rotate Yは、180-RYで求めました。

以下はMayaのPerspのデフォルト位置を例として
Python CGkitで求めてみました。

Translate X: 28
Translate Y: 21
Translate Z: 28
Rotate X: -27.938
Rotate Y: 45
Rotate Z: 0
Scale X: 1
Scale Y: 1
Scale Z: 1


C:\Python25>python
>>> from cgkit.all import *
>>> tr=mat4(1).translation(vec3(28,21,-28)) 
>>> import math
>>> rx=mat4(1).rotate(-27.938*math.pi/180,vec3(1,0,0))
>>> rx
[1, 0, 0, 0]
[0, 0.883455, 0.468516, 0]
[0, -0.468516, 0.883455, 0]
[0, 0, 0, 1]
>>> ry=mat4(1).rotate((180-45)*math.pi/180,vec3(0,1,0))
>>> ry
[-0.707107, 0, 0.707107, 0]
[0, 1, 0, 0]
[-0.707107, 0, -0.707107, 0]
[0, 0, 0, 1]
>>> v=tr*ry*rx
>>> v
[-0.707107, -0.331291, 0.624697, 28]
[0, 0.883455, 0.468516, 21]
[-0.707107, 0.331291, -0.624697, -28]
[0, 0, 0, 1]
>>> v.inverse() 逆行列
[-0.707107, -2.77556e-017, -0.707107, 0]
[-0.331291, 0.883455, 0.331291, -0.000275937]
[0.624697, 0.468516, -0.624697, -44.8219]
[0, 0, 0, 1]
>>> v.inverse().transpose() 転置行列
[-0.707107, -0.331291, 0.624697, 0]
[-2.77556e-017, 0.883455, 0.468516, 0]
[-0.707107, 0.331291, -0.624697, 0]
[0, -0.000275937, -44.8219, 1]
>>> s2=mat4(1).scaling(vec3(1,1,-1))
>>> s3=mat4(1).scaling(vec3(-1,1,-1))
>>> s2*v.inverse().transpose()*s3 スケールを両側からかけてみました。
[0.707107, -0.331291, -0.624697, 0]
[2.77556e-017, 0.883455, -0.468516, 0]
[-0.707107, -0.331291, -0.624697, 0]
[0, -0.000275937, 44.8219, 1]

よって
ConcatTransform [0.707107 -0.331291 -0.624697 0
2.77556e-017 0.883455 -0.468516 0
-0.707107 -0.331291 -0.624697 0
0 -0.000275937 44.8219 1]

ということで、cgkitで視野変換学べます。
ありがとうございます。
  • -
  • -

面法線と頂点法線

前回の記事のリンク先を参考に、頂点法線を求めてみた。とんでもなく面倒だけど、考え方がちょっとわかりました。

以下は、cgkitを利用してベクトルを求め、外積、そして正規化を行った。
メタセコイアでモデルを作り、各頂点の法線をRIBエクスポートするPolyconv(cnv)やmtrで出してみた。
normal01.jpg

C:\Python26>python
Python 2.6.4 (r264:75708, Oct 26 2009, 08:23:19) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.

cgkit起動

>>> from cgkit.all import *


頂点座標を入力
>>> a0=vec3(50,20,0)
>>> a1=vec3(50,0,-100)
>>> a2=vec3(-50,0,-100)
>>> a3=vec3(-50,20,0)
>>> a4=vec3(-50,0,100)
>>> a5=vec3(50,0,100)

----------------------------
a1の頂点法線を求める
ベクトル算出
>>> v1=a0-a1
>>> v2=a2-a1
外積 反時計回り
>>> n0=v2.cross(v1)
a1の頂点法線
>>> a1n=n0.normalize()
>>> a1n
(0, 0.980581, -0.196116)

-----------------------------
a2の頂点法線を求める
>>> v1=a1-a2
>>> v2=a0-a2
外積 反時計回り
>>> n0=v2.cross(v1)

>>> v1=a0-a2
>>> v2=a3-a2
外積 反時計回り
>>> n1=v2.cross(v1)
>>> n0
(0, 10000, -2000)
>>> n1
(0, 10000, -2000)

各法線を加える
>>> n2=n0+n1
正規化する
>>> a2n=n2.normalize()
a2の頂点法線
>>> a2n
(0, 0.980581, -0.196116)

-------------------------------
a3の頂点法線を求める
>>> v1=a2-a3
>>> v2=a0-a3
>>> n0=v2.cross(v1)
>>> n0
(0, 10000, -2000)
>>> v1=a0-a3
>>> v2=a4-a3
>>> n1=v2.cross(v1)
>>> n1
(-0, 10000, 2000)

各法線を加える
>>> n2=n0+n1
>>> n2
(0, 20000, 0)
正規化する
>>> a3n=n2.normalize()
a3の頂点法線
>>> a3n
(0, 1, 0)

----------------------------
a4の頂点法線を求める
>>> v1=a3-a4
>>> v2=a0-a4
>>> n0=v2.cross(v1)
>>> n0
(0, 10000, 2000)

>>> v2=a5-a4
>>> v1=a0-a4
>>> n1=v2.cross(v1)
>>> n1
(-0, 10000, 2000)

各法線を加える
>>> n2=n0+n1
正規化する
>>> a4n=n2.normalize()

a4の頂点法線
>>> a4n
(0, 0.980581, 0.196116)

----------------------------
a5の頂点法線を求める
>>> v2=a0-a5
>>> v1=a4-a5
>>> n0=v2.cross(v1)
>>> n0
(0, 10000, 2000)
正規化する
>>> a5n=n0.normalize()

a5の頂点法線
>>> a5n
(0, 0.980581, 0.196116)
-----------------------------
a0の頂点法線を求める
>>> v2=a4-a0
>>> v1=a5-a0
>>> n0=v2.cross(v1)
>>> n0
(0, 10000, 2000)
>>> v2=a3-a0
>>> v1=a4-a0
>>> n1=v2.cross(v1)
>>> n1
(0, 10000, 2000)
>>> v2=a2-a0
>>> v1=a3-a0
>>> n2=v2.cross(v1)
>>> n2
(0, 10000, -2000)
>>> v2=a1-a0
>>> v1=a2-a0
>>> n3=v2.cross(v1)
>>> n3
(0, 10000, -2000)

各法線を加える
>>> nn=n0+n1+n2+n3
正規化する
>>> a0n=nn.normalize()

a0の頂点法線
>>> a0n
(0, 1, 0)
  • -
  • -

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では、併用できないようです。・・・?
  • -
  • -

<< 2/7 >>