soft selection → skin weight

요약
소프트 셀랙션을 버텍스 맵으로 생성하는 스크립트
분류
script
태그
skinning
작성
6/16/2020
📌
스킨 웨이트 작업이나 클러스터 작업시 소프트 셀랙션으로 웨이트를 칠할수있지만, 수작업이 많이 필요하다.
클러스터의 경우 falloff 기능을 이용해서 컨트롤이 가능하지만, 버그 인지 계산과정이 너무 오래걸려 옵션을 바꾸기조차 힘들다.
반면에 소프트 셀랙션은 선택정보만 처리해서인지 상당히 가볍고 즉각적이다.
아래 모델링은 6276 개의 포인트를 갖고있는데 클러스터 사용이 불가능할 정도로 Freeze 현상이 발생한다. (테스트 환경 R22, MacOS)
소프트 셀랙션을 그대로 버텍스 웨이트로 생성한다면 좀더 빠르게 클러스터영역을 조절이 가능하고 웨이트 작업의 번거러움을 줄일 수 있을 것이다.
오브젝트 정보
soft selection
소프트 샐랙션을 하면 자동으로 Tsoftselection 태그가 추가되고 선택 정보를 기록하고 노말 셀랙션으로 돌아오면 태그가 자동으로 사라지는데 스크립트로 직접 추가한 경우는 태그가 계속 남아있는 것으로 보인다.
태그가 남아있다면 값을 응용할 수 있겠지만, 기본적으로 감춰진 태그라서 스크립트로 접근해야한다.
소프트 셀랙션태그는 선택된 소프트 셀랙션 상태가 기록되며 이 값에 접근하려면, VariableTag.GetAllHighlevelData(self) 함수가 필요하다.
C4D Script
""" Name-US:JS Soft Selection to Vertexmap Description-US:JS Soft Selection to Vertexmap copyright by jeongseok.td@gmail.com last update: 2020.5.21 """ # 소프트 셀랙션을 벅텍스 맵으로 생성하기 import c4d from c4d import gui def vertexMap(op, tag=None): soft = op.GetTag(c4d.Tsoftselection) if not soft: return '소프트 셀랙션 정보를 찾을 수 없습니다.' if tag == None: name = gui.InputDialog('Tag Name', 'Vertexmap') tag = c4d.VariableTag(c4d.Tvertexmap, op.GetPointCount()) tag.SetName(name) op.InsertTag(tag) tag.SetAllHighlevelData(soft.GetAllHighlevelData()) tag.SetBit(c4d.BIT_ACTIVE) return '버텍스맵 추가 성공' def main(): op = doc.GetActiveObject() tag = doc.GetActiveTag() if not op: gui.MessageDialog('오브젝트를 선택하세요.') return if tag == None or tag.GetType() != c4d.Tvertexmap: tag = None print vertexMap(op, tag) c4d.EventAdd() if __name__ == "__main__": main()
Python
Demo
Download
JS_SoftSelection_to_Vertexmap.zip
0.8KB
참고자료
Today