독학.NET

SOP TRAIL

움직이는 지오메트리의 여행 경로를 따라 흔적을 만들어 내는 Trail 노드에 대해서 알아보자.

Posted: April 11, 2018
Version: Houdini 16.5

Trail Surface Operator

Trail SOP 은 움직이는 물체의 위치변화를 이용해서 여러가지 편리한 기능을 제공한다.

 Trail SOP 노드

Trail SOP 노드

 

Trial SOP 의 주된 기능은 다음과 같이 두가지가 있다.

1. 여행경로에 따른 복사

움직이는 물체에 뒤따르는 흔적들을 복사한다.

이때 복사되는 객체들은 물체의 여행경로를 그대로 따른다.

 

2. 속도(Velocity) 계산

움직이는 물체의 위치(P) 의 변화를 속도값으로 계산해 준다.

이때 속도값은 'v' 라는 어트리뷰트에 저장된다.

Cd, P 등의 어트리뷰트와 마찬가지로 v 또한 후디니에서 특별히 지정된(Reserved) 이름이다.

Trail SOP 예제 1

예제 1 에서는 움직이는 물체를 그 여행경로에 따라 복사해 본다.

 

후디니를 열고 /obj 에 스피어 지오메트리를 하나 만든다.

만들어진 'sphere1' 노드를 더블클릭하여 Geometry 레벨로 들어간다.

SOP_scatter_1.jpg

 

안에 있는 'sphere1' 노드의 Uniform Scale 속성값을 0.1 미터로 줄여준다.

이 속성은 스피어의 크기를 전체적으로 늘리거나 줄이는 역할을 한다.

SOP_trail_1.jpg

 

이 스피어에 움직임을 더해보자.

Transform SOP 을 만들어서 'sphere1' 에 연결한다.

SOP_trail_4.jpg

 

'transform1' 노드의 파라미터를 다음과 같이 수정한다.

Translate 속성은 XYZ 각 축별로 물체를 이동시키는 역할을 한다.

SOP_trail_3.jpg

 

움직임을 더하기 위해 글로별 변수익스프레션 을 적절히 혼용했다.

$FF 변수는 현재 프레임 번호를 정수(Integer)가 아닌 실수(Float) 로 돌려준다.

$T 변수는 현재 타임(프레임번호 x 1/24) 을 실수로 돌려준다.

sin 함수는 괄호안에 인자가 변함에 따라 -1 과 +1 사이의 값을 번갈아가며 돌려준다.

 

그 결과, 스피어는 위아래로 진자운동을 하며 +Z 방향으로 계속 나아가게 된다.

위의 변수와 익스프레션이 완벽히 이해가 안되더라도 그냥 따라해보고 넘어간다. 단순히 스피어 애니메이션을 만들기 위한 과정일 뿐이다. Sine 함수는 다른 강좌에서 좀더 자세히 다루기로 한다.

 

이제 Trail SOP 을 하나 만든뒤 다음과 같이 연결해 준다.

 연결한 뒤에는 'trail1' 노드의 Display Flag 를 선택한다.

연결한 뒤에는 'trail1' 노드의 Display Flag 를 선택한다.

 

플레이를 해보면 원래의 스피어를 뒤따르는 또한개의 스피어를 발견할 수 있다.

 

'trail1' 노드의 Trail Increment 속성은 몇 프레임 간격으로 복사체를 만들지 결정한다.

기본값이 1이므로 이전 프레임($F-1) 위치에 복사체가 만들어진다.

SOP_trail_6.jpg

 

Trail Increment 속성값을 3 으로 높여보자.

3프레임 이전($F-3) 에 있던 위치에 복사체가 만들어지면서 두 스피어의 간격은 좀더 멀어진다.

 Trail Increment: 1

Trail Increment: 1

 Trail Increment: 3

Trail Increment: 3

 

반대로 속성값을 1보다 낮추면 두 스피어의 간격은 더 가까워진다.

프레임 번호는 정수값(Integer) 인데도 Trail Increment 값에 소수점을 입력해도 스피어 간격이 부드럽게 변하는 이유는 Sub-Frame 에 대한 설명이 필요하다. Sub-Frame 에 대해서는 다른 강좌에서 자세히 다루기로 하자.

 

'trail1' 노드의 Trail Length 속성은 복사체의 개수를 결정한다.

SOP_trail_9.jpg

 

이 속성값을 10 으로 수정한다.

열 개의 스피어들이 줄지어 따라다니는 애니메이션을 얻을 수 있다.

이때 복사체들은 Trail Increment 속성에서 정한 프레임 간격으로 복사된다.


Trail SOP 예제 2

예제 2에서는 Trail 노드를 속도(Velocity) 계산에 이용해 보자.
 

사실 속도라는 개념은 별거 없다.

현재 프레임에서의 위치에서 이전 프레임에서의 위치를 뺀 값이 속도이다.

속도(v) = 현재위치(@P) - 이전위치(@P)

 

예제 1에 이어서 계속해서 진행한다.

'trail1' 노드의 Trail Length, Trail Increment 속성을 원래의 기본값으로 돌려 놓는다.

'trail1' 노드의 Result Type 옵션에서 Compute Velocity 를 선택한다.

영어 그대로 속도(Velocity) 를 계산(Compute) 한다는 의미이다.

SOP_trail_10.jpg

 

씬 뷰에는 원래의 스피어 한개만 남고 별다른 차이가 없어 보인다.

'trail1' 노드 위에서 마우스 중간버튼으로 노드 요약정보를 확인한다.

v 라는 어트리뷰트가 생겼음을 알 수 있다.

SOP_trail_11.jpg

 

여기서 우리는 두가지 중요한 의미를 추론할 수 있다.

v 는 지오메트리 요소 중 Point 의 속도값을 나타낸다.

v 어트리뷰트의 데이터 타입 은 벡터(Vector) 이다.

 

씬뷰 오른쪽에 있는 Display Options 바에서 display point trail 버튼을 클릭한다.

이는 지오메트리가 v 어트리뷰트를 가지면 그 벡터를 씬뷰에서 디스플레이 해준다.

SOP_trail_12.jpg

 

프레임 번호를 바꿔가며 관찰해보면 v 벡터가 스피어에 붙어다님을 알 수 있다.

이 벡터의 방향은 현재 스피어의 운동방향을 나타낸다.

프레임 1 에서 벡터가 안보이는 이유는 속도를 계산하기 위한 이전 프레임 0 에서는 애니메이션이 없다고 가정하기 때문이다. 즉 프레임 0 과 1 모두 스피어의 위치가 같기 때문에 속도 벡터는 0 이 된다.