[OpenClass] 2010-08-08 cross함수를 이용한 파티클의 회전.

A.주제/내용

cross함수를 이용한 파티클의 회전축 구하기

  • cross 함수에 대해

cross(v1,v2)=v3의 형태, 두 벡터 값을 이용해 두 벡터가 만드는 가상의 면을 직각으로 교차하는 벡터 v3를 만들고 이번 오픈 클래스에서는 이것을 서로 다른 방향을 향하는 오브젝트들의 적절한 회전 축을 만드는데 사용하였습니다.

  • 전체적인 과정

circle에 포인트들을 뿌려주고, 이 포인트들에 각각의 v1 값을 만들어 준 후, pop network에서 이 포인트들을 기준으로 포인트의 속성을 물려 받은 같은 수의 파티클을 만들어 여기에 v2가 될 up vector를 추가해 줍니다. 그리고 이 v1과 v2를 가지고 cross함수를 이용해 rotation 노드에서 사용할 포인트 각각의 회전축을 만들어 주는 것입니다. 최종적으로 이 포인트들에 카피된 지오메트리들은 포인트들의 속성을 물려받아 transform됩니다.

  •  세부적인 과정

  • scatter로 뿌린 포인트들에 point 노드를 연결해서 v1으로 사용되어질 벡터값으로 velocity를 추가 합니다. $TX/Y/Z는 각 포인트들의 위치이고 $CEX/Y/Z는 인풋 지오메트리의 중심으로 여기서는 값이 (0,0,0)으로 고정 입니다.  이 둘을 빼면 아래와 같은 velocity가  나옵니다.

  • 위 그림은 point 노드에 연결된 pop network의 내부 입니다.  source에서 앞서 만든 포인트들을 그대로 받아와 impulse birth파라미터들을 이용해 포인트들의 위치에 포인트 개수만큼 각각 파티클들을 첫 프레임에 생성 합니다. 그리고 포인트들로부터 물려받은 velocity를 적절히 조절해 줍니다. 여기서는 임의로 절반으로 줄여서 파티클들의 속도를 조절 했습니다.
  • attribute 노드를 붙여서 v2로 사용되어질 vector를 추가합니다. 파티클들이 나아가는 방향에 수직인 (0,1,0)의 vector를 만듭니다.  이 attribute의 name은 'up' 입니다.
  • 그리고 나서 지금까지 만들어진 이 v1,v2를 이용해 rotation노드에서 회전 축을 지정해 줍니다.cross(vector3($UPX, $UPY, $UPZ),vector3($VX, $VY, $VZ)) 이렇게 각 벡터값을 인수로 사용해 결과를 냅니다.
  • angle 파라미터의 -$T*300 은 회전의 방향과 속도를 정한 것으로 본인이 알아서 필요한 값을 넣습니다.
  • 최종적으로, 이렇게 정리된 속성들을 담고 있는 pop network의 아웃풋에 copy노드를 이용해 지오메트리들을 복사 하면 파티클들의 속성으로 지오메트리들이 자동적으로 transform됩니다.

 

B. 도전과제

허공에서 박스가 바닥에 떨어지면 그 충격으로 바닥에 있는 먼지들이 사방으로 퍼져 나가는 것을 이번 OC에서 사용한 방법을 이용해 재현해 보기.  시간이 얼마가 걸리든 렌더까지 해서 여기에 올려 보는 쪽으로.

 

C. 기타

다음 클래스 주제

  • 이번 클래스 주제가 완전히 종료되면, sop solver에 대해.

Forums:

I will also think about waht I can do this for you guys. Keep it up. I had a class like pop_vector. Someone has this file I think, or I will post it again. 약간 보기좋게 편집을 했어요. 

감사합니다.

정말 깔끔한 리뷰 네요! ㅎㅎ

앞으로도 잘 부탁드리겠습니다. ^^