<< NVIDIA Gelatoでレンダリング その3 戻る NVIDIA Gelatoでreflectを試す >>

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

<< NVIDIA Gelatoでレンダリング その3 戻る NVIDIA Gelatoでreflectを試す >>