후디니 v 속성 만들기와 모션 블러 길이 계산
v 속성을 만들었는데도 후디니 모션 블러가 안 보이거나, 물체가 생각보다 길게 늘어져 보이는 경우가 있습니다. 먼저 v가 프레임당 이동량인지 초당 속도인지 확인해야 합니다. 이어서 FPS와 셔터 비율, 마지막으로 Karma가 어떤 블러 방식을 쓰는지 살펴보겠습니다.
핵심은 간단합니다. v는 초당 속도이고, 한 프레임에 찍히는 블러 길이는 v에 셔터 비율을 곱한 뒤 FPS로 나눕니다. 다만 이 계산이 맞아도 포인트 수가 바뀌는 시뮬레이션에 변형 블러를 선택하면 결과가 나오지 않을 수 있습니다.
🗺 이 글에서는 Trail SOP로 v를 만들고, 실제 Houdini 19.5.435에서 값을 재현한 뒤, 계산기로 씬 단위와 화면 픽셀 길이를 확인합니다. 마지막에는 Karma의 속도 블러와 변형 블러 중 무엇을 고를지 정리합니다.
Trail SOP에서 v 속성 만들기

점이 시간에 따라 움직일 때 Trail SOP가 이전 프레임과 다음 프레임의 위치 차이를 읽어 속도를 계산할 수 있습니다. 움직이는 지오메트리 뒤에 Trail SOP를 연결하고, Result Type을 Compute Velocity로 바꾸세요. Trail SOP가 점마다 벡터 속성 v를 만듭니다.
@P.x = @Frame * 0.1;
이 코드는 프레임이 하나 바뀔 때마다 X 방향으로 0.1 씬 단위씩 움직이는 일정 속도 예입니다. Trail SOP의 Velocity Approximation은 Central Difference, Forward Difference, Backward Difference 중에서 고릅니다. Central Difference는 현재 프레임의 앞뒤 위치를 함께 보고, Forward Difference는 현재와 다음 프레임의 위치를 봅니다. SideFX 문서는 일반적으로 Central Difference가 더 정확하다고 설명합니다.
일정 속도라면 두 방법의 값은 거의 같습니다. 가속 중이면 다릅니다. 직접 재현한 보조 테스트에서는 x=0.01×프레임², 24fps, 10프레임에서 Central Difference가 약 4.80 units/s, Forward Difference가 약 5.04 units/s였습니다. 어느 쪽을 써도 속도 변화가 큰 구간에서는 샘플 시점과 움직임을 함께 확인해야 합니다.
중요한 점은 속도 단위입니다. Trail SOP는 프레임 사이의 위치 변화에 내부적으로 $FPS를 곱해 초당 속도로 바꿉니다. 그래서 한 프레임마다 0.1 units 움직이는 물체는 24fps에서 0.1×24=2.4 units/s입니다. Trail SOP의 Velocity Scale은 이 결과에 곱하는 배율이며, 기본 1이면 속도값을 그대로 둡니다.
Windows의 Houdini 19.5.435 Commercial에서 Grid SOP의 점을 Attribute Wrangle로 일정하게 움직이고, Trail SOP를 Compute Velocity로 설정해 확인했습니다. 프레임 10에서 각 점의 X 속도를 읽었습니다. 이 시험은 씬 파일이나 외부 에셋 없이 같은 코드를 다시 실행할 수 있습니다.
| FPS | 프레임당 이동 | 이론값 | Central 측정 | Forward 측정 |
|---|---|---|---|---|
| 24 | 0.1 units | 2.4 units/s | 2.4000 | 2.4000 |
| 24 | 0.25 units | 6.0 units/s | 6.0000 | 6.0000 |
| 60 | 0.05 units | 3.0 units/s | 3.0000 | 3.0000 |
표의 이론값은 프레임당 이동 거리×FPS입니다. 측정값의 미세한 차이는 지오메트리의 부동소수점 정밀도에서 생겼고, 표에는 소수점 넷째 자리까지 표시했습니다. 이 테스트에서 일정 속도의 Trail v는 이론값과 일치했습니다.
모션 블러 길이는 v, FPS, 셔터로 계산합니다
v가 초당 속도라면 프레임 하나가 지나는 시간은 1/FPS초입니다. 카메라 셔터가 한 프레임 중 열려 있는 비율을 s라고 하면 노출 시간은 s/FPS초입니다. 따라서 직선 운동의 블러 길이는 v × s ÷ FPS입니다. 셔터 비율 0.5는 한 프레임의 절반 동안 노출한다는 뜻입니다.
예를 들어 24fps에서 v가 2.4 units/s이고 셔터 비율이 0.5라면, 블러 길이는 2.4×0.5÷24=0.05 units입니다. 속도가 같을 때 셔터 비율을 1로 바꾸면 0.1 units가 됩니다. FPS가 높아지면 같은 초당 속도와 셔터 비율에서도 프레임당 노출 시간이 짧아집니다.
후디니 모션 블러 길이 계산기
속도와 카메라 조건을 입력하면 씬 단위와 화면 픽셀의 대략적인 길이를 계산합니다.
픽셀 추정은 움직임이 화면 면과 평행하다고 가정합니다. 카메라 방향으로 움직이거나 물체의 깊이가 달라지면 실제 투영 길이는 달라질 수 있습니다.
픽셀 길이는 수평 화각과 물체까지의 거리로 환산한 근삿값입니다. 카메라에서 깊이 10 units인 물체, 수평 화각 50도, 가로 1920px이면 1 unit이 화면에서 약 206px에 해당합니다. 위 예의 0.05 units는 약 10.3px입니다. 가로 해상도 대신 세로 길이를 쓰거나, FOV 종류가 수직 화각인 카메라 값을 넣으면 결과가 달라집니다.
Karma의 속도 블러와 변형 블러는 용도가 다릅니다
Solaris에서 전체 모션 블러는 Render Settings LOP의 Karma > Global > Default Geometry Settings > Motion Blur > Enable Motion Blur에서 켭니다. 같은 Motion Blur 묶음의 Motion Samples from Stage는 기본적으로 켜져 있어 USD에 기록된 시간 샘플을 사용합니다. 이 상태에서는 Geometry Time Samples를 조절하는 대신 USD에 셔터 구간의 시간 샘플이 충분히 있는지 확인하세요. 물체별 선택은 Render Geometry Settings LOP의 Karma 항목에서 합니다. 여기서 Velocity Blur는 No Velocity Blur, Velocity Blur, Acceleration Blur 중 하나를 고르고, 변형 블러 샘플 수는 Geometry Time Samples로 지정합니다. 수동으로 샘플 수를 정하려면 Render Settings LOP에서 Motion Samples from Stage를 끄고, 필요한 서브프레임 시간 샘플이 USD에 있는지 확인하세요.
Velocity Blur를 쓰려면 점에 속도 벡터가 있어야 합니다. SOP의 v는 Solaris USD에서 velocities로 대응되며, 단위는 Houdini units/s입니다. SOP 단계에 v가 있는지 Geometry Spreadsheet에서 확인하고, Solaris stage에서 올바른 지오메트리 prim에 속성이 전달됐는지도 확인하세요. Motion Blur LOP는 셔터 구간의 서브프레임 샘플을 만들 수 있지만, velocity blur 자체에는 점 속도 속성이 필요합니다.
반면 Geometry Time Samples를 이용하는 변형 블러는 셔터 시간의 여러 시점에서 지오메트리 포인트 위치를 가져와 중간 모양을 보간합니다. 그래서 샘플마다 포인트 수가 같고, 같은 인덱스가 같은 점을 가리켜야 합니다. 점이 태어나거나 사라지는 파티클·유체처럼 토폴로지가 변하면 앞 프레임의 점 12번과 다음 프레임의 점 12번이 같은 입자라는 보장이 없습니다. Karma가 위치를 올바르게 짝지을 수 없으므로 이 방식의 변형 블러가 맞지 않습니다.
포인트 수가 프레임마다 바뀌면 변형 블러 대신 점별 velocities를 쓰는 Velocity Blur를 선택하세요. 반대로 포인트 수와 연결 관계가 유지되는 캐릭터 변형이나 메시 애니메이션은 USD에 충분한 시간 샘플이 있는지 확인한 뒤 Geometry Time Samples를 늘립니다. Velocity Blur와 변형 블러는 동시에 누적되는 선택지가 아닙니다. Karma 문서상 Velocity Blur 또는 Acceleration Blur가 설정된 물체에는 변형 블러가 적용되지 않습니다.
파티클처럼 점이 생기고 사라지는 작업에서는 속성만 보지 말고 점 개수도 함께 확인하세요. 생성 속도와 수명으로 입자 수를 계산하는 방법은 후디니 POP 입자 수 계산 글에서 다룹니다.
블러가 없거나 너무 길 때 확인할 것
| 증상 | 먼저 확인할 항목 | 다음 조치 |
|---|---|---|
| 블러가 전혀 없음 | Karma Enable Motion Blur, 지오메트리의 Velocity Blur, 점에 v/velocities가 있는지 | 속도 속성이 USD prim까지 전달됐는지 확인합니다. 변형 블러라면 USD에 여러 시간 샘플이 있는지 확인합니다. |
| 블러가 예상보다 김 | v의 크기와 방향, Velocity Scale, FPS, 셔터 비율 | v 단위가 units/s인지 확인하고 v×셔터÷FPS로 길이를 다시 계산합니다. |
| 변형 메시만 흐리고 싶음 | 프레임 사이 포인트 수와 시간 샘플 | 토폴로지가 같다면 USD의 셔터 구간 시간 샘플이 충분한지 확인합니다. 수동 샘플 수를 지정할 때는 Motion Samples from Stage를 끄고 Geometry Time Samples를 2 이상으로 시험합니다. 변형이 급하면 서브프레임 샘플을 추가합니다. |
| 파티클·유체처럼 점 수가 바뀜 | 매 프레임의 point count와 velocities | 점별 속성을 준비해 Velocity Blur를 사용합니다. 변형 블러는 점 대응이 유지되지 않습니다. |
🔙 여기까지 정리하면, Trail SOP는 점 위치의 시간 변화를 초당 v로 바꾸고, 셔터가 열린 시간만큼 그 속도를 누적해 블러 길이를 만듭니다. 렌더에서 값이 안 보이면 속도 수치와 렌더 방식, USD 시간 샘플을 서로 다른 단계로 나눠 확인해야 합니다.
한 줄 정리
블러 길이는 v를 FPS로 나눈 뒤 셔터 비율을 곱합니다. 점 수가 바뀌면 변형 블러가 아니라 점별 속도 블러를 고르세요.
참고 자료
vfx 잡학지식
댓글 0
첫 댓글을 남겨보세요.