Python API の改善

UV レイアウトのスナップショットの保存、UV のスケール、回転、移動、および削除、UV エッジのカット、深度のみのパスの設定、バウンディング ボックスの表示を行うための Python 関数が追加されました。

setTexCoords

UV セットを削除するための setTexCoords メソッド vrdGeometryNode に追加されました。

フィット サイズ

特定の(平面/トライプラナー/円筒)投影を任意のオブジェクトにフィットさせ、任意のノードの単純なバッチ処理を可能にするために、triplanarProjectionFitSize()planarProjectionFitSize()、および cylyndricalProjectionFitSize()vrUVService に追加されました。

深度専用パス

[高度な OpenGL 設定]の[深度専用パス]機能に setDepthOnlyPass 関数が追加されました。これにより、深度専用パスの切り替えが可能になります。setDepthOnlyPass は、setBackfaceCulling (SWITCH_TOGGLESWITCH_ON、または SWITCH_OFF)、および FalseTrue などのパラメータを使用します。現在の状態のクエリー関数はありません。

UV エッジのカット

自動シーム選択の値を使用して、選択したシームに沿って UV エッジをカットする vrUVService.cutAlongSeams() が追加されました。

vrUVService.cutAlongSeams(nodes, settings, uvSet)

指定したノードで指定したシーム設定を使用してカットを実行します。

有機的カットの例:

geometryNodes = [vrNodeService.findNode("Box")]
settings = vrdUVSeamSettings()
settings.setMode(vrUVTypes.SeamMode.Organic)
settings.setOrganicUsePipesCutter(True)
settings.setOrganicSegmentationAmount(0)
vrUVService.cutAlongSeams(geometryNodes, settings, vrUVTypes.UVSet.MaterialUVSet)

製造されたカットの例:

geometryNodes = [vrNodeService.findNode("Box")]
settings = vrdUVSeamSettings()
settings.setMode(vrUVTypes.SeamMode.Manufactured)
settings.setManufacturedAngle(45)
settings.setManufacturedAreaRatio(0.5)
vrUVService.cutAlongSeams(geometryNodes, settings, vrUVTypes.UVSet.MaterialUVSet)

ベイク処理カットの例:

geometryNodes = [vrNodeService.findNode("Box")]
settings = vrdUVSeamSettings()
settings.setMode(vrUVTypes.SeamMode.Baking)
settings.setBakingAngle(45)
settings.setBakingSizeOfMinPatch(0)
vrUVService.cutAlongSeams(geometryNodes, settings, vrUVTypes.UVSet.MaterialUVSet)
パラメータ:
  • nodes (List[vrdGeometryNode]): ノードのリスト。
  • settings (vrdUVSeamSettings): シームに使用する設定。
  • uvSet (vrUVTypes.UVSet): 操作する UV セット(マテリアル UV の場合は「MaterialUVSet」、ライトマップ UV の場合は「LightmapUVSet」)。

UV を回転する

指定した中心で UV を回転する vrUVService.rotateUV が追加されました。

指定したで UV を回転するには、次の操作を実行します。

center = QVector2D(0,0)
angle = 25
vrUVService.rotateUV(nodes, center, angle, vrUVTypes.UVSet.MaterialUVSet)

vrUVService.rotateUV(nodes, center, angleDegree, uvSet)

指定したノードの UVを、指定した中心の周りに回転します。

すべてのマテリアル UVを 90 度回転する例:

geometryNodes = [vrNodeService.findNode("Box")]
center = QVector2D(0.5,0.5)
angle = 90
vrUVService.rotateUV(geometryNodes, center, angle, vrUVTypes.UVSet.MaterialUVSet)
パラメータ:
  • nodes (List[vrdGeometryNode]) –
  • center (QVector2D): スケーリングの中心
  • angleDegree (float): 回転角度(角度数)
  • uvSet (vrUVTypes.UVSet): 操作する UV セット。

UV をスケールおよび移動する

UV のスケーリング/反転および移動を行う vrUVService.scaleUV およびvrUVService.translateUV が追加されました。

指定した中心で UV を反転するには、次の操作を実行します。

center = QVector2D(0,0)
scaleU = 1
scaleV = -1
vrUVService.scaleUV(nodes, center, scaleU, scaleV, vrUVTypes.UVSet.MaterialUVSet)

指定した中心で UV を移動するには、次の操作を実行します。

translateU = 0.2
translateV = 0.1
vrUVService.translateUV(nodes, translateU, translateV, vrUVTypes.UVSet.MaterialUVSet)

vrUVService.scaleUV(nodes, center, uScale, vScale, uvSet)

