본문 바로가기
vfxai 잡학지식 vfxai 잡학지식

후디니 Solver SOP로 이전 프레임 값 쌓기

vfx 잡학지식 읽는 시간 약 12분

Solver SOP에서 이전 프레임 값을 쌓으려면 Solver 안의 Prev_Frame를 Attribute Wrangle (Run Over: Points)에 연결하고 결과를 OUT으로 보내세요. 예를 들어 점 속성 f@heat를 0으로 초기화한 뒤 f@heat += 0.1;을 실행하면 시작 프레임부터 프레임마다 값이 0.1씩 늘어납니다. Houdini 22.0.466 Apprentice에서 Start Frame 1, Sub Steps 1로 확인한 값은 프레임 1에서 0.1, 프레임 6에서 0.6, 프레임 11에서 1.1입니다.

일반 SOP는 현재 프레임의 입력으로 결과를 계산하므로 이전 프레임 값을 자동으로 기억하지 않습니다. Solver SOP는 직전 계산 결과를 다음 계산의 입력으로 되돌려 줍니다. 그래서 색이나 열기 같은 값을 누적하거나, 한 점에서 주변 점으로 단계적으로 번지는 성장 효과를 만들 수 있습니다.

Solver SOP 안에서 Prev_Frame을 연결하세요

후디니 22 Solver SOP 안에서 Prev_Frame에 Wrangle을 연결해 프레임 6에 heat 0.6이 쌓인 화면
Houdini 22.0.466 Apprentice에서 Solver SOP 안쪽에 Prev_Frame → Attribute Wrangle(f@heat += 0.1;) → OUT을 연결한 화면입니다. Start Frame 1 기본값에서 프레임 6의 heat는 0.6으로, 시작 프레임에서도 한 번 더해진 값이 쌓였습니다.

먼저 누적할 geometry를 만들고, Solver SOP 앞에서 시작 속성을 초기화하세요. 아래 예제에서는 모든 점에 float 속성 heat를 만들고 0으로 둡니다.

f@heat = 0;

초기화 Wrangle 뒤에 Solver SOP를 연결하고, Solver 안으로 들어가 Prev_Frame에서 Attribute Wrangle (Run Over: Points)을 거쳐 OUT으로 연결하세요. Attribute Wrangle의 코드는 다음과 같습니다.

f@heat += 0.1;
  • Solver SOP 바깥에서 원본 geometry를 Solver의 첫 번째 입력에 연결합니다.
  • Solver 내부에서 Prev_Frame를 Attribute Wrangle의 입력으로 연결합니다.
  • Attribute Wrangle 출력을 OUT에 연결하고, OUT의 표시 결과를 확인합니다.
  • Solver SOP의 Start Frame을 1, Sub Steps를 1로 두고, Cache Simulation을 켜서 재생합니다.

Houdini 22.0.466 Apprentice에서 새 Solver SOP를 만들었을 때 확인한 기본값은 다음과 같습니다.

Solver SOP 설정기본값역할
Start Frame1이 프레임부터 계산을 시작합니다.
Sub Steps1프레임마다 한 번 계산합니다.
Cache SimulationOn메모리에 시뮬레이션을 캐시해 스크럽합니다.
Allow Caching To DiskOff메모리 한도를 넘을 때 오래된 캐시를 디스크에 둘지 정합니다.
Cache Max Size5000 MB시뮬레이션 메모리 캐시의 최대 크기입니다.
Use Initial SOPOff첫 번째 입력 geometry를 초기 상태로 사용합니다.

이 설정에서는 시작 프레임에도 Wrangle이 한 번 실행됩니다. 따라서 시작 속성이 0이면 프레임 1에서 0.1이 되고, 프레임 2에서 0.2가 됩니다. Cd를 시험한다면 Solver 앞에서 @Cd = 0;으로 검은색을 지정하세요. Houdini의 Grid는 기본 색 속성을 가질 수 있으므로, 초기값을 확인하지 않으면 0.1이 아니라 기존 색에서 더해질 수 있습니다.

Prev_Frame은 이전 결과, Input_1은 원본입니다

Solver 내부의 입력 노드 이름은 역할을 구분하는 기준입니다. 누적 계산의 출발점은 Prev_Frame이며, Input_1은 Solver SOP 첫 번째 입력에 연결한 원본 geometry입니다. 두 노드를 바꿔 연결하면 값이 매 프레임 초기화되거나, 의도한 원본 위치와 비교하지 못할 수 있습니다.

