指定のソース イメージから、専用のライト リグを作成します。このコマンドの機能は、[ライト]メニューから[イメージからライト リグ]を選択する操作に相当します。
ライト リグは、ソース イメージのライティングのカラー、方向、強度をシミュレートした一連の平行光です。 ライトは平行光ですので、シーン オブジェクトは場所とは無関係に同様に光ります。ライトの位置やリグのサイズについて注意する必要はありません。
注: このライト リグと 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 | 浮動小数 |
レイヤから抽出する輝度の量を決定します。 高い値はより多くの輝度を表し、結果としてより多くのライトが挿入されることになります。
デフォルト値: 20 |
LightDistHigh | 浮動小数 |
ライト間の距離(イメージの比率)。 値が低いほど、より多くのライトが挿入されます。
デフォルト値: 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 |