Inheritance |
|
IPRビューアは、まず最初に大まかなレンダー画像のビューを用意し、徐々に完全にレンダリングされた画像を表示するといったように レンダーを徐々に精密化していきます。 シェーダ値を変更したり、オブジェクトを動かしたりすると、そのビューアは画像を再レンダリングします。
レンダリング画像内のピクセルをCtrlクリックすると、Houdiniは、$HOUDINI_PATH
からscripts/ipr/pickpixel.py
を検索して、それを実行します。
Houdiniに元々から入っているこのファイルのバージョンでは、ピクセルに寄与しているシェーダをポップアップし、シェーダがなければ情報ウィンドウをポップアップします。
HoudiniがそのPythonファイルを見つけることができなかった場合は、次にscripts/ipr/pickpixel.cmd
のHScriptファイルを検索します。
SHOPノードをレンダリング画像上にドラッグすると、Houdiniは、scripts/ipr/dragdrop.py
を検索してそれを実行します。
デフォルトでは、このスクリプトは、そのSHOPをそのピクセルに寄与しているオブジェクトに割り当てます。
HoudiniがそのPythonバージョンのファイルを見つけることができなかった場合は、次にscripts/ipr/dragdrop.cmd
のHScriptファイルを検索します。
hou.IPRViewer.lastClickLocationを使用することで、シェルフスクリプトからユーザがクリックした最後の位置にアクセスすることができます。
メソッド ¶
isPaused()
→ bool
IPRセッションが休止中かどうかを示します。アクティブセッションがなければ、これはFalseを返します。
isRendering()
→ bool
IPRセッションのレンダリングが進行中かどうかを示します。 レンダリングが休止中であってもTrueを返します。
isActive()
→ bool
アクティブなIPRセッションが存在するかどうかを示します。
killRender()
アクティブIPRセッション(あれば)をKillします。
pauseRender()
アクティブIPRセッション(あれば)を休止します。
resumeRender()
アクティブIPRセッション(1つあれば)を再開します。
startRender()
アクティブIPRセッションがなければ新しくレンダーを開始し、あればレンダーを再開します。
isPreviewOn()
→ bool
Previewチェックボックスにチェックが付いているかどうか返します。 チェックが付いていない時、ビューアはIPRを使用して画像を徐々に精密化せず、 その代わりにROPノードのレンダリングエンジンを使用してレンダリングをします。
hou.IPRViewer.setPreviewも参照してください。
setPreview(on)
Previewチェックボックスのチェックを付けたり外します。
詳細は、hou.IPRViewer.isPreviewOnを参照してください。
isAutoSaveOn()
→ bool
Auto Saveトグルが選択されているかどうかを返します。トグルが有効だった時、 IPRは定期的にレンダープログレスを自動保存ファイルパスに保存します。 この保存の間隔は、Auto Save Timeで設定することができます。
hou.IPRViewer.setAutoSaveも参照してください。
setAutoSave(on)
Auto Saveトグルを設定または設定解除します。
詳細は、hou.IPRViewer.isAutoSaveOnを参照してください。
autoSavePath()
→ str
レンダー保存パスを返します。 これは、IPRビューアが自動的にレンダープログレスをディスクに保存するように設定されている時に使用されるパスです。
hou.IPRViewer.setSavePathも参照してください。
setAutoSavePath(path)
レンダープログレス保存パスを設定します。
詳細は、hou.IPRViewer.autoSavePathを参照してください。
autoSaveTime()
→ float
IPR自動保存の間隔(秒)を返します。自動保存が有効な時、レンダープログレス画像が、この間隔で書き出されます。
hou.IPRViewer.setAutoSaveTimeも参照してください。
isAutoUpdateOn()
→ bool
Auto-Updateチェックボックスにチェックが付いているかどうか返します。 チェックが付いていない時、オブジェクト、シェーダ、ライトなどを変更してもビューアは更新されません。 この場合、Renderボタンをクリックすることで強制的に再レンダリングさせることができます。
hou.IPRViewer.setAutoUpdateも参照してください。
setAutoUpdate(on)
Auto-Updateチェックボックスのチェックを付けたり外します。
詳細は、hou.IPRViewer.isAutoUpdateOnを参照してください。
delay()
→ float
ビューアのDelayフィールドの内容を返します。この値は、パラメータを変更してから再レンダリングを開始するまでのHoudiniの待ち時間を決定します。
setDelay(time)
ビューアのDelayフィールドの内容を設定します。
詳細は、hou.IPRViewer.delayを参照してください。
updateTime()
→ float
ビューアのUpdate Timeフィールドの内容を返します。 この値は、徐々にレンダリングが精密化されていくおよその長さを決定します。 値が小さいほどより頻繁にレンダリングされ、ディテールがより細かくなります。
setUpdateTime(time)
ビューアのUpdate Timeフィールドの内容を設定します。
詳細は、hou.IPRViewer.updateTimeを参照してください。
lastClickLocation()
→ (int
, int
)
IPRビューア内でユーザが最後にクリックしたピクセル位置のxとyの座標を返します。 この位置は画像の範囲外になることがあります。つまり、xとyの座標がマイナスになったり、画像解像度以上になることがあります。 ビューア内でユーザがまったくクリックしなかった場合、xとyの座標はマイナスになります。
通常では、このメソッドはシェルフスクリプトからコールします。 例えば、ユーザはIPRビューア内のピクセルをクリックしてから、シェルフをクリックすることで、そのピクセルに対してアクション (例えば、シェーダパラメータの表示やシェーダの割当など)を実行することができます。
ピクセル座標の有効範囲を取得するには、hou.IPRViewer.imageResolutionを使用します。
ピクセル上をCtrlクリックすると、Houdiniは$HOUDINI_PATH
からscripts/ipr/pickpixel.py
を検索して、それを実行します。
このスクリプトは、kwargs["viewer"]
を使ってビューアにアクセスし、kwargs["position"]
を使ってユーザがクリックした位置を取得することができます。
以下のスクリプトは、ユーザが最後にクリックしたピクセルに該当するシェーダのフローティングパラメータウィンドウを開きます。
viewer = hou.ui.paneTabOfType(hou.paneTabType.IPRViewer) px, py = viewer.lastClickLocation() if (px < 0 or px > viewer.imageResolution()[0] or py < 0 or py >= viewer.imageResolution()[1]): hou.ui.displayMessage("Click on the image and then run this script again") else: material = viewer.materialNode(px, py) if material is not None: parm_window = hou.ui.curDesktop().createFloatingPaneTab( hou.paneTabType.Parm) parm_window.setCurrentNode(material) parm_window.setPin(True) else: hou.ui.displayMessage("Click on an object to bring up the shader.")
ropNode()
→ hou.RopNode or None
ビューアで選択されているROPノードを返します。何も選択されていなければ、None
を返します。
setRopNode(rop_node)
レンダリングに使用するROPノードを設定します。
imageResolution()
→ (int
, int
)
画像の解像度を返します。
ビューアに画像が含まれていなければ、hou.OperationFailedを引き起こします。
cropRegion()
→ (float
, float
, float
, float
)
選択されているサブ領域を正規化した座標のx0
, x1
, y0
, y1
を返します。
(x0, y0)
はサブ領域の左下コーナー、(x1, y1)
は右上コーナーです。
オプションでIPRビューアに画像の一部だけを再レンダリングするようにさせることができます。 画像の一部を選択するには、Shiftを押しながら矩形選択します。
左下コーナーが(0.0, 0.0)
で、右上コーナーが(1.0, 1.0)
です。
例えば、画像全体がレンダリングされていれば、このメソッドは(0.0, 1.0, 0.0, 1.0)
を返します。
planes()
→ tuple
of str
レンダリング出力の画像平面の名前を返します。
特別なOp_Id
画像平面には、画像内のオブジェクトノードのhou.Node.sessionIdIDが含まれています。
-1は、そのピクセルに関連したオブジェクトノードがないことを意味します。
そのIDに相当するオブジェクトにアクセスするには、hou.IPRViewer.objectNodeを使用します。
同様に、Prim_Id
平面には、画像内のプリミティブのhou.Prim.numberIDが含まれています。
そのIDに相当するプリミティブにアクセスするには、hou.IPRViewer.primを使用します。
ビューアに画像が含まれていなかった場合は、hou.OperationFailedを引き起こします。
displayedPlane()
→ str
レンダリングされた出力内の現在表示されている画像平面の名前を返します。
特別なOp_Id
画像平面には、画像内のオブジェクトノードのhou.Node.sessionIdのIDが含まれています。
-1は、そのピクセルに関係のあるオブジェクトノードがないことを示します。
そのIDに該当するオブジェクトにアクセスするには、hou.IPRViewer.objectNodeを使用します。
同様に、Prim_Id
画像平面には、画像内のプリミティブのhou.Prim.numberのIDが含まれています。
そのIDに該当するプリミティブにアクセスするには、hou.IPRViewer.primを使用します。
ビューアに画像が含まれていない場合は、hou.OperationFailedを引き起こします。
pixel(plane_name, x, y)
→ tuple
of float
画像の平面内のピクセルの値を返します。このメソッドは、画像平面のタイプに応じて1から4つのfloatのタプルを返します。
カラー平面の名前は、C
です。
平面の名前が無効、ピクセル位置が画像外、ビューアに画像が含まれていない場合は、hou.OperationFailedを引き起こします。
次のコードを使用すれば、画像平面内のコンポーネントの数を判断することができます: len(viewer.pixel(plane_name, 0, 0))
。
>>> viewer.pixel("C", 300, 200) (0.69970703125, 0.46728515625, 0.289794921875, 1.0)
pixels(plane_name)
→ tuple
of tuple
of float
画像平面内のすべてのピクセルの値を返します。 このメソッドは、画像平面のタイプに応じて1から4個のfloatのタプルのタプルを返します。 この結果は、行優先(row-major)順で、IPR画像の左下コーナーから始まります。
カラー平面の名前は、C
です。
平面の名前が無効またはビューアに画像が含まれていなかった場合は、hou.OperationFailedを引き起こします。
>>> all_pixels = viewer.pixels("C") >>> width = viewer.imageResolution()[0] >>> all_pixels[width*200 + 300] (0.69970703125, 0.46728515625, 0.289794921875, 1.0)
evaluatedStyleSheetJSON(x, y)
→ str
指定したピクセルにおけるマテリアルスタイルシートを意味したJSON文字列を返します。 スタイルシートが有効でない場合は、空っぽの文字列が返されます。
evaluatedStyleSheetPaths(x, y)
→ tuple
of str
現行ピクセルのスタイルシートに寄与しているスタイルのパスのリストを返します。
saveFrame(file_path, snapshot=0, xres=-1, yres=-1, color='C', alpha='C', scope='*', lut='', gamma=1.0, convert=True)
→ bool
指定したファイルパスに現行IPRレンダーを保存します。プログレス/不完全なレンダーを保存することができます。
出力される画像タイプは、指定したファイルパスのファイル拡張子から推測されます。
snapshot
パラメータは、保存するIPRスナップショットを制御します。
0の値は、アクティブレンダーを意味します。
デフォルトではネイティブのIPR解像度が使用されますが、xres
とyres
のパラメータによって独自の解像度を指定することができます。
color
とalpha
のパラメータは、.jpg
や.png
などのRGBA画像を書き出す時に使用するレンダー平面を制御します。
.pic
や.exr
などのディープ画像フォーマットを使用した場合、scope
パラメータを使用することで、その出力に含めたい画像平面を指定することができます。
objectNode(x, y)
→ hou.ObjNode or None
指定した位置でのピクセルに寄与しているオブジェクトノードを返します。
そのピクセルにオブジェクトがない、ピクセル位置が画像境界の外である場合はNone
を返します。
以下の関数は、最終画像のピクセルに寄与しているジオメトリを含んだSOPノードを返します:
def sopNode(viewer, x, y): obj_node = viewer.objectNode(x, y) return (obj_node.renderNode() if obj_node is not None else None)
ビューアに画像が含まれていない場合は、hou.OperationFailedを引き起こします。
prim(x, y)
→ hou.Prim or None
指定した位置でのピクセルに寄与しているジオメトリプリミティブを返します。
そのピクセルに何もない、またはピクセル位置が画像境界外ならNone
を返します。
ビューアに画像が含まれていない場合は、hou.OperationFailedを引き起こします。
materialNode(x, y)
→ hou.ShopNode or None
指定した位置でのピクセルに寄与しているSHOPノードを返します。
そのピクセルに何もない、ピクセル位置が画像境界外、ジオメトリ上にシェーダがない場合は、None
を返します。
このメソッドは、まず最初にそのピクセルに該当するプリミティブをチェックし、そのshop_materialpath
アトリビュートに一致したSHOPを返します。
そのプリミティブにこのアトリビュートがなければ、そのオブジェクトに割り当てられたSHOPを返します。
そのオブジェクトにSHOPが割り当てられていなければ、None
を返します。
ビューアに画像が含まれていない場合は、hou.OperationFailedを引き起こします。
カラー補正 ¶
これらの関数は、ビューアのOpenColorIO設定を設定または照会します(OpenColorIO対応を参照)。
usingOCIO()
→ bool
ビューアのカラー補正にOpenColorIOが使用されているかどうかを照会します。
setUsingOCIO(enable)
ビューアのカラー補正でOpenColorIOを有効または無効にします。
setOCIODisplayView(display="", view="")
OpenColorIOの表示名、ビュー名、または両方を設定します。 表示とビューはどちらもビューアの出力カラー空間を定義し、任意の数のカラー変換(Looks)が線形ビューポート画像に対して実行されます。
getOCIODisplay()
→ str
カラー補正で使用されている現在のOpenColorIO表示を返します。
getOCIOView()
→ str
カラー補正で使用されている現在のOpenColorIOビューを返します。
Methods from hou.Pane ¶
tabOfType(type, index=0)
→ hou.PaneTab or None
指定したタイプのペインタブを検索して返します。そのようなタブがペインになければNone
を返します。
ペイン内に指定したタイプのタブが複数あれば、最初に見つかったタブが返されます。他のタブを返すにはindex
を使用します。
例えば、index=0
を使用すると最初に見つかったタブが返され、index=1
を使用すると2番目に見つかったタブが返されます。
hou.ui.paneTabOfTypeも参照してください。
currentTab()
→ hou.PaneTab
現在フォーカスされているペインタブを返します。
hou.PaneTab.setIsCurrentTabも参照してください。
createTab(type)
→ hou.PaneTab
指定したタイプのペインタブを新しく作成して、それを返します。新しいペインタブが現行になります(つまり、そのペインが開かれます)。
splitHorizontally()
→ hou.Pane
ペインを分割して、新しいペインを右側に追加し、その新しいペインを返します。 その新しいペインは、このペインの現行タブと同じタイプのタブを1つ持ちます。
hou.Pane.splitVerticallyも参照してください。
splitVertically()
→ hou.Pane
ペインを分割して、新しいペインを下側に追加し、その新しいペインを返します。 その新しいペインは、このペインの現行タブと同じタイプのタブを1つ持ちます。
hou.Pane.splitHorizontallyも参照してください。
desktop()
→ hou.Desktop or None
このペインが存在するデスクトップを返し、デスクトップに取り付けられていないフローティングパネル内にそのペインがあればNone
を返します。
isMaximized()
→ bool
このペインが最大化されていればTrue
を返します。
setIsMaximized(on)
このペインを最大化状態に設定します。
getSplitParent()
→ hou.Pane or None
このペインが分割下に入れ子化されていれば、その親の分割ペインを返します。
getSplitChild(self,index)
→ hou.Pane or None
このペインが分割されていれば、指定したインデックスのその分割の子ペインを返します。
splitSwap()
水平分割ペインの左右のペインを入れ替えます。 垂直分割ペインの上下のペインを入れ替えます。
splitRotate()
水平分割ペインを垂直分割ペインに切り替えます。
isSplitMinimized()
→ bool
このペインが分割ペイン上で最小化されていればTrueを返します。 分割ペインを同時に最小化/最大化することはできません。 デフォルトの状態では、分割ペインは最小化も最大化もしません。
isSplitMaximized()
→ bool
このペインが分割ペイン上で最大化されていればTrueを返します。 分割ペインを同時に最小化/最大化することはできません。 デフォルトの状態では、分割ペインは最小化も最大化もしません。
setIsSplitMaximized(on)
→ bool
分割ペインを最大化状態に設定します。
isSplit()
→ bool
このペインが分割されていればTrueを返します。
setSplitFraction(self,fraction)
親の分割ペインの分割比率を設定します。
getSplitFraction(self,fraction)
→ double
親の分割ペインの分割比率を返します。
setSplitDirection(self,dir)
親の分割ペインの分割方向を設定します。
getSplitDirection(self,dir)
→ double
親の分割ペインの分割方向を返します。
isShowingPaneTabs()
→ bool
ペインがペインタブを表示していればTrueを返します。
setShowPaneTabs(self,on)
ペインタブバーを表示/非表示します。
このメソッドは廃止されました。代わりにshowPaneTabs
を使用してください。
showPaneTabs(self,on)
ペインタブバーを表示/非表示します。
isShowingPaneTabsStow()
→ bool
ペインタブが非表示の時にペインがペインタブStow(収納)バーを表示していればTrueを返します。
showPaneTabsStow(self,on)
ペインタブが非表示の時にペインタブStow(収納)バーボタンを表示/非表示します。
qtParentWindow()
→ QWidget
このペインを含んだウィンドウを表現したPySide2.QtWidgets.QWidget
インスタンスを返します。
qtScreenGeometry()
→ QRect
このペインのジオメトリをPySide2.QtCore.QRect
オブジェクトとして返します。
返されるQRect
オブジェクトのx
とy
のプロパティは、スクリーン座標におけるこのペインの左上コーナーを指します。