render
指定のソース イメージから、専用のライト リグを作成します。 このコマンドの機能は、[ライト]メニューから[イメージからライト
リグ]を選択する操作に相当します。
ライト リグは、ソース イメージのライティングのカラー、方向、強度をシミュレートした一連の平行光です。 ライトは平行光ですので、シーン
オブジェクトは場所とは無関係に同様に光ります。ライトの位置やリグのサイズについて注意する必要はありません。
注: このライト リグと LightRig プログラミング
オブジェクトを混同しないでください。 シーン内のライト リグを検索すると、X3DObject.AddLightRig
メソッドで作成されたオブジェクトは TypeName または「LightRig」という Application.ClassName
値を持ちます。一方、このコマンドで作成したライト リグは Null
オブジェクトのままです。 詳細については、例を参照してください。
注: このコマンドは、出力引数を使用します。 一部のスクリプト言語(JScript や Python
など)は、リファレンスによって渡される引数をサポートしません。
戻り値の配列を使って出力引数を取得する方法の詳細については、「出力引数、戻り値、および出力値の配列」を参照してください。
CreateLightRigFromImage( [Filename], [Number_Layers], [AreaHigh], [LightDistHigh] ); |
| パラメータ | タイプ | 詳細 |
|---|---|---|
| Filename | 文字列 | 対応しているイメージ フォーマットは、.pic および .hdr です。
イメージには必ず球体マップ(経度/緯度タイプのイメージ)を使用してください。 HDR
イメージを使用すると、コントラストが強く見栄えのよいライティングを作成できます。
最も明るい部分と最も暗い部分に十分なコントラストがある限り、大きなイメージを使用する必要はありません。 推奨解像度は 400 ×
200 です。 低い解像度のイメージを使用すると、処理時間が短くなります。
デフォルト値: " empty " |
| Number_Layers | Integer | 作成される輝度レイヤの数を制限します。 レイヤを多数使用すると、処理時間が長くなり、メモリの割り当て量が増大します
(推奨する値は 3 から 5 です)。
デフォルト値: 3 |
| AreaHigh | Float | レイヤから抽出する輝度の量を決定します。 高い値はより多くの輝度を表し、結果としてより多くのライトが挿入されることになります。
デフォルト値: 20 |
| LightDistHigh | Float | ライト間の距離(イメージの比率)。 値が低いほど、より多くのライトが挿入されます。
デフォルト値: 40 |
'
' This example demonstrates how to use a PIC file to create a
' special light rig with several infinite lights. It also shows
' how to find the light rig in your scene (since the newly-created
' object is not returned as part of the CreateLightRigFromImage command).
'
' Note: A number of different strategies are presented here, since there
' is no "LightRig" filter. You can deploy whichever best suits your needs.
'
'-----------------------------------------
' CREATING THE LIGHT RIG
'
NewScene , false
' Create a couple of nulls (just to make it interesting)
ActiveSceneRoot.AddNull "Danny"
ActiveSceneRoot.AddNull "Fanny"
' For more sport, add an infinite type light rig using the object model
ActiveSceneRoot.AddLightRig "Infinite", "Almighty"
' Create the light rig from one of the sample image PIC files
CreateLightRigFromImage InstallationPath( siFactoryPath ) _
& "\Data\XSI_SAMPLES\Pictures\xsilogo.pic", 3, 20, 40
'-----------------------------------------
' SEARCHING AMONGST THE NULLS
'
' First, get a collection of nulls just for comparison
Set oNullList = ActiveSceneRoot.FindChildren( , siNullPrimType )
showCollectionInfo oNullList
'OUTPUT:
'INFO : "-----------------"
'INFO : "Found 3 rig(s) in this collection:"
'INFO : " Danny"
'INFO : " Fanny"
'INFO : " LightRig"
' Or we can build a collection of light rigs based on which nulls have lights
' for children (because presumably only light rigs will have lights for children)
Set oLRColl = CreateObject( "XSI.Collection" )
oLRColl.SetAsText buildLRCollFromNulls( ActiveSceneRoot.FindChildren( , siNullPrimType ) )
showCollectionInfo oLRColl
'OUTPUT:
'INFO : "-----------------"
'INFO : "Found 1 rig(s) in this collection:"
'INFO : " LightRig"
' Or we can filter the oNullList collection or use the collection Filter on the whole
' scene by restricting our list to only nulls that contain 'rig' in their name
Set oNullList = oNullList.Filter( siNullPrimType,, "*rig*" )
showCollectionInfo oNullList
'OUTPUT:
'INFO : "-----------------"
'INFO : "Found 1 rig(s) in this collection:"
'INFO : " LightRig"
'-----------------------------------------
' LOOKING BY NAME
'
Set oRigs = ActiveSceneRoot.Children.Filter( siNullPrimType,, "*rig*" )
showCollectionInfo oRigs
' Now look for LightRig objects under the scene root
Set oLRigs = ActiveSceneRoot.FindChildren( "LightRig" )
showCollectionInfo oLRigs
'OUTPUT:
'INFO : "-----------------"
'INFO : "Found 1 rig(s) in this collection:"
'INFO : " LightRig"
'-----------------------------------------
' FINDING THE WRONG LIGHT RIG
'
' What about the other light rig in the scene? We can get all the lights in
' the scene, find their parents and add each one with the "LightRig" typename
' to a new collection
Set oLights = ActiveSceneRoot.FindChildren( , , siLightPrimitiveFamily )
Set oLRColl = CreateObject( "XSI.Collection" )
oLRColl.SetAsText buildLRCollFromLights( oLights )
showCollectionInfo oLRColl
'-----------------------------------------
' HELPER FUNCTIONS
'
function showCollectionInfo( in_coll )
If TypeName( in_coll ) <> "Nothing" _
AND in_coll.Count > 0 Then
LogMessage "-----------------"
LogMessage "Found " & in_coll.Count & " rig(s) in this collection:"
For Each mbr In in_coll
LogMessage vbTab & mbr.FullName
Next
Else
LogMessage "None found."
End If
end function
function buildLRCollFromLights( in_light_coll )
If in_light_coll.Count > 0 Then
Set oCLRColl = CreateObject( "XSI.Collection" )
For Each mbr In in_light_coll
' This makes sure we add only true LightRig objects, not the
' ones we created with the CreateLightRigFromImage command,
' but with the X3DObject.AddLightRig method
If TypeName( mbr.Parent ) = "LightRig" Then
oCLRColl.Add mbr.Parent
End If
Next
Else
LogMessage "Specified collection is empty."
End If
buildLRCollFromLights = oCLRColl
end function
function buildLRCollFromNulls( in_null_coll )
If in_null_coll.Count > 0 Then
Set oCLRColl = CreateObject( "XSI.Collection" )
For Each mbr In in_null_coll
' This looks for a light amongst the children of the null in
' the current collection, assuming that only nulls that are
' light rigs have lights for children
If mbr.Children.Filter( , siLightPrimitiveFamily ).Count > 0 Then
oCLRColl.Add mbr
End If
Next
Else
LogMessage "Specified collection is empty."
End If
buildLRCollFromNulls = oCLRColl
end function
|