1/2 >>

Pythonのインデント

エラーメッセージ
IndentationError: unindent does not match any outer indentation level
調べてみると・・・
インデントがきちんとしていると思っていたら、矢印キーでうろうろしてみると、2ヶ所、タブになっているところがありました。

  • スペースかタブかどちらかに統一して記述する。
    • -
    • -

    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]
    • -
    • -

    NVIDIA GelatoでBOXを表示する。その2

    同じオブジェクトをたくさん並べてみよう
    影も計算するように設定しました。
    whileのインデントはきちんと整えること。
    #box1.pyg
    Output ("box02.tif", "tiff", "rgb", "camera", "float gain", 1, "float gamma",
    1, "string filter", "gaussian", "float[2] filterwidth", (2, 2))
    Attribute ("string projection", "perspective")
    Attribute ("float fov", 20)
    Attribute ("int[2] resolution", (640, 480))
    #placecam 10 5 -10 0 0 0
    Rotate (-19.47, 1.00, 0.00, 0.00)
    Rotate (45.00, 0.00, 1.00, 0.00)
    Translate (-10.00, -5.00, 10.00)

    Attribute ("string geometryset", "+shadows")

    World ()
    Light ("light1", "pointlight", "float intensity", 350, "point from", (-10, 10, -10),"string shadowname", "shadows")
    Light ("light2", "pointlight", "float intensity", 350, "point from", (10, 10, -10),"string shadowname", "shadows")

    mypos=-3
    while mypos<=3:
    PushTransform ()
    Attribute ("color C", (1, 1, 0))
    Shader ("surface", "plastic")
    Translate ( 0, 0.5, mypos)
    Input ("BoxGeom.rib")
    PopTransform ()
    mypos+=1.3

    Attribute ("color C", (1, 1, 1))
    Rotate (90.00, 1.00, 0.00, 0.00)
    Shader ("surface", "plastic")
    Input("PlaneGeom.rib")
    Render()

    box1.jpg
    • -
    • -

    NVIDIA Gelatoでレンダリング その3

    スポットライトをあてる。
    shadingqualityを2にする。デフォルトは1。
    #sphere3.pyg
    Output ("sphere03.tif", "tiff", "rgb", "camera", "float gain", 1, "float gamma",
    1, "string filter", "gaussian", "float[2] filterwidth", (2, 2))
    Attribute ("float shadingquality",2)
    Attribute ("string projection", "perspective")
    Attribute ("float fov", 10)
    Attribute ("int[2] resolution", (640, 480))
    #placecam -20 15 0 0 0 0
    Rotate (-36.87, 1.00, 0.00, 0.00)
    Rotate (-90.00, 0.00, 1.00, 0.00)
    Translate (20.00, -15.00, 0.00)

    Attribute ("string geometryset", "+shadows")

    World ()
    #Light ("light1", "pointlight", "float intensity", 4000, "point from", (-20, 50, -20),"string shadowname", "shadows")

    Light ("light1", "spotlight", "string shadowname", "shadows", "point from", (-20, 50, -20), "point to", (0, 0, 0), "float intensity", 6000, "float coneangle", 90,"float shadowblur",0.01,"float shadowsamples", 4,"float shadowbias",0.1)

    PushTransform ()
    Attribute ("color C", (0, 0, 1))
    Shader ("surface", "plastic")
    Translate ( 0, 0.5, 0)
    Sphere (1, -1, 1, 360)
    PopTransform ()

    Attribute ("color C", (1, 1, 1))
    Shader ("surface", "plastic")
    Rotate (90.00, 1.00, 0.00, 0.00)
    Input("PlaneGeom.rib")
    Render()

    sphere3.jpg
    • -
    • -

    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でreflectを試す

    全体を大きな球体に入れ、青で囲んでいます。
    青玉は、ブラーがかかっています。
    #sphere32.pyg
    Output ("sphere32.tif", "tiff", "rgb", "camera", "float gain", 1, "float gamma",
    1, "string filter", "gaussian", "float[2] filterwidth", (2, 2))
    Attribute ("float shadingquality",2)
    Attribute ("string projection", "perspective")
    Attribute ("float fov", 13)
    Attribute ("int[2] resolution", (640, 480))
    #placecam -20 15 0 0 0 0
    Rotate (-36.87, 1.00, 0.00, 0.00)
    Rotate (-90.00, 0.00, 1.00, 0.00)
    Translate (20.00, -15.00, 0.00)

    Attribute ("string geometryset", "+shadows")
    Attribute ("string geometryset", "+reflection")

    World ()
    PushTransform ()
    Attribute ("color C", (0.2, 0.4, 0.75))
    Sphere (100, -100, 100, 360)
    PopTransform ()

    Light ("light1", "spotlight", "string shadowname", "shadows", "point from", (-20, 50, -20), "point to",
    (0, 0, 0), "float intensity", 6000, "float coneangle", 90,"float shadowblur",0.01,"float shadowsamples", 4,"float shadowbias",0.1)


    PushTransform ()
    Attribute ("color C", (1, 1, 0.25)) #yellow
    Shader ("surface", "metal", "string envname", "reflection",
    "float Kd", 0.05, "float roughness", 0.1, "float Kr", 0.75,
    "float Ka", 0.5,
    # "float samples", 4, "float blur", 0.05,
    "float twosided", 1
    )
    Translate ( 0, 1, 0)
    Sphere (1, -1, 1, 360)
    PopTransform ()

    PushTransform ()
    Attribute ("color C", (0.25, 0.25, 1)) #blue
    Shader ("surface", "metal", "string envname", "reflection",
    "float Kd", 0.05, "float roughness", 0.1, "float Kr", 0.75,
    "float Ka", 0.5,
    "float samples", 4, "float blur", 0.1,
    "float twosided", 1
    )
    Translate ( 0, 1, 2.5)
    Sphere (1, -1, 1, 360)
    PopTransform ()



    PushTransform ()
    Attribute ("color C", (1, 0.25, 0.25)) #red
    Shader ("surface", "metal", "string envname", "reflection",
    "float Kd", 0.05, "float roughness", 0.1, "float Kr", 0.75,
    "float Ka", 0.5,
    # "float samples", 4, "float blur", 0.1,
    "float twosided", 1
    )
    Translate ( 0, 1, -2.5)
    Sphere (1, -1, 1, 360)
    PopTransform ()

    Attribute ("color C", (1, 1, 1))
    Shader ("surface", "plastic")
    Rotate (90.00, 1.00, 0.00, 0.00)
    Input("PlaneGeom.rib")
    Render()

    sphere4.jpg
    • -
    • -

    NVIDIA Gelatoでアンビエント・オクルージョン

    まず、AO(ambient-occlusion)を求める。
    #sphere32ao.pyg

    Attribute ("int ray:maxdepth", 1)

    Output ("sphere32ao.tif", "tiff", "rgb", "camera", "float gain", 1, "float gamma",
    1, "string filter", "gaussian", "float[2] filterwidth", (2, 2))
    Attribute ("float shadingquality",2)
    Attribute ("string projection", "perspective")
    Attribute ("float fov", 13)
    Attribute ("int[2] resolution", (640, 480))
    #placecam -20 15 0 0 0 0
    Rotate (-36.87, 1.00, 0.00, 0.00)
    Rotate (-90.00, 0.00, 1.00, 0.00)
    Translate (20.00, -15.00, 0.00)

    Attribute ("string occlusion:spatialdb", "occ.sdb");
    Attribute ("string spatialdb:write", "occ.sdb");

    World ()
    Shader ("surface", "ambocclude", "string occlusionname", "localocclusion", "float samples", 256, "float bias", 0.01)

    Attribute ("string geometryset", "+localocclusion")
    Attribute ("float occlusion:maxpixeldist", 20)
    Attribute ("float occlusion:maxerror", 0.25)

    PushTransform ()
    Attribute ("color C", (1, 1, 0.25)) #yellow
    Translate ( 0, 1, 0)
    Sphere (1, -1, 1, 360)
    PopTransform ()

    PushTransform ()
    Attribute ("color C", (0.25, 0.25, 1)) #blue
    Translate ( 0, 1, 2.5)
    Sphere (1, -1, 1, 360)
    PopTransform ()

    PushTransform ()
    Attribute ("color C", (1, 0.25, 0.25)) #red
    Translate ( 0, 1, -2.5)
    Sphere (1, -1, 1, 360)
    PopTransform ()

    Attribute ("color C", (1, 1, 1))
    Rotate (90.00, 1.00, 0.00, 0.00)
    Input("PlaneGeom.rib")
    Render()

    sphere3_ao.jpg

    つづいて、Photoshopでレイヤーに入れて乗算処理する。
    sphere3_multi.jpg
    • -
    • -

    NVIDIA Gelatoでcheckerを利用する

    Shaderをレイヤーで合わせることができるから、ちょっと面白いかも。
    とりあえず、繰り返し処理はfor文を使う。

    #box_check.pyg
    Output ("box_check.tif", "tiff", "rgb", "camera", "float gain", 1, "float gamma",
    1, "string filter", "gaussian", "float[2] filterwidth", (2, 2))
    Attribute ("float shadingquality",1.2)
    Attribute ("string projection", "perspective")
    Attribute ("float fov", 20)
    Attribute ("int[2] resolution", (640, 480))
    #placecam 10 5 -10 0 0 0
    Rotate (-19.47, 1.00, 0.00, 0.00)
    Rotate (45.00, 0.00, 1.00, 0.00)
    Translate (-10.00, -5.00, 10.00)

    #Attribute ( "int ray:shadows", 0 )
    Attribute ("string geometryset", "+shadows")
    Attribute ("string geometryset", "+reflection")

    World ()
    Light ("light1", "pointlight", "float intensity", 400, "point from", (-10, 10, -10),"string shadowname", "shadows")
    Light ("light2", "pointlight", "float intensity", 400, "point from", (10, 10, -10),"string shadowname", "shadows")

    PushTransform ()
    Attribute ("color C", (0.2, 0.4, 0.75))
    Sphere (100, -100, 100, 360)
    PopTransform ()

    for i in range(5):
    PushTransform ()
    Attribute ("color C", (1, 1, 1))
    Shader ( "surface", "metal","string envname","reflection" )
    #Shader ("surface", "plastic")
    i=1.2*i
    Translate ( 0, 0.5, i-2)
    Input ("BoxGeom.rib")
    PopTransform ()


    Attribute ("color C", (1, 1, 1))
    Rotate (90.00, 1.00, 0.00, 0.00)
    ShaderGroupBegin ()
    Shader ("surface", "checker","layer1","float stilesize", .1, "float ttilesize", .1)
    Shader ("surface", "plastic", "layer2")
    ConnectShaders ("layer1", "Cout", "layer2", "C")
    ShaderGroupEnd ()
    Input("PlaneGeom.rib")
    Render()

    box_check.jpg
    • -
    • -

    checkerの色を変更する


    #sphere_check.pyg
    Output ("sphere_check.tif", "tiff", "rgb", "camera", "float gain", 1, "float gamma",
    1, "string filter", "gaussian", "float[2] filterwidth", (2, 2))
    Attribute ("string projection", "perspective")
    Attribute ("float fov", 45)
    Attribute ("int[2] resolution", (640, 480))
    Light ("light1", "ambientlight", "float intensity", 0.1)
    Light ("light2", "distantlight", "point from", (1, 1, -1), "point to", (0, 0, 0)
    , "float intensity", 1.5)
    Rotate (-10.14, 1, 0, 0)
    Rotate (26.57, 0, 1, 0)
    Translate (-5, -2, 10)
    World ()

    ShaderGroupBegin ()
    Attribute ("color C", (1, 1, 0))
    Shader ("surface", "checker", "checklayer","float stilesize",0.1,"float ttilesize",0.1,"color color2", ( 0, 0, 1 ))
    Shader ("surface", "plastic", "plasticlayer")
    ConnectShaders ("checklayer", "Cout", "plasticlayer", "C")
    ConnectShaders ("checklayer", "fout", "plasticlayer", "Ks")
    ShaderGroupEnd ()
    Rotate (90, 1, 0, 0)
    Sphere (3, -3, 3, 360)
    Render()


    sphere_check.jpg
    • -
    • -

    "while" を使って、ズラリと並べてみる

    POV-Rayの例を参考にしました。
    参考にしたのはhttp://agata.ciao.jp/graphic/tips/chapter3.html
    大変、勉強になります。ありがとうございます。

    RotateとTranslateが逆になるところが違いになりますか。
    RenderManやGelatoの記述での変換は、下から上に変換していきます。
    box_kaiten1.jpg

    #box_kaiten.pyg
    Output ("box_kaiten.tif", "tiff", "rgb", "camera", "float gain", 1, "float gamma",
    1, "string filter", "gaussian", "float[2] filterwidth", (2, 2))
    Attribute ("float shadingquality",1.2)
    Attribute ("string projection", "perspective")
    Attribute ("float fov", 20)
    Attribute ("int[2] resolution", (640, 480))
    #placecam 10 5 -10 0 0 0
    Rotate (-19.47, 1.00, 0.00, 0.00)
    Rotate (45.00, 0.00, 1.00, 0.00)
    Translate (-10.00, -5.00, 10.00)

    Attribute ( "int ray:shadows", 1 )
    Attribute ("string geometryset", "+shadows")
    Attribute ("string geometryset", "+reflection")

    World ()
    Light ("light1", "pointlight", "float intensity", 400, "point from", (-10, 10, -10),"string shadowname", "shadows")
    Light ("light2", "pointlight", "float intensity", 400, "point from", (10, 10, -10),"string shadowname", "shadows")

    PushTransform ()
    Attribute ("color C", (0.2, 0.4, 0.75))
    Sphere (100, -100, 100, 360)
    PopTransform ()

    J=1
    while J<=8:
    PushTransform ()
    Attribute ("color C", (1, 1, 1))
    Shader ( "surface", "metal","string envname","reflection" )
    Rotate (360/8.0*J, 0, 1, 0)
    Translate ( 2.5, 0.5, 0)
    Input ("BoxGeom.rib")
    PopTransform ()
    J+=1

    Attribute ("color C", (1, 1, 1))
    Rotate (90.00, 1.00, 0.00, 0.00)
    ShaderGroupBegin ()
    Shader ("surface", "checker","layer1","float stilesize", .1, "float ttilesize", .1)
    Shader ("surface", "shinyplastic","layer2")
    ConnectShaders ("layer1", "Cout", "layer2", "C")
    ShaderGroupEnd ()
    Input("PlaneGeom.rib")
    Render()
    • -
    • -

    1/2 >>