1/2 >>
Ayam1.13と3Delight
Ayam側では,3DelightのShaderを認識しない。Parserが,3Delight5.0.2対応である。そのため新しい3Delight6.5をインストールした場合は,
新たにAyamのプラグインをayslo3d.dllをコンパイルして作成しなければならない。
■必要なもの
C:/Program Files/3Delightに3Delightをインストールしておく。
Visual C++ 2005 Expressをダウンロードしてインストール
Platform SDKをダウンロードしてインストール
Visual C++ 2005 Expressで"Tools/Options/Projects and Solutions/VC++ Direcories"のパスを指定。
続いてayam1.12.VC2005.zipをダウンロードした。
C:\Ayam-VC2005に解凍。
ここから大事なのは,Releaseフォルダを新たに作成しておくこと。
でないと,Buildするとエラーが出ていた。
C:\Ayam-VC2005\tcl8.2.3\generic\Release
C:\Ayam-VC2005\tcl8.2.3\win\Release
C:\Ayam-VC2005\tk8.2.3\generic\Release
C:\Ayam-VC2005\tk8.2.3\win\Release
Visual C++ 2005 Expressを起動。Ayam.slnを起動
プラグインのプロジェクトをayslo3d-plugin.vcprojをbuildする。
C:\Ayam-VC2005\ayam\bin\pluginsにayslo3d.dllが作成される。
できたayslo3d.dllをAyam1.13のと入れ替える。
以上。
AreaLightを使う
Ayamのレンダラーを3Delightに設定して,サンプルのArealight.ayを試してみたが,うまくいかない。
出力されたRIBをいじってみる。
まず,レイトレーシングを行うので,WorldBeginの前に追加。
Attribute "visibility" "transmission" [ "opaque" ]
AreaLightSourceの次の行の,
Interior "arealight" "intensity" [ 150.000000 ] "lightcolor" [ 1.000000 1.000000 1.000000 ] を行削除。
Attribute "light" "nsamples" [ 16 ]を追加しておく。
すると,こんな感じになる。
Attribute "visibility" "transmission" [ "opaque" ]
WorldBegin
#Lights!
TransformBegin
ConcatTransform [ 1.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 0.000000 1.000000 ]
AttributeBegin
Attribute "light"
Declare "intensity" "float"
Declare "lightcolor" "color"
Attribute "light" "nsamples" [ 16 ]
AreaLightSource "arealight" 0 "intensity" [ 150.000000 ] "lightcolor" [ 1.000000 1.000000 1.000000 ]
AttributeBegin
TransformBegin
Translate 0.000000 12.634600 0.249141
Scale 10.000000 1.000000 10.000000
Patch "bilinear" "P" [ -0.500000 -0.000000 -0.500000 0.500000 -0.000000 -0.500000 -0.500000 0.000000 0.500000 0.500000 0.000000 0.500000 ]
TransformEnd
AttributeEnd
AttributeEnd
Illuminate 0 1
TransformEnd
これらの設定をAyamのTag部分に記述したりと設定ができると有り難いが
うまくいかない。
またBMRTに対応している以下の行は全て削除した。
Exposure 1.000000 1.000000
Quantize "rgba" 255 0 255 0.500000
Declare "minsamples" "integer"
Option "render" "minsamples" [ 4 ]
Declare "maxsamples" "integer"
Option "render" "maxsamples" [ 64 ]
Declare "max_raylevel" "integer"
Option "render" "max_raylevel" [ 8 ]
Declare "minshadowbias" "float"
Option "render" "minshadowbias" [ 0.010000 ]
Declare "prmanspecular" "integer"
Option "render" "prmanspecular" [ 1 ]
Declare "steps" "integer"
Option "radiosity" "steps" [ 64 ]
Declare "minpatchsamples" "integer"
Option "radiosity" "minpatchsamples" [ 4 ]
Declare "texturememory" "integer"
Option "limits" "texturememory" [ 10000 ]
Declare "geommemory" "integer"
Option "limits" "geommemory" [ 40000 ]
いろいろと試行錯誤ですね。
C API
RenderManの本,「実践CGの誘い」コンパニオンのサンプルをコンパイルしてみる。
3Delightだと,マイコンピュータの環境変数DELIGHTの箇所に
"C:\Program Files\3Delight"と,""でくくっておくこと。
再起動して,Visual Studio 2005のコマンドプロンプトから,
>cl /I%DELIGHT%/include %DELIGHT%/lib/3delight.lib listing2_1.c
すると,
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
listing2_1.c
Microsoft (R) Incremental Linker Version 8.00.50727.42
Copyright (C) Microsoft Corporation. All rights reserved.
/out:listing2_1.exe
"C:\Program Files\3Delight/lib/3delight.lib"
listing2_1.obj
後は,3Delightのライセンスサーバを起動しておいて,
>listing2_1.exe
TIFFが出力されました。
「実践CGの誘い」から
3DelightとVisual C++を使ってコンパイルしてみた。
RMRのソースファイルのmainにそれぞれのリストのサンプルをあわせてコンパイルした。勉強になります。
List2-2
List2-3
List2-4の色を変更
List2-5の色を変更
List2-7とList2-3を使ってインスタンスしている。
アニメーションの出力
サンプルを動かしてみる。エラーが出ましたが,実行して連番TIFFが出力されました。
C:\3Dlight6>cl /I%DELIGHT%/include %DELIGHT%/lib/3delight.lib anim2_8.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
anim2_8.c
anim2_8.c(21) : warning C4996: 'sprintf' was declared deprecated
C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\stdio.h(345) : see
declaration of 'sprintf'
Message: 'This function or variable may be unsafe. Consider using sprint
f_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'
anim2_8.c(82) : warning C4033: 'ColorCube' must return a value
c:\3dlight6\anim2_8.c(108) : warning C4716: 'ColorCube' : must return a value
Microsoft (R) Incremental Linker Version 8.00.50727.42
Copyright (C) Microsoft Corporation. All rights reserved.
/out:anim2_8.exe
"C:\Program Files\3Delight/lib/3delight.lib"
anim2_8.obj
C:\3Dlight6>anim2_8.exe
良いですね。以下の10枚が出力されました。
2次曲面
Cのファイルが関数ごとに分割されてコンパイルする場合は,
>cl /I%DELIGHT%/include %DELIGHT%/lib/3delight.lib quadmain.c listing4_1.c
mainのファイルの後に続けて関数が入ったファイルを続ける。
Windowsの環境変数のなかのDELIGHTのパスに" "をつけると良いと,以前書いたが,フローティングサーバを起動している場合はライセンスエラーになることがわかった。
コンパイルする際に"%DELIGHT%"と" "で囲んであげると良いようだ。
RC本の第4章をコンパイルしてみた。
6種類の2次曲面。List4-1
回転体。List4-2
RiTorusで波形の模様を生成する。List4-3
多角形
回転体によるポリゴンの作成。第5章。
RC本のリスト。うまくコンパイルできなくて悩んでいたら,misc.tarとch5.tarがあるではありませんか。Camera位置なども含めて,うまくコンパイルできました。ありがとうございます。先人の教え,勉強です。
それぞれのヘッダファイルを加えてコンパイルしました。
>cl /I%DELIGHT%/include %DELIGHT%/lib/3delight.lib main.c listing5_3.c listing8_2.c listing8_3.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
main.c
listing5_3.c
listing8_2.c
listing8_3.c
Generating Code...
c:\3dlight6\ch5\listing5_3.c(65) : warning C4716: 'PolySurfOR' : must return a value
c:\3dlight6\ch5\listing5_3.c(123) : warning C4716: 'PolyBoid' : must return a value
Microsoft (R) Incremental Linker Version 8.00.50727.42
Copyright (C) Microsoft Corporation. All rights reserved.
/out:main.exe
"C:\Program Files\3Delight/lib/3delight.lib"
main.obj
listing5_3.obj
listing8_2.obj
listing8_3.obj
List5-1
List5-2
パラメトリック面,ジオメトリック変換と階層モデリング
RCの第6章と第7章のコンパイルを行いました。
7章のCSG作成では,以下のように行う。
>cl /I%DELIGHT%/include %DELIGHT%/lib/3delight.lib main.c surf_go.c listing8_2.c listing8_3.c
>cl /I%DELIGHT%/include %DELIGHT%/lib/3delight.lib main.c wedge_go.c listing8_2.c listing8_3.c
アルファチャンネルで抜けているがPNGにしたら,ちょっと青みがかっています。以下は,コンパイルしたリスト。
listing6_1
listing6_2
listing6_3
listing7_2
listing7_3
listing7_4
The DynamicLoad Procedural Primitive
DSOを作成してみた。
3Delightマニュアルのsponge.cをコンパイルしてみる。
>CL /Ox /DWIN32 /LD /I%DELIGHT%/include sponge.c %DELIGHT%/lib/3D
elight.lib
sponge.dllができる。
以下,sponge.ribとして作成。
Display "sponge2.tiff" "file" "rgb"
Format 320 240 -1
ShadingRate 1
Projection "perspective"
Translate 0 -2.5 2.5
Rotate -10 1 0 0
Rotate -40 0 1 0
WorldBegin
TransformBegin
Translate 0 2 0.5
Procedural "DynamicLoad" ["sponge" "3"] [-1 1 -1 1 -1 1]
TransformEnd
WorldEnd
>renderdl sponge.ribでできあがり。
続きを読む>>
Spotlight設定
メタセコイアで作った簡単なシーンをmetasequoia pythonでRIB出力した。オブジェクトはスムージングを計算するしないを選択できるように、オブジェクト名にno_をつけておく。
オブジェクト名がdistantlight,spotlight,maya_spotlightであると、3delightのシェーダを出力する。影はレイトレーシングを利用できるようにスクリプトを設定した。
ここでは、出力したライトのカラーを変更した。明るさintensityも調整する。当初spotlightのintensityを大きくしても変化しなかったが、距離を地面近くまでもってきたら、かすかに光る。何とintensity 700000と、とんでもない数字を入れたら、それらしく見えるようになった。
以下は、ライトの設定部分です。まだまだ課題はたくさんあります。
ありがとうございます。
Attribute "visibility" "trace" [1]
Attribute "visibility" "transmission" ["Os"]
Attribute "visibility" "transmission" "opaque"
Attribute "light" "shadows" "on"
LightSource "spotlight" 2
"from" [250.0 380.0 -340.0]
"to" [0.0 0.0 -0.0]
"lightcolor" [0.800 0.100 0.100]
"string shadowmap" "raytrace"
"float intensity" 400000
"float coneangle" 0.52
"float conedeltaangle" 0.52
LightSource "ambientlight" 3
"lightcolor" [0.300 0.300 0.300]
LightSource "maya_spotlight" 4
"from" [250.0 340.0 340.0]
"to" [0.0 0.0 -0.0]
"lightcolor" [0.100 0.100 0.800]
"string shadowmapname" "raytrace"
"float intensity" 1.0
"float coneangle" 0.8
"float penumbraangle" 0.15
1/2 >>