我试图每次生成带有随机细分数的随机多边形图元。
如果我的有限知识是正确的,我不能只生成随机网格。我将需要收集所有可能产生的网格类型,然后将其生成一个数字数组,然后提取一个代表该网格的随机数。
但是,每个网格物体都有自己细分的不同命令/方式。
import random
object = cmds.polySphere ( r=10, sx=random.randrange(10, 100), sy=random.randrange(10,100), name='mySphere#' )
我可以分别生成每个网格并根据特定命令将其随机化,但是如何获取它来生成具有随机数分割的立方体,圆锥体或其他任何图元?
答案 0 :(得分:2)
创建基元的有趣之处在于它们的返回值是一致的。他们总是返回一个变换和一个形状,例如:
cmds.polyCube()
# Result: [u'pCube1', u'polyCube1'] #
cmds.polyCone()
# Result: [u'pCone1', u'polyCone1'] #
cmds.polySphere()
# Result: [u'pSphere1', u'polySphere1'] #
幸运的是,每个除法属性中都有单词"subdivision"
,因此我们可以为其中包含该单词的任何属性设置随机值。
知道了这一点,我们可以选择一个随机图元来创建,然后遍历其形状的属性以设置一个随机细分:
import random
import maya.cmds as cmds
# Define a list of all primitive functions we can create from.
primitives = [cmds.polySphere, cmds.polyCube, cmds.polyCylinder, cmds.polyCone, cmds.polyTorus, cmds.polyPlane]
# Pick a random primitive and create it.
mesh_type = random.choice(primitives)
transform, shape = mesh_type()
# Set a random value on any attribute that has subdivision in its name.
attrs = cmds.listAttr(shape, keyable=True)
for attr in attrs:
if "subdivision" in attr:
cmds.setAttr(shape + "." + attr, random.randrange(10, 100))