1/2 >>
nVidia Gelatoのリンク切れ
Gelatoがダウンロードできなくなりました。
昨今のリアルタイムレンダリングGPUに移行していく感じでしょうか。
さてさて、Windows7が出ましたが、CGソフトはほとんど未対応。
まだまだXPが現役です。
XPをクイックフォーマットしてからVista Buisiness 32bitをインストールして、Gelato(R) 2.2 Release 1をインストールしてみました。
サンプルをレンダリングしようとすると下記のエラー
C:\Program Files\NVIDIA Corporation\Gelato\examples\greencyl>gelato greencyl.pyg
Gelato(R) 2.2 Release 1 winnt (Apr 17 2008 11:09:24)
(c) Copyright 2003-2008 NVIDIA Corporation. All Rights Reserved.
ERROR: Input ("greencyl.pyg") --
Couldn't open generator "pyg.generator.dll" for file type "pyg"
with generator search path "C:\Program Files\NVIDIA Corporation\Gelato/lib"
Error returned: Cannot open DSO ((指定されたモジュールが見つかりません。
))
Rendering interrupted after 0.0156s (0.02 s)
ERROR:
Couldn't open generator "pyg.generator.dll" with generator search path c:\program files\nvidia corporation\gelato/lib
●原因わかりました。
dllの橋渡しをしてくれるmsvcp71.dllとmsvcr71.dllが必要でした。
windows\system32に入れたら動きました。
結局使ってるマシンのvista 32bitでは確認しておりませんが、
XPを再インストールして発見した問題でした。
使ってるマシン、64bitはチップセツトが対応していないことが判明。
よって、インストールできず、買ってきたメモリと64bit Vista余ってます。泣ける。
python cgkitも上記のdllが必要です。
うまく動いてよかったです。
ありがとうございます。
LightFlow コマンドプロンプトが面倒な人のために
本来ならば,LightFlowのExampleフォルダの中で
コマンドプロンプトを立ち上げて,
>"C:\program files\python\python" ball1.py
と打ち込んでレンダリングするとTGAファイルを出力しますが,
以下のファイルをメモ帳などのエディタを使ってコピペして
保存ファイル名を「lightflow.cmd」としてください。
@ECHO OFF
FOR %%I IN (%1) DO (
cd "%%~dpI"
"C:\Program Files\python\python.exe" %%I
)
pause
メモ帳で保存する際は,ファイルの種類を「すべてのファイル(*.*)」にしてから「lightflow.cmd」と打ち込んで保存します。
できあがったlightflow.cmdをExampleフォルダに入れておき,
例えば、
マウスを使って,ファイルball1.pyをドラッグ・アンド・ドロップでlightflow.cmdに当ててあげます。
すると,コマンドプロンプトの画面が開き,Lightflowによるレンダリングが始まります。
画像ファイルのTGAは同じフォルダに出力できています。
便利な方法ですね。
LightFlow サンプルファイルをダブルクリックしてレンダリングする人のために
Pythonをダブルクリックして起動すると,レンダリングが終了すると黒いウインドウは消えてしまいます。
これだと,どのくらい時間がかかったか,わかりません。
そこで,Pythonの組み込み関数をファイルの最後の行に書き加えて起きます。
raw_input()
ただ,難点はマウスでクリックすると,レンダリング時にできる一時ファイルがゴミとして残ってしまいます。
ですから,リターンキーをたたいてウインドウを終了しましょう。一時ファイルは消去されます。
LightFlow はじめに光ありき その1
Lightflowの使い方を練習してみましょう。シーンをエディタを使って記述します。言語はPythonを使っていますが、基礎的・基本的なPythonを学んでいくことと、3DCGの基礎的・基本的な内容がわかってくれば、Lightflowで遊べるようになります。
Lightflowのレンダリング工程は,
1.シーンを作る。
2.シーンにライトを設定する。
3.シーンにオブジェクトを設定する。
4.シーンをレンダリング
となります。
#は,コメントを書くことができます。
Python1.5.1は日本語に対応していないので,英数字を使ってください。
ただし,Pythonでのファイル名には,先頭に数字がつくファイルは避けてください。(注意 XP,win7では
Python 1.5.2を使っています。)
当然,Metalightなどを使う場合も,メタセコイアで使うオブジェクト名に日本語は使わない注意が必要です。
ファイル内にコメント以外で全角文字が混在しないように注意しましょう。
サンプル例 my_ball1.py
------------------------------------
#! /usr/bin/env python
from lightflowPM import * #解説1
s = scene() #解説2
s.lightOn( s.newLight( "point", [ "position", vector3( 5.0, -5.0, 4.0 ), "color", vector3( 300.0, 300.0, 300.0 ) ] ) ) #解説3
plastic = s.newMaterial( "standard",[ "kc", vector3( 1, 0, 0 ) ] ) #解説4
s.materialBegin( plastic ) #解説5
s.addObject( s.newObject( "sphere", [ "radius", 1.0 ] ) ) #解説6
s.materialEnd()
saver = s.newImager( "tga-saver", [ "file", "my_ball1.tga" ] ) #解説7
s.imagerBegin( saver )
camera = s.newCamera( "pinhole", [ "eye", vector3( 0, -4, 0 ), "aim", vector3( 0, 0, 0 ) ] ) #解説8
s.imagerEnd()
s.render( camera, 300, 300 ) #解説9
-----------------------------------
・解説1 モジュールのインポートです。必ず書いておきます。追加で数学関数などpiを使う場合は,
from math import * と行を追加します。
・解説2 sというシーンを作ります。以下はその内容です。sを操作していきます。
・解説3 ライトをオンにするということです。世界を照らすライトを最初に置くわけですね。ライトの種類point,
ライトの位置positionと,ライトの明るさと色をvector3(Red,Green,Blue)で表します。ここでは300倍しています。
・解説4 質感の設定をします。材質です。ここではplasticという名前で,色合いだけ赤と定義しました。
・解説5 オブジェクト物体にどの材質を割り当てるかを書いてます。↑で書いたplasticを割り当てます。
必ず,s.materialBegin(材質名)〜s.materialEnd()ではさみます。
・解説6 オブジェクトとして半径1.0の球体を位置(0,0,0)に配置しています。
・解説7 レンダリングして保存するファイル名を書いています。TGAファイルです。
・解説8 カメラの位置と注視点(ターゲット,aim)の位置を示します。カメラは( 0, -4, 0 )から、原点(0,0,0)方向を見ています。
・解説9 レンダリングする画像サイズは,300*300pixelsです。小さいほどレンダリングは速く終了します。練習の時は小さいサイズでレンダリングしましょう。
↑にあるサンプル画像は,カメラ位置が,下記になります。
camera = s.newCamera( "pinhole", [ "eye", vector3( 0, -4, 0 ), "aim", vector3( 0, 0, 0 ) ] )
座標軸は右手系
x軸の+が右方向 (親指)
y軸が奥に向かう方向 (人差し指)
z軸が上方向(中指)になります。
下の図のように
X軸→R 赤
Y軸→G 緑
Z軸→B 青
対応している3DCGツールが多いです。
LightFlow はじめに光ありき その2
boxを表現します。
対角線となる始点と終点を決めてあげることで直方体ができます。
カメラの"eye", vector3( 2, -4, 2 )は斜め上から見下ろした感じになります。
サンプル例 my_box1.py
---------------------------------
#! /usr/bin/env python
from lightflowPM import *
s = scene()
s.lightOn( s.newLight( "point", [ "position", vector3( 5.0, -5.0, 4.0 ), "color", vector3( 300.0, 300.0, 300.0 ) ] ) )
plastic = s.newMaterial( "standard",[ "kc", vector3( 1, 0, 0 ) ] )
s.materialBegin( plastic )
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.materialEnd()
saver = s.newImager( "tga-saver", [ "file", "my_box1.tga" ] )
s.imagerBegin( saver )
camera = s.newCamera( "pinhole", [ "eye", vector3( 2, -4, 2 ), "aim", vector3( 0, 0, 0 ) ] )
s.imagerEnd()
s.render( camera, 300, 300 )
------------------------------------
LightFlow はじめに光ありき その3
環境光を加えました。
緑の立方体を加えました。
緑の立方体は原点から移動させました。
サンドイッチのように移動の命令でオブジェクトをはさんであげます。
サンプル例 my_b2.py
-------------------------------
#! /usr/bin/env python
from lightflowPM import *
s = scene()
s.lightOn( s.newLight( "point", [ "position", vector3( 5.0, -5.0, 4.0 ), "color", vector3( 300.0, 300.0, 300.0 ) ] ) )
s.lightOn( s.newLight( "ambient", [ "color", vector3( 0.3, 0.3, 0.3 ) ] ) ) #環境光を加える。
plastic = s.newMaterial( "standard",[ "kc", vector3( 1, 0, 0 ) ] ) #赤
plastic2 = s.newMaterial( "standard",[ "kc", vector3( 0, 1, 0 ) ] ) #緑
s.materialBegin( plastic ) #赤の箱は原点にある。
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.materialEnd()
s.materialBegin( plastic2 )
s.transformBegin( transform().translation( vector3(-3.0,0,0))) #緑の箱をx方向に-3移動させた。
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.transformEnd()
s.materialEnd()
saver = s.newImager( "tga-saver", [ "file", "my_b2.tga" ] )
s.imagerBegin( saver )
#カメラは真正面の上の方から見ています。
camera = s.newCamera( "pinhole", [ "eye", vector3( 0, -10, 5 ), "aim", vector3( 0, 0, 0 ) ] )
s.imagerEnd()
s.render( camera, 300, 300 )
-------------------------------------
LightFlow はじめに光ありき その4
数学モジュールを加えました。
新たに青い立方体を加えました。
立方体はまず,Z軸中心に45度回転させます。
つぎにx軸方向に+3させます。
下記を見ると,移動translationから書いてありますが,オブジェクトがある一番内側から,操作していきます。これをスタックといいます。
s.materialBegin( plastic3 )
s.transformBegin( transform().translation( vector3(3.0,0,0)))
s.transformBegin( transform().rotationAroundZ( pi/4 ))
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.transformEnd()
s.transformEnd()
s.materialEnd()
サンプル例 my_b3.py
---------------------------------
#! /usr/bin/env python
from lightflowPM import *
from math import * #数学関数モジュールを使うときに書いておく。ここではpiを利用している。pi=3.14159265358979と円周率です。
s = scene()
s.lightOn( s.newLight( "point", [ "position", vector3( 5.0, -5.0, 4.0 ), "color", vector3( 300.0, 300.0, 300.0 ) ] ) )
s.lightOn( s.newLight( "ambient", [ "color", vector3( 0.3, 0.3, 0.3 ) ] ) ) #環境光を加える。
plastic = s.newMaterial( "standard",[ "kc", vector3( 1, 0, 0 ) ] ) #赤
plastic2 = s.newMaterial( "standard",[ "kc", vector3( 0, 1, 0 ) ] ) #緑
plastic3 = s.newMaterial( "standard",[ "kc", vector3( 0, 0, 1 ) ] ) #青
s.materialBegin( plastic ) #赤の箱は原点にある。
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.materialEnd()
s.materialBegin( plastic2 )
s.transformBegin( transform().translation( vector3(-3.0,0,0))) #緑の箱をx方向に-3移動させた。
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.transformEnd()
s.materialEnd()
s.materialBegin( plastic3 )#青の箱をZ軸中心に45度回転させ,x方向に3移動させた。
s.transformBegin( transform().translation( vector3(3.0,0,0)))
s.transformBegin( transform().rotationAroundZ( pi/4 )) #ラジアンで求める。piは180度だから,180÷4=45度になる。よって弧度法で表現するから3.141592/4.0でもよい。
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.transformEnd()
s.transformEnd()
s.materialEnd()
saver = s.newImager( "tga-saver", [ "file", "my_b3.tga" ] )
s.imagerBegin( saver )
#カメラは真正面の上の方から見ています。
camera = s.newCamera( "pinhole", [ "eye", vector3( 0, -10, 5 ), "aim", vector3( 0, 0, 0 ) ] )
s.imagerEnd()
s.render( camera, 300, 300 )
---------------------------------
LightFlow 地面を加える
白色の地面groundをpatchで作成しています。高さ(z軸)を-1.0にしてぴったり立方体とあわせています。
サンプル例 my_b3ground.py
----------------------------------
#! /usr/bin/env python
from lightflowPM import *
from math import *
s = scene()
s.lightOn( s.newLight( "point", [ "position", vector3( 5.0, -5.0, 4.0 ), "color", vector3( 300.0, 300.0, 300.0 ) ] ) )
s.lightOn( s.newLight( "ambient", [ "color", vector3( 0.3, 0.3, 0.3 ) ] ) ) #環境光を加える。
plastic = s.newMaterial( "standard",[ "kc", vector3( 1, 0, 0 ) ] ) #赤
plastic2 = s.newMaterial( "standard",[ "kc", vector3( 0, 1, 0 ) ] ) #緑
plastic3 = s.newMaterial( "standard",[ "kc", vector3( 0, 0, 1 ) ] ) #青
ground=s.newMaterial( "standard",[ "kc", vector3( 1, 1, 1 ) ] ) #白
s.materialBegin( plastic )
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.materialEnd()
s.materialBegin( plastic2 )
s.transformBegin( transform().translation( vector3(-3.0,0,0)))
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.transformEnd()
s.materialEnd()
s.materialBegin( plastic3 )
s.transformBegin( transform().translation( vector3(3.0,0,0)))
s.transformBegin( transform().rotationAroundZ( pi/4 ))
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.transformEnd()
s.transformEnd()
s.materialEnd()
#白色の地面groundをpatchで作成しています。高さ(z軸)を-1.0にしてぴったり立方体とあわせています。
s.materialBegin( ground )
s.addObject( s.newObject( "patch", [ "points",vector3( -50, -50, -1.0 ),vector3( -50, 50, -1.0 ),vector3( 50, -50, -1.0 ),vector3( 50, 50, -1.0 )] ) )
s.materialEnd()
saver = s.newImager( "tga-saver", [ "file", "my_b3ground.tga" ] )
s.imagerBegin( saver )
camera = s.newCamera( "pinhole", [ "eye", vector3( 0, -10, 5 ), "aim", vector3( 0, 0, 0 ) ] )
s.imagerEnd()
s.render( camera, 300, 300 )
LightFlow 地面を加えて,様々な色の立方体を配置する
試してみました。
赤色の立方体が原点にあります。
後は3ずつ前後左右に移動させています。
サンプルmy_b7.py
----------------------------------------------------
#! /usr/bin/env python
from lightflowPM import *
from math import * #数学関数モジュールを使うときに書いておく。ここでは円周率piを利用している。pi=3.14159265358979です。
s = scene()
s.lightOn( s.newLight( "point", [ "position", vector3( 3.0, -5.0, 8.0 ), "color", vector3( 300.0, 300.0, 300.0 ) ] ) )
s.lightOn( s.newLight( "ambient", [ "color", vector3( 0.2, 0.2, 0.2 ) ] ) ) #環境光を加える。
plastic = s.newMaterial( "standard",[ "kc", vector3( 1, 0, 0 ) ] ) #赤
plastic2 = s.newMaterial( "standard",[ "kc", vector3( 0, 1, 0 ) ] ) #緑
plastic3 = s.newMaterial( "standard",[ "kc", vector3( 0, 0, 1 ) ] ) #青
plastic4 = s.newMaterial( "standard",[ "kc", vector3( 1, 1, 0 ) ] ) #黄色
plastic5 = s.newMaterial( "standard",[ "kc", vector3( 1, 0, 1 ) ] ) #紫
plastic6 = s.newMaterial( "standard",[ "kc", vector3( 0, 1, 1 ) ] ) #水色
plastic7 = s.newMaterial( "standard",[ "kc", vector3( 1, 1, 1 ) ] ) #青
ground=s.newMaterial( "standard",[ "kc", vector3( 1, 1, 1 ) ] ) #地面
s.materialBegin( plastic ) #赤の箱は原点にある。
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.materialEnd()
s.materialBegin( plastic2 )
s.transformBegin( transform().translation( vector3(-3.0,0,0))) #緑の箱をx方向に-3移動させた。
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.transformEnd()
s.materialEnd()
s.materialBegin( plastic3 )
s.transformBegin( transform().translation( vector3(3.0,0,0)))
s.transformBegin( transform().rotationAroundZ( pi/4 ))
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.transformEnd()
s.transformEnd()
s.materialEnd()
s.materialBegin( plastic4 )
s.transformBegin( transform().translation( vector3(0,0.75,3.0)))
s.transformBegin( transform().rotationAroundZ( pi/6 ))
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.transformEnd()
s.transformEnd()
s.materialEnd()
s.materialBegin( plastic5 )
s.transformBegin( transform().translation( vector3(-5.0,4.0,0)))
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.transformEnd()
s.materialEnd()
s.materialBegin( plastic6 )
s.transformBegin( transform().translation( vector3(3.0,3.0,0)))
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.transformEnd()
s.materialEnd()
s.materialBegin( plastic7 )
s.transformBegin( transform().translation( vector3(-0.9,-3.5,0)))
s.transformBegin( transform().rotationAroundZ( -pi/10 ))
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.transformEnd()
s.transformEnd()
s.materialEnd()
s.materialBegin( ground )
s.addObject( s.newObject( "patch", [ "points",vector3( -50, -50, -1.0 ),vector3( -50, 50, -1.0 ),vector3( 50, -50, -1.0 ),vector3( 50, 50, -1.0 )] ) )
s.materialEnd()
saver = s.newImager( "tga-saver", [ "file", "my_b7.tga" ] )
s.imagerBegin( saver )
#カメラは真正面の上の方から見ています。
camera = s.newCamera( "pinhole", [ "eye", vector3( 0, -10, 7 ), "aim", vector3( 0, 0, 0 ),"aa-samples", 3,5 ] ) #ギザギザを減らす、時間かかる。通常は"aa-samples", 2,4
s.imagerEnd()
s.render( camera, 300, 300 )
LightFlow 地面をチェック模様にする
下記のようにマテリアルを変更追加しました。
check_ground=s.newPattern("check",["color",vector3( 0.1, 1.0, 0.1 ),"scale",0.025])
ground=s.newMaterial( "standard",[ "kc", check_ground,"kc",vector3( 1.0, 1.0, 1.0 ),"ka",check_ground ] ) #チェック緑
以下、サンプル。
#! /usr/bin/env python
from lightflowPM import *
from math import *
s = scene()
s.lightOn( s.newLight( "point", [ "position", vector3( 5.0, -5.0, 4.0 ), "color", vector3( 300.0, 300.0, 300.0 ) ] ) )
s.lightOn( s.newLight( "ambient", [ "color", vector3( 0.3, 0.3, 0.3 ) ] ) )
plastic = s.newMaterial( "standard",[ "kc", vector3( 1, 0, 0 ) ] )
plastic2 = s.newMaterial( "standard",[ "kc", vector3( 1, 1, 0 ) ] )
check_ground=s.newPattern("check",["color",vector3( 0.1, 1.0, 0.1 ),"scale",0.025]) #チェック緑
ground=s.newMaterial( "standard",[ "kc", check_ground,"kc",vector3( 1.0, 1.0, 1.0 ),"ka",check_ground ] ) #チェックkc 1 1 1は白
s.materialBegin( plastic )
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.materialEnd()
s.materialBegin( plastic2 )
s.transformBegin( transform().translation( vector3(-3.0,0,0)))
#s.transformBegin( transform().rotationAroundY( pi/7.0 ))
#s.transformBegin( transform().scaling( vector3(2,2,2)))
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
#s.transformEnd()
#s.transformEnd()
s.transformEnd()
s.materialEnd()
s.materialBegin( ground )
s.addObject( s.newObject( "patch", [ "points",vector3( -50, -50, -1.0 ),vector3( -50, 50, -1.0 ),vector3( 50, -50, -1.0 ),vector3( 50, 50, -1.0 )] ) )
s.materialEnd()
saver = s.newImager( "tga-saver", [ "file", "my_box8.tga" ] )
s.imagerBegin( saver )
camera = s.newCamera( "pinhole", [ "eye", vector3( 0, -10, 5 ), "aim", vector3( 0, 0, 0 ) ] )
s.imagerEnd()
s.render( camera, 300, 300 )
1/2 >>