【MAYA】 쉐이프에 머티리얼의 어사인이 있는지 여부를 판단한다(상세판
빨리 만들어 보자.
def has_object_assign(shape):
"""
シェイプにマテリアルのオブジェクトアサインがあるかどうか確認する
:param shape: チェックするシェイプ
:type shape: pymel.nodetypes.Shape
:rtype: bool
"""
instanceNumber = shape.instanceNumber()
instObjGroup = shape.instObjGroups[instanceNumber]
cons = pm.listConnections(instObjGroup, plugs=False)
for con in cons:
if con.type() == 'shadingEngine':
return True
return False
instObjGroup에 SG 연결이 있는지 확인하고 있습니다.
이와 마지막
has_face_assign
함수를 결합하면 모양에 어떤 머티리얼이 할당되었는지 알 수 있습니다.def has_any_assign(shape):
"""
シェイプに何らかのマテリアルのオブジェクトアサインがあるかどうか確認する
:param shape: チェックするシェイプ
:type shape: pymel.nodetypes.Shape
:rtype: bool
"""
return has_face_assign(shape) or has_object_assign(shape)
처리에 중복이 있는 것과, 원래 무거운 것 같은 처리 판정이므로, 현실적인 퍼포먼스가 나올까는 제대로 합니다만. .
그런데 shape에는 관련 sets를 반환하는 메서드가 있으므로,
def has_any_assign2(shape):
set_list = shape.listSets()
for s in set_list:
if s.type() == 'shadingEngine':
return True
return False
어떠한 머티리얼 어사인이 있을지 어떨지의 판정은, 이런 느낌이라도 좋았습니다. 이 처리에서도 제대로 인스턴스를 구별했습니다.
페이스 어사인, 오브젝트 어사인의 판정도 이런 느낌으로 더 스마트하게 판정할 수 있는 방법이 있을 것 같은 생각도 듭니다만, 움직이는 것을 만들어 이해를 진행하고 있다고 하는 것으로. .
동작 검증
아래에서 pCube1,2,3,4,5,6
shape = pm.PyNode('pCube1|pCubeShape1') # フェイスアサインのないインスタンスシェイプ
print(has_face_assign(shape)) # -> False
print(has_object_assign(shape)) # -> True
print(has_any_assign(shape)) # -> True
print(has_any_assign2(shape)) # -> True
print('')
shape = pm.PyNode('pCube2|pCubeShape1') # フェイスアサインのあるインスタンスシェイプ
print(has_face_assign(shape)) # -> True
print(has_object_assign(shape)) # -> False
print(has_any_assign(shape)) # -> True
print(has_any_assign2(shape)) # -> True
print('')
shape = pm.PyNode('pCube3|pCubeShape3') # インスタンスが存在しないフェイスアサインのないシェイプ
print(has_face_assign(shape)) # -> False
print(has_object_assign(shape)) # -> True
print(has_any_assign(shape)) # -> True
print(has_any_assign2(shape)) # -> True
print('')
shape = pm.PyNode('pCube4|pCubeShape4') # インスタンスが存在しないフェイスアサインのあるシェイプ
print(has_face_assign(shape)) # -> True
print(has_object_assign(shape)) # -> False
print(has_any_assign(shape)) # -> True
print(has_any_assign2(shape)) # -> True
print('')
shape = pm.PyNode('pCube5|pCubeShape5') # マテリアルが外れてしまったシェイプ
print(has_face_assign(shape)) # -> False
print(has_object_assign(shape)) # -> False
print(has_any_assign(shape)) # -> False
print(has_any_assign2(shape)) # -> False
print('')
shape = pm.PyNode('pCube6|pCubeShape6') # 一部faceのマテリアルが外れてしまったシェイプ
print(has_face_assign(shape)) # -> True
print(has_object_assign(shape)) # -> False
print(has_any_assign(shape)) # -> True
print(has_any_assign2(shape)) # -> True
Reference
이 문제에 관하여(【MAYA】 쉐이프에 머티리얼의 어사인이 있는지 여부를 판단한다(상세판), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/harayoki/items/688fadd558bdd76a2a41텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)