【问题标题】:Setting render layer (Foreground, Character and Background in its own renderlayer) with Python使用 Python 设置渲染层(在自己的渲染层中设置前景、字符和背景)
【发布时间】:2019-09-02 03:46:42
【问题描述】:

我一直在研究如何将环境拆分为前景和背景。我一直在考虑获取“与相机的距离”的值(通过“显示>平视显示>对象细节”),因此我可以使用它以使用来自相机的距离字符的值作为指导来分割前景和背景.

问题是我不知道如何在 python 中获取它的值。那么有人可以帮我吗?

我使用的是 Maya 2016。

我在这个命令中得到“无”:

import maya.cmds as cmds

print cmds.headsUpDisplay('HUDObjDetDistFromCam', q=1)

【问题讨论】:

  • 请告诉我们你到目前为止做了什么,不要只是描述你的想法
  • 第一个 Q 的最佳起点是:stackoverflow.com/help/how-to-ask
  • 我上传了图片来描述我的问题,够吗? :o
  • 是否可以从中获取价值?我看到 headUpDisplay 是可查询的,并且在 Maya 帮助中是可编辑的。 @Gio
  • 我得到了 MEL 中的代码,$result = headsUpDisplay -q -sr HUDObjDetDistFromCam;但仍然卡在python中

标签: python render maya


【解决方案1】:

您可以自己计算,而不是试图劫持与相机的物距。

import math
import maya.cmds as cmds

def distance_to_camera(obj, cam):
    cam_pos = cmds.xform(cam, t=True, ws=True, q=True)
    object_pos = cmds.xform(obj, t=True, ws=True, q=True)
    raw_dist = [a-b for a, b in zip(cam_pos, object_pos)]
    return math.sqrt (sum([a**2 for a in raw_dist]))

distance_to_camera('pCube1', 'persp')

raw_dist = [a-b for a, b in zip(cam_pos, object_pos)] 正在获取两个包含 3 个数字(位置)的列表,并从另一个列表中的相反数字中减去一个列表中的每个项目。

math.sqrt (sum([a**2 for a in raw_dist]))raw_dist中三个数的平方的平方根——也就是距离。您可以使用 Maya API 执行此操作,但此版本不需要任何额外的导入,除了 math

【讨论】:

  • 我不认为它在 HUD 的距离相机中显示的值实际上是一个直线向上的距离,而是物体距离相机的 z 深度。例如,在世界原点创建一个相机并在 5 个单位外创建一个球体,以便在相机中可见。现在,如果球体左右或上下移动,与相机的距离将保持为 5。因此,获取对象的原始距离可能会产生不同的数字。
  • 嗯...球形距离可能适用于 OP 的用例,但也可以复制相机矩阵并使用它。还有是否使用枢轴点或对象质心作为“距离”度量的问题。但考虑到 Q 的上下文,我怀疑只需要一个简单的方法
  • 这很好。使用边界框的质心可能比几何体的位置更安全,尤其是对于任何带有变形器的对象。
猜你喜欢
  • 2011-08-13
  • 1970-01-01
  • 2020-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多