Solver 안 노드가져오는 geometry주로 쓰는 경우
Prev_Frame이전 solve 결과값·위치·그룹을 프레임 사이에 누적
Input_1Solver 첫 번째 입력의 원본원래 위치, rest 정보, 초기 geometry 참조
Input_2~Input_4Solver의 추가 입력 geometry외부 source, 충돌체 등 별도 geometry 참조

SideFX 문서에서 Solver의 첫 번째 입력은 초기 geometry로 설명되며, 내부의 Input_1이 그 원본을 담습니다. 추가 입력은 Input_2부터 Input_4까지 전달할 수 있습니다. 이전 프레임을 이어 붙이는 피드백 선은 Prev_Frame에서 시작해야 합니다.

상한이 필요하면 누적식에 clamp를 넣으세요

f@heat += 0.1;은 상한 없이 계속 증가합니다. 색 마스크나 진행률처럼 0~1 범위에 머물러야 하는 값이라면 매번 더한 결과를 clamp로 제한하세요.

f@heat = clamp(f@heat + 0.1, 0.0, 1.0);

Houdini 19.5.435 hython에서 초기 Cd.r을 0으로 두고 @Cd.r += 0.1;을 실행하면 프레임 11에서 1.1이 됩니다. 같은 조건에서 clamp(@Cd.r + 0.1, 0.0, 1.0)을 적용하면 프레임 10부터 1.0에 머뭅니다. Houdini 22.0.466에서도 기본 Sub Steps 1일 때 프레임 1~11 값이 0.1~1.1로 늘어나는 것을 확인했습니다.

프레임상한 없음0~1 clamp
10.10.1
20.20.2
30.30.3
60.60.6
90.90.9
101.01.0
111.11.0

속성 창이나 Spreadsheet에서 수치를 확인하세요. 뷰포트 색이 흰색에 도달했다고 해서 속성 값이 1.0에서 멈춘 것은 아닙니다. clamp를 넣지 않았다면 숫자는 계속 커질 수 있습니다.

Sub Steps를 올리면 한 프레임에 여러 번 더해질 수 있습니다

Sub Steps는 프레임 사이 계산을 몇 단계로 나눌지 정합니다. Sub Steps가 1이면 예제의 상수 증가식은 한 프레임에 한 번 실행됩니다. 값을 3으로 바꾸면 한 프레임에 여러 solve pass가 생기므로, 코드가 그때마다 0.1을 더하면 프레임당 증가량도 커질 수 있습니다.

Houdini 19.5.435 hython에서 Sub Steps 3, 초기값 0, @Cd.r += 0.1;으로 측정했을 때 시작 프레임은 0.1, 프레임 2는 0.4, 프레임 3은 0.7, 프레임 11은 약 3.1이었습니다. 시작 프레임에서 한 번 계산된 뒤, 다음 프레임부터 세 번씩 더해진 결과입니다.

설정프레임 1프레임 2프레임 3프레임 11
Sub Steps 10.10.20.31.1
Sub Steps 30.10.40.7약 3.1

따라서 프레임당 0.1을 쌓는 간단한 효과는 Sub Steps 1로 시작하세요. 더 많은 substep이 필요한 시뮬레이션이라면 값 증가를 시간 간격에 맞춰 조정하고, 프레임별 최종값을 다시 확인하세요. Sub Steps를 바꾸면 기존 계산 캐시도 초기화해야 합니다.

되감기 결과는 Cache Simulation 상태를 확인하세요

Cache Simulation은 Solver 결과를 메모리에 보관해 타임라인을 스크럽할 때 다시 볼 수 있게 합니다. 처음 재생해 프레임 8까지 계산한 뒤 프레임 3으로 이동한다면, 저장된 프레임이 있으면 그 결과를 불러올 수 있습니다. Solver 안쪽 네트워크에서 재생하면 피드백되지 않은 일반 SOP 결과가 캐시에 들어갈 수 있으므로, Solver 바깥으로 나온 뒤 재생하세요.

Houdini 19.5.435 hython에서는 Cache Simulation을 켰을 때 프레임 8 뒤 프레임 3의 값이 0.3으로 돌아왔고, 캐시를 끄면 프레임 3과 6에서도 내부 상태 0.8이 남았습니다. Houdini 22.0.466에서는 Cache Simulation이 켜진 기본 상태에서 프레임 1부터 11까지 값이 0.1부터 1.1로 늘었습니다.

