본문 바로가기

Houdini/Houdini1_Rigidbody

RIGID BODY_19 COMPLEX 자동차 충돌 - Ep19_Part 01. 자료 분석 및 메터리얼 세팅


이번 작업

차가 충돌하면 찌그러지고, 차문도 열리고, 한계 이상의 충격이 발생하면 바퀴가 떨어져나가거나 할 수 있는 가장 복잡하면서 최종 형태의 작업을 진행한다.

 

이와같은 작업은 시스템화가 되지 않는다. 주어진 자료에 맞게 가다듬을 부분은 가다듬고, 하나하나 바퀴 달아주고, 프레임 달고, 이와같이 쌓아가면서 진행해야한다.


자동차 project의 순서

  1. 자료 확인 및 attribute, material 정리
    • 자료를 이해하고 정리한다.
      • 직접 모델링을 한 것도 아니고, 디테일이 무지막지한 데이터를 가지고 무작정 작업을 시작하게 되면 두번 작업하기 딱 좋은 것이다.
      • 내가 사용할 모델링에 대한 이해도가 떨어지면, 필요한 정보가 누락된다거나 기대와는 다른 조각때문에 갑자기 작업이 막힐수도 있다.
        • 작업 과정에서 유리할 수 있도록 attribute 정리를 미리 할 필요가 있다.
        • 동시에 바로 material 세팅도 진행한다.(작업을 다 진행하고 색을 입히려 하면, 손이 잘 안가게 된다...)
  2. 바퀴 & 서스펜션 세팅
    • 일반 승용차가 아닌, jeep을 가지고 작업을 진행하기 때문에 조금은 다른 서스펜션 세팅을 진행할 예정이다.
  3. 닫힌면과 열린면에 대해(with voronoi)
    • 이제부터 왠만한 모든 조각은 깨지거나 찌그러지게 된다. 문제는 이 조각을 내는 과정에서 닫힌면과 열린면의 반응이 다르게 나타난다. voronoi fracture를 사용할 때 기대하는 것처럼 예쁘게 나오지 않는 조건들이 있다. 이 부분에 대해 미리 해결을 해줄 예정이다.
  4. 하체 세팅
    • 전체 과정 중 가장 중요한 단계.
    • 바퀴 / 서스펜션 세팅 위로 다른 조각들이 올라갈 토대를 만들어주게 된다.
    • 충돌이 발생하지 않았을 때, 평지에서 바퀴가 예쁘게 굴러가야한다.
      • 하체 - 바퀴 / 서스펜션 사이에 간섭이 없어야한다는 의미이다.
  5. main body
    • 하체 위에 main body를 올려준다.
  6. 힌지
    • 경첩에 의해 달릴지 말지 정해지는 부품들을 달아준다.
      • 여기까지의 부품들은 찌그러지는 부품들이 대부분이다.
  7. 부러질 조각과 작은 조각들
  8. render

자료의 확인 및 attribute, material 정리

멋진 jeep 이다.

일단 필요한 정보를 확인해보자.

  • point attribute : 포지션 정보가 필요할 듯 싶다.
  • primitive attribute : material 정보와 name 정보가 필요하다.

나머지는 일단 필요치 않아보인다.

@name은 확인결과 부품별 이름으로 보인다.

dop network에서 @name이 필요하기 때문에, 부품별 이름을 @name으로 남겨두기엔 조금 곤란하다.

attribute rename 노드를 사용해서 attribute 이름을 바꿔주도록 한다.

 

일단 파츠별로 확인을 해보자.

  • for each named primitive 블럭을 사용한다.
    • 이름이 같은 것들끼리 한번에 모아서 볼 수 있다.

 

이제 자료를 해체해볼 예정이다.

  • 작업의 우선순위를 정하기 위함이다.
  • rigidbody 세팅을 위한 parts별 분류작업과 material 세팅을 위한 분류작업을 진행한다.

왼쪽 / 파츠별로 single pass 상태로 분류, 오른쪽 / material별로 single pass 상태로 분류

이제 우선순위가 높은 부분은 빨간색을, 그 다음은 노란색, 파란색의 순서로 노드 색상을 바꿔주도록 하겠다.

  • 우선순위의 기준 : 작업의 순서와 파츠의 사이즈, 구겨질 부분인지 부러질 부분인지 등등이 반영될 예정

 

우선순위가 높은 것부터 해서 정리를 해준다.


이제 material 세팅을 잡아보도록 하겠다.

신경쓸 부분은, 작업자가 통제 가능한 @mat을 먼저 만들어주고, @mat의 이름과 동일한 그룹을 생성한다.

  • 만약 @mat이 'main'이라면, main 이라는 이름의 group을 만들어주고, group의 이름과 동일한 material을 만들어준다.

조건문을 활용한다.

 

바로 material 노드를 달아주도록 한다.

 

나머지는 반복 작업이다.

 

아직 끝난 것이 아니다.

jeep를 다 풀어헤쳐서 material을 부여하는 과정에서 데이터의 변질이 일어났다.

  • 물체가 쌓인 순서가 바뀌었다.

single pass의 네번째 물체인 main 쪽이 가장 먼저 들어오게 되면서, 최종 데이터에서는 main쪽(원래 이름은 body)이 0번 primitive가 되었다.

  • 실제 자동차의 0번 primitive는 black gloss 라는, 아예 다른 것이었다.

 

이렇게 되면, parts별로 분류한 데이터를 material 단에 연결했을 때 작업이 안될 수 있다.

  • 결국, 최초의 primitive가 만들어져있던 규칙대로 rollback 시켜줘야한다.

group을 주는 과정과 material을 주는 과정을 나중으로 미룰 수 있다.

  • 이 과정을 위해서 조건문을 통해서 group을 생성해준 것이다.

group을 만들어주는 조건문이 올바르게 작동했다.

 

깔끔하게 subnet으로 정리해준다.

 

mat attribute를 만들어주는 subnet
group과 material을 적용해주는 subnet

 

material 과정은 끝이 났다.


디테일이 많고, 서로 연결되지 않은 부품이 많은 자료는 지나칠정도로 꼼꼼하게 작업을 해주는 것이 훨씬 좋다.

마지막 단계에서 material 세팅을 진행하는 것보다는, 위의 작업처럼 처음부터 material 세팅을 잡고 가는 것이 훨씬 쉽다.

 


이전에 작업하려고 받아두었던 자동차 데이터도 굉장히 세분화된 부품들로 인해서 어디부터 어떻게 손을 대고 정리해야할지 막막한 감이 없지 않았었는데, 오늘 수업을 들으면서 머리가 상당히 맑게 갠 기분이 든다.

 

으... 나중에 후디니로 협업을 하게 된다면, 제발, material도 그렇고 파츠별 이름 잘 나눠주는 동료를 만날 수 있기를...ㅠ