指定したノードの UVを、指定した中心を使用してスケールします。

すべてのマテリアル UV を反転する例:

geometryNodes = [vrNodeService.findNode("Box")]
center = QVector2D(0.5,0.5)
uScale = -1
vScale = 1
vrUVService.scaleUV(geometryNodes, center, uScale, vScale, vrUVTypes.UVSet.MaterialUVSet)
パラメータ:
  • nodes (List[vrdGeometryNode]): ノードのリスト。
  • center (QVector2D): スケーリングの中心
  • uScale (float): U 値の尺度計数
  • uScale (float): V 値の尺度計数
  • uvSet (vrUVTypes.UVSet): 操作する UV セット。

vrUVService.translateUV(nodes, du, dv, uvSet)

指定したノードの UV を移動します。

すべてのマテリアル UV を移動する例:

geometryNodes = [vrNodeService.findNode("Box")]
du = 0.2
dv = 0.2
vrUVService.translateUV(geometryNodes, du, dv, vrUVTypes.UVSet.MaterialUVSet)
パラメータ:
  • nodes (List[vrdGeometryNode]): ノードのリスト。
  • du (float): U に沿った移動。
  • dv (float): V に沿った移動。
  • uvSet (vrUVTypes.UVSet): 操作する UV セット。

saveUVSnapshot

saveUVSnapshot が(拡張 UV エディタと同様に) vrUVService に追加されました。UV レイアウトのスナップショットをイメージ ファイルとして保存します。

注:

幅と高さが異なる場合、出力イメージは歪みます。

vrUVService.saveUVSnapshot(nodes, path, width=1024, height=1024, uvSet=vrUVTypes.MaterialUVSet, style=vrUVTypes.ShowWireframe, mode=vrUVTypes.SnapshotMode.ZeroToOneSpace, customSpace=QVector4D())

UV レイアウトのスナップショットをイメージ ファイルとして保存します。

注: ZeroToOneSpace モードで幅と高さが異なる場合、出力イメージは歪みます。

例:

geometryNodes = [vrNodeService.findNode("Box")]
vrUVService.saveUVSnapshot(geometryNodes,
                           "c:/vred-snapshots/uv.png",
                           512, 512,
                           vrUVTypes.UVSet.MaterialUVSet,
                           vrUVTypes.ShowBorders | vrUVTypes.ShowWireframe)
パラメータ:
  • nodes (List[vrdNode]): スナップショットに含めるノードのリスト。
  • path (string): イメージを保存する絶対パス(例:‘c:/uv.png’)。
  • width (integer): イメージの幅(ピクセル単位、既定値は 1024)。
  • height (integer): イメージの高さ(ピクセル単位、既定値は 1024)。
  • uvSet (vrUVTypes.UVSet): キャプチャする UV セット(マテリアル UV の場合は MaterialUVSet、ライトマップ UV の場合は LightmapUVSet)。
  • style (integer): 書き出すスナップショットのスタイルを定義します。Bitmask は vrUVTypes.SnapshotStyle から作成されます。
  • mode (vrUVTypes.SnapshotMode): スナップショット モードは、イメージに含まれる領域を定義します。「ZeroToOneSpace」は UV 座標 の 0 ~ 1 の領域をキャプチャします。「Boundingbox」はオブジェクト全体をキャプチャします。
  • customSpace (QVector4D): スナップ ショットに使用する UV 空間(最小 U、最大 U、最小 V、最大 V)。モードが「vrUVTypes::SnapshotMode::CustomSpace」に設定されている場合のみ使用されます。

バウンディング ボックスを表示

シーン内のオブジェクトのバウンディング ボリューム(ボックス)を表示する getBoundingBox および getWorldBoundingBox が追加されました。

複数のオブジェクトのバウンディング ボックスを結合するには、次の操作を実行します。

def getWorldCenter(geometryNodes):
    bb = vrdBoundingBox()
    for geometryNode in geometryNodes:
        bb.extendBy(geometryNode.getWorldBoundingBox())
    return bb.getCenter()

vrdNode.getWorldBoundingBox()

子を含むノードのワールド バウンディング ボックスを返します。

複数のバウンディングボックスの組み合わせの例:

def getWorldCenter(nodes):
    bb = vrdBoundingBox()
    for node in nodes:
        bb.extendBy(node.getWorldBoundingBox())
    return bb.getCenter()

# Find all nodes whose name starts with "Box". nodes = vrNodeService.findNodes("Box*", True) # Calculate the bounding box center of these nodes center = getWorldCenter(nodes) # Print the result print(center)

戻り値:ノードのワールド バウンディング ボックス
戻り値の型:vrdBoundingBox