Python

Python Script 제작 시 Material의 색상 입력 부분 질문 입니다!

by 도베 posted Sep 22, 2020 Replies 3
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 게시글 수정 내역 댓글로 가기 인쇄
Extra Form

C4D를 이용한 프로젝트 제작시 좀 더 간편한 도구들을 이용하려 파이썬 스크립트를 제작 중에 있습니다.

예를 들어 10 프레임 마다 Red, Green, Blue로 변환되어 적용 되게끔 (궁극적인 목표는 레인보우 효과 같은 다양한 연출 입니다.)하는 파이썬 스크립트를 제작하고자 합니다.

 

캡처.JPG

 

C4D 스크립트를 활용한 예제들이 찾기 힘들고 c4d SDK를 최대한 찾아 보았으나 Set_Matreial_color와 같은 함수는 찾지 못하여 이렇게 질문드립니다.ㅠㅠ

첨부 되는 이미지는 제가 적용하고자 하는 스크립트 UI 구요 ! 보시면 어떤 것을 진행하려하는지 이해하실까 첨부합니다,!!

 

** 또 이건 별도로 질문 올립니다. 혹시 파이썬 스크립트를 백그라운드로 실행 시키는 방법이 있을까요? 스크립트 매니저로 실행 시키면 해당 스크립트를 종료하지 않는한 다른조작이 불가하더라구요,,,ㅎㅎ 혹시나 아시는 분은 답변 부탁드립니다.!**

 

 

 

 

  • profile
  • ?
    도베 2020.09.23 13:25

    답변 감사합니다! , 한가지만 더 여쭤보고자 합니다! 올려주신 답변은 Python Tag로 사용하셨는데

    저의 경우는 Script Manager를 통하여 사용하려 합니다.

    그래서 달아주신 답변을 토대로 코드를 작성하였으나 Material의 색상 적용이 안되더군요 ㅠㅠㅠ

    혹시 실례가 안된다면  Script Manager에서 사용할 수 있는 Matrerial 색상의 변수 명을 알려주시면 감사하겠습니다.!

    다시 한번 감사합니다.!

    
        def toggle (self):
            start = int(self.GetString(TXT_FRAME_START))
            end = int(self.GetString(TXT_FRAME_END))
            gap = int(self.GetString(TXT_SEQUENCE))
            color = c4d.Vector(int(self.GetString(TXT_R)) / 255,int(self.GetString(TXT_G)) / 255,int(self.GetString(TXT_B)) / 255)
            color2 = c4d.Vector(int(self.GetString(TXT_R2)) / 255, int(self.GetString(TXT_G2)) / 255,
                               int(self.GetString(TXT_B2)) / 255)
            fps = doc.GetFps()
            strin = ''
            try:
    
                for i in range(0,len(self.obj)):
                    ob = self.obj[i]
                    count = 0
                    for f in range(start, end+1):
                        if not (f % gap):
                            doc.SetTime(c4d.BaseTime(f, fps))
                            doc.ExecutePasses(None, True, True, True, c4d.BUILDFLAGS_NONE)
                            if count % 2 == 0: ob[c4d.ID_BASEOBJECT_COLOR] = color
    
                            else: ob[c4d.ID_BASEOBJECT_COLOR] = color2
                            strin += str(ob[c4d.ID_BASEOBJECT_COLOR])+"\n"
                            count += 1
                            c4d.CallCommand(12410)  # Record Active Objects
                self.SetString(TXT_LOG,strin)            
            except Exception as e:
                self.SetString(TXT_LOG,e)
    
    def main():
        # Get the selected objects, including children.
        dlg = OptionsDialog()
    
        if len(dlg.obj) <= 0:
            gui.MessageDialog('Must select objects!')
            return
    
        # Open the options dialogue to let users choose their options.
    
        dlg.Open(c4d.DLG_TYPE_MODAL, defaultw=320, defaulth=300)
    
        if not dlg.ok:
            return
    
        c4d.EventAdd()  # Update C4D to see changes.
    
    if __name__ == '__main__':
        main()
  • profile
    정석 2020.09.25 14:04
    색을 어디에 어땧게 지정하느냐의 문제인데요. 재질을 제어하는 거라면 일단 특정 재질을 먼저 찾아야합니다.
    BaseDocument.SearchMaterial(self, name) 로 찾던지 오브젝트 옆에 재질 태그를 검색해서 지정된 재질을 먼저 찾고 색을 변경합니다.
    씬이나 상황을 좀더 잘 이애해야 답변을 드릴수있으니 도움이 필요하시면 https://open.kakao.com/me/c4d 여기로 말걸어주세요.