Rendering学習日記

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

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は動きます。
  • -
  • -

python 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で視野変換学べます。
ありがとうございます。
  • -
  • -
<< 6/22 >>