파라미터나 내부 네트워크를 바꿨거나, 캐시가 잘못된 것처럼 보이면 Reset Simulation으로 시뮬레이션 상태를 비우고 Start Frame부터 다시 앞으로 재생하세요. 메모리 한도 때문에 예전 캐시가 사라질 수 있습니다. Solver의 Allow Caching To Disk는 메모리가 찼을 때 오래된 시뮬레이션 캐시를 디스크에 보관하는 옵션입니다. 직접 프레임 파일로 저장·불러오는 File Cache SOP와는 역할이 다릅니다. 디스크 캐시 형식과 파일 크기를 정할 때는 후디니 캐시 형식별 용량 비교를 참고하세요.

값 누적과 공간 번짐은 서로 다른 계산입니다

f@heat += 0.1;만으로는 각 점의 값만 시간에 따라 증가합니다. 점 사이로 감염이나 성장을 퍼뜨리려면 주변 점을 찾거나, source 속성을 옮기는 로직을 Solver 안에 추가해야 합니다. 이때 Prev_Frame의 값을 읽고 이번 프레임에 어느 이웃까지 영향을 줄지 정합니다.

예를 들어 반경 0.5를 매 계산 pass마다 적용한다고 단순화하면, 시작 프레임 1부터 프레임 6까지 6회 계산되어 예상 거리는 3.0입니다. 하지만 실제 번짐 경계는 점 간격, geometry의 연결 상태, source 위치, 이웃 검색 방식에 따라 달라집니다. 아래 계산기는 일정한 증가량과 반경을 곱한 예상값이며, 실제 Houdini geometry에서 번지는 거리 자체를 보증하지 않습니다.

프레임별 누적값과 예상 번짐 거리를 계산하세요

계산 횟수는 시작 프레임에서 1회, 그 다음 프레임부터 프레임마다 Sub Steps만큼으로 잡습니다. Sub Steps 1, 시작 프레임 1, 현재 프레임 6, 회당 증가량 0.1, 회당 반경 0.5라면 총 6회입니다. 따라서 누적값은 0.6, 상한 1.0을 적용한 값도 0.6, 이론 번짐 거리는 3.0입니다.

Solver SOP 누적 계산기

정수 프레임 기준으로 계산합니다. 시작 프레임에서 한 번 계산하고, 이후 프레임마다 Sub Steps 횟수만큼 더합니다.

계산 횟수6회
상한 없는 누적값0.600
clamp 적용값0.600
이론 번짐 거리3.000
프레임이번 프레임 계산 횟수누적값clamp값예상 거리
110.1000.1000.500
210.2000.2001.000
310.3000.3001.500
410.4000.4002.000
510.5000.5002.500
610.6000.6003.000

거리는 매 solve pass마다 같은 반경만큼 번진다고 가정한 산술 예측입니다. 실제 확산 결과는 포인트 간격과 이웃 탐색·속성 전달 방식에 따라 달라집니다.

값이 초기화되거나 멈춘 것처럼 보이면 확인하세요

  • 누적 노드의 입력이 원본 Input_1이 아니라 Prev_Frame인지 확인합니다.
  • Attribute Wrangle 결과가 OUT까지 연결되고 OUT이 Solver 결과로 사용되는지 확인합니다.
  • 시작 속성이 정말 0인지 Spreadsheet에서 확인합니다. 기존 Cd가 있으면 먼저 초기화합니다.
  • 프레임당 한 번만 더할 목적이면 Sub Steps가 1인지 확인합니다.
  • 내부 network에서 재생했다면 Solver 바깥에서 Reset Simulation 후 다시 계산합니다.
  • 높은 프레임에서 과거 결과로 돌아가려면 Cache Simulation을 켜고, 파라미터 변경 뒤에는 캐시를 reset합니다.

핵심은 간단합니다. 이전 결과를 다시 입력하려면 Prev_Frame에서 출발하고, 시작값과 시작 프레임을 확인한 뒤, Sub Steps와 캐시 상태를 고정하세요. 그러면 프레임마다 누적값이 얼마나 늘어나는지 Spreadsheet와 계산기로 함께 검증할 수 있습니다.

vfx 잡학지식

함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.