CreateLightRigFromImage

カテゴリ

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

VBScript の例

'
'       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

関連項目

CreateImageBasedLightingPass X3DObject.AddLightRig