먼저, 마야는 실제로 이와 같은 그래픽 스택을 가지고 있음을 지적하겠습니다. Maya가 직접 모드 드로잉 도구가 아니기 때문에이 스택은 실제로는 트리입니다. 이 트리를 DAG 또는 개체 부모 계층 구조라고합니다. 이 트리는 L 시스템에서 설명한 스택과 동일한 용도로 사용됩니다. 그러나 이것은 귀하의 평가에 직접적으로 많이 사용되지 않았기 때문에 도움이 될 수도 도움이되지 않을 수도 있습니다.
그래서 간단한 L 시스템 렌더링이 Maya에서 어떻게 보이는지 살펴 보겠습니다.
F -> F[-<<<<F][+>>>>F]
>와 <는 축을 중심으로 회전됩니다 How to Think Like a Computer Scientist에서 기본 코드를 빌려 우리가 조금 더 흥미로운 규칙을 사용 할 수 있습니다.
F
4 반복과 30 개도 결과의 각도 : 생산 룰이 약간 중복이며, 많은 사람들이 각 반복에서 줄기 그리는 경향이
참고 기본 공리를 사용. 그러나 나는 우아함이 아니라 단순함을 목표로합니다. 사용 코드 :
import maya.cmds as cmds
def applyRules(lhch):
rhstr = ""
if lhch == 'F':
rhstr = 'F[+F][<<<<+F][>>>>+F]'
else:
rhstr = lhch # no rules apply so keep the character
return rhstr
def processString(oldStr):
newstr = ""
for ch in oldStr:
newstr = newstr + applyRules(ch)
return newstr
def createLSystem(numIters, axiom):
startString = axiom
endString = ""
for i in range(numIters):
endString = processString(startString)
startString = endString
return endString
def drawLsystem(instructions, angle, distance):
parent = cmds.createNode("transform", n="L_Root_#")
saved=[]
for act in instructions:
if act == 'F':
cyl = cmds.cylinder(r=0.1, ax=[0,1,0], hr=1/0.1*distance)
cyl = cmds.parent(cyl[0], parent, r=1)
cmds.move(0, (distance/2.0), 0, cyl[0], os=1)
parent = cmds.createNode("transform", p=parent)
cmds.move(0, (distance), 0, parent, os=1)
if act == '-':
parent = cmds.createNode("transform", p=parent)
cmds.rotate(angle, 0, 0, parent, os=1)
if act == '+':
parent = cmds.createNode("transform", p=parent)
cmds.rotate(-angle, 0, 0, parent, os=1)
if act == '<':
parent = cmds.createNode("transform", p=parent)
cmds.rotate(0, angle, 0, parent, os=1)
if act == '>':
parent = cmds.createNode("transform", p=parent)
cmds.rotate(0, -angle, 0, parent, os=1)
if act == '[':
saved.append(parent)
if act == ']':
parent = saved.pop()
drawLsystem(createLSystem(4, "F"),30,1)
PS : 당신이 FX
에 공리를 변경하고 [+FX][<<<<+FX][>>>>+FX]
하는 X
을 지배하면 덜 중복을 생성합니다. 실행 취소하지 않고 코드를 실행하면 Maya가 업데이트 속도가 매우 느려지므로 작업 속도가 빨라집니다. 결과적으로 더 복잡한 결과를 위해 규칙 세트를 더 많이 실행할 수 있습니다. 생성 규칙 일부 규모의 작업을 추가하고이있어 :
당신은 순수 파이썬이 구현 된 경우, 당신은 현재의 위치와 제목을 저장하는 것입니다. 이전에 Maya를 사용 해본 적이 없으므로 나는 당신이 무엇을 할 것인지 전혀 모른다. – Kevin