Python API 改进

添加了 Python 函数,用于保存 UV 布局的快照、缩放、旋转、平移和移除 UV、切割 UV 边、仅设置深度过程以及显示边界框。

setTexCoords

vrdGeometryNode 中添加了 setTexCoords 方法,用于移除 UV 集。

调整大小

vrUVService 中添加了 triplanarProjectionFitSize()planarProjectionFitSize()cylyndricalProjectionFitSize(),用于将特定(平面/三平面/圆柱)投影拟合到任意对象,并启用任意节点的简单批处理。

仅深度过程

为“高级 OpenGL 设置”的“仅深度过程”功能添加了 setDepthOnlyPass 函数。它启用“仅深度过程”的切换。setDepthOnlyPass 采用类似于 setBackfaceCulling 的参数,例如 SWITCH_TOGGLESWITCH_ONSWITCH_OFF 以及 TrueFalse。当前状态没有查询函数。

切割 UV 边

添加了 vrUVService.cutAlongSeams(),用于使用“自动接缝选择”中的值沿选定接缝切割 UV 边。

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

添加了 vrUVService.rotateUV,用于围绕给定中心旋转 UV。

要围绕给定中心旋转 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

添加了 vrUVService.scaleUVvrUVService.translateUV 以缩放/翻转以及平移 UV。

要在给定中心翻转 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 值的比例因子。
  • vScale (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

vrUVService 中添加了 saveUVSnapshot(与在“延伸 UV 编辑器”中一样)。它将 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) - 定义所导出快照的样式,即从 vrUVTypes.SnapshotStyle 创建的位掩码。
  • mode (vrUVTypes.SnapshotMode) - 快照模式定义要包含在图像中的区域。“ZeroToOneSpace”在 UV 坐标中捕获从 0 到 1 的区域。“Boundingbox”将捕获整个对象。
  • customSpace (QVector4D) - 用于快照的 UV 空间(最小 U 值、最大 U 值、最小 V 值、最大 V 值)。仅当模式设置为“vrUVTypes::SnapshotMode::CustomSpace”时才使用。

显示边界框

添加了 getBoundingBoxgetWorldBoundingBox,用于显示场景中对象的边界体积(长方体)。

要获取多个对象的组合边界框,请尝试以下命令:

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