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

후디니 Group 칸 패턴 문법: 번호 범위·속성 조건·제외

vfx 잡학지식 읽는 시간 약 11분 조회 2

후디니 그룹을 고를 때 Group 칸의 문법은 숫자 목록, 범위, 속성 조건을 조합하는 방식입니다. `0-10:2`는 0부터 10까지 두 칸씩 건너뛰고, `@P.y>0`은 위치의 Y값이 0보다 큰 점을 고릅니다. 다만 `!`와 `^`는 둘 다 제외처럼 보여도 기준이 다릅니다. Houdini 19.5.435의 25점 Grid와 Blast로 직접 확인한 결과를 따라가며 구분해 보겠습니다.

패턴이 맞는 것 같은데 결과가 비거나 엉뚱한 점이 남았나요? 화면에서는 비슷해 보여도, 지금 넣은 문자가 전체 geometry를 뜻하는지 앞서 고른 점만 바꾸는지부터 확인해야 합니다. 먼저 가장 자주 쓰는 번호 문법부터 보겠습니다.

1. 후디니 그룹 패턴에서 점 번호는 0부터 세고, 공백은 여러 선택을 합칩니다

후디니 그룹 패턴을 숫자로 확인할 때는 점 번호가 0부터 시작한다는 점을 기억하세요. 점이 25개라면 번호는 0부터 24까지입니다. `0 3 5`처럼 숫자를 공백으로 나누면 세 점을 고릅니다. `0-10`은 0과 10을 포함한 연속 범위입니다. 패턴 여러 개를 공백으로 나누어 쓰면 각각의 결과가 합쳐집니다.

`0-10:2`의 마지막 `:2`는 2 간격으로 고르라는 뜻입니다. 그래서 결과는 0, 2, 4, 6, 8, 10입니다. 숫자가 한 칸씩 증가하는 패턴을 만들려면 `0-10`만 쓰면 됩니다. 반대로 짝수 번호 점만 빠르게 남길 때는 간격 패턴을 쓸 수 있습니다.

Group 패턴 미리 보기

아래 예제의 점 번호와 속성을 기준으로 선택 결과를 확인해 보세요. Houdini 전체 문법이 아닌, 글에서 다루는 일부 패턴만 구현한 안내 도구입니다.

선택된 점 번호:

예제 속성은 id=점 번호, P.y=점 번호−12, 짝수 점의 name=piece_red, 홀수 점의 name=other입니다. 그룹 piece_front는 0–12, piece_back은 13–24를 담습니다.

지원: 번호 목록·오름 범위·간격, *, !, ^, 예제 그룹 이름, @P.y/@id 수 비교, @name 문자열 비교. 미지원: primitive·vertex·edge 그룹, ?와 문자 대괄호 패턴, & 교집합, 인트린식 속성, n-m:keep,step, 공백이 있는 따옴표 문자열, 여러 값 목록. 전체 문법은 SideFX 문서를 확인하세요.

이 도구의 `0-10:2` 결과는 Hython 실측과 같은 0, 2, 4, 6, 8, 10입니다. 오른쪽 격자는 실제 Houdini 뷰포트가 아니라 점 번호만 보여 주는 고정 예제입니다. 아래 표의 선택 번호는 입력 조건을 바꿔도 다시 읽을 수 있도록 함께 적었습니다.

2. `*`, 그룹 이름, 속성 조건은 서로 다른 기준입니다

`*`는 점 번호 전체를 뜻합니다. `!*`는 전체에서 전체를 빼므로 결과가 없습니다. 그룹 이름을 쓰면 기존 그룹에 들어 있는 점을 선택합니다. 예제에서는 `piece_front`가 0–12, `piece_back`이 13–24이므로 `piece*`는 두 그룹을 합쳐 25점을 모두 선택합니다.

반면 `@name=piece*`의 `piece*`는 그룹 이름이 아니라 문자열 속성의 값입니다. 실측 예제에서 점의 `name` 속성은 짝수 점에 `piece_red`, 홀수 점에 `other`를 넣었습니다. 그래서 이 패턴은 짝수 번호만 골랐습니다. 이름이 비슷해도 앞에 `@`가 있는지 확인하면 기준이 달라집니다.

속성 조건은 비교 연산자로 범위를 좁힙니다. `@P.y>0`은 위치 속성 P의 Y 성분이 0보다 큰 점을, `@id=5-10`은 id 속성 값이 5부터 10까지인 요소를 선택합니다. 테스트에서는 `P.y`를 점 번호에서 12를 뺀 값으로 설정했기 때문에 `@P.y>0` 결과는 13–24였습니다. 0을 포함하는 `@P.y>=0`은 12–24였습니다.

속성이 어느 클래스에 있는지도 중요합니다. `P`는 보통 point 위치 속성이므로 point group을 다루는지 확인하세요. 속성 위치가 헷갈리면 후디니 속성이 포인트·버텍스·프리미티브 중 어디에 있는지 확인하는 방법을 먼저 보세요.

3. 같은 제외 기호처럼 보여도 `!`와 `^`는 다릅니다

`!`는 지정한 패턴을 빼고 나머지를 선택합니다. 예를 들어 `!2-6`은 2부터 6까지를 제외하고, 테스트 geometry에서는 0, 1, 7부터 24까지가 남았습니다. `!*`는 모든 점을 제외하므로 빈 결과입니다.

`^`는 앞에서 만든 결과에서 지정한 패턴을 제거합니다. `0-10 ^2-6`은 먼저 0부터 10까지 선택한 다음, 그중 2부터 6까지를 뺍니다. 따라서 결과는 0, 1, 7, 8, 9, 10입니다. Group 칸의 패턴은 왼쪽에서 오른쪽으로 이어 읽으세요. `^` 앞에 기반 선택이 없으면 빼낼 대상도 없습니다.

정리하면 `!`는 전체의 반대 선택, `^`는 앞선 선택에서 빼기입니다. 이 차이가 헷갈릴 때는 한 번에 여러 조건을 쓰지 말고, 단순한 패턴 하나를 넣어 결과를 확인한 뒤 제외 패턴을 추가하세요.

4. 후디니 그룹 패턴을 Hython으로 재현한 25점 결과

아래 결과는 Windows의 Houdini 19.5.435 Hython에서 Grid 5×5를 만들고, 각 점의 id를 번호와 같게 설정한 뒤 확인했습니다. 점마다 `P.y`는 번호−12, `name`은 짝수 번호에서 `piece_red`, 홀수 번호에서 `other`로 만들었습니다. Blast의 Group Type을 Points로 두고 Delete Non Selected를 켜서 선택된 점만 남긴 다음, 출력 geometry의 id를 읽었습니다.

Group 패턴선택된 point id읽는 법
0 3 50, 3, 5공백으로 번호 목록
0-100–10양 끝을 포함한 연속 범위
0-10:20, 2, 4, 6, 8, 102 간격
piece*0–24두 그룹 이름을 와일드카드로 매칭
*0–24전체
!*없음전체의 반대
!2-60, 1, 7–242–6을 제외한 전체
0-10 ^2-60, 1, 7, 8, 9, 10앞선 범위에서 2–6 제외
@P.y>013–24Y가 0보다 큰 점
@id=5-105–10id 값이 범위에 든 점
@name=piece*0, 2, 4, …, 24name 문자열 와일드카드
@name!=other0, 2, 4, …, 24name이 other가 아닌 점
@P.y>=012–24경계 0 포함

표는 입력 순서가 같은 테스트 geometry의 실제 id 결과입니다. 번호 범위가 0–24라는 사실이나 `@P.y`와 번호 사이의 관계는 이 예제를 만들기 위해 설정한 값입니다. 다른 씬에서는 점 번호, 속성 값, 그룹 이름이 다를 수 있으니 표의 숫자를 그대로 정답처럼 옮기지 마세요.

5. Blast에 넣고 선택 결과를 확인하는 순서

  1. Group 칸이 있는 SOP를 선택하고 입력 geometry의 요소 타입을 확인합니다.
  2. 점 번호로 테스트할 때는 Blast의 Group Type을 Points로 설정합니다. 프리미티브를 고를 목적이면 Primitives를 고르세요.
  3. 패턴을 하나만 입력합니다. 예를 들어 `0-10:2`를 입력하고 결과를 확인합니다.
  4. Blast에서 선택된 요소만 남겨 보고 싶으면 Delete Non Selected를 켭니다. 이 옵션은 선택하지 않은 요소를 지워 선택한 부분만 보이게 합니다.
  5. Geometry Spreadsheet나 뷰포트에서 결과를 확인합니다. 숫자가 비면 입력 geometry에 점이 있는지, 속성 이름과 클래스가 맞는지, Group Type이 일치하는지 점검하세요.

Group Create 노드에서 새 그룹을 만들 때는 Base Group에 패턴을 넣을 수 있습니다. Group 칸이 기존 그룹을 필터링하는 자리인지, Group Create의 Base Group처럼 새 그룹의 입력 선택을 정하는 자리인지 노드 이름과 파라미터를 구분하세요. Group Expression SOP는 별도 노드입니다. 이 노드는 각 point, primitive 또는 vertex에 VEX 표현식을 평가해 그룹에 넣습니다. 패턴 문법과 VEX 식은 비슷해 보이는 표기가 있어도 같은 입력 규칙이라고 가정하지 마세요. SideFX Group Expression 문서에서 VEXpression 입력 방식을 확인할 수 있습니다.

후디니 Blast Group 칸에 0-10:2를 넣고 Delete Non Selected를 켠 화면
Houdini 22.0.466 Apprentice에서 5×5 Grid에 Blast Group 0-10:2, Group Type Points, Delete Non Selected를 켠 화면입니다. 미리 저장한 orig_ptnum 열에 0·2·4·6·8·10만 남습니다.

6. 19.5에서 실측하고, 최신 공식 문서와 대조하세요

위 표는 Houdini 19.5.435의 Hython에서 실행한 결과입니다. SideFX의 19.5와 최신 문서는 번호, 범위, 간격, 제외, 이름 패턴, 속성 비교의 기본 문법을 설명합니다. 확인한 기본 예제는 이 버전에서 실제로 동작했습니다.

다만 22.0 공식 문서는 속성 비교의 bitwise-and 연산자 `&`와 `@ptnum`, `@primnum`, `@elemnum` 비교를 명시합니다. 19.5 문서의 같은 표에는 이 항목이 적혀 있지 않습니다. 문서에 적혀 있지 않다는 이유만으로 19.5에서 절대 지원하지 않는다고 단정하지 말고, 해당 버전에서 실제로 필요한 문법을 검증하세요.

노드 표시명과 파라미터 배치도 버전에 따라 다를 수 있습니다. 19.5.435 Hython에서는 노드 타입 `groupcreate`의 설명이 Group Create로 표시됐고, 최신 SideFX 문서 제목은 Group geometry node입니다. 노드를 찾을 때는 Tab 메뉴에 보이는 이름과 실제 Group 또는 Base Group 파라미터를 확인하세요.

공식 문법 전체는 SideFX Groups의 Group syntax에서, Group Create의 설정은 Group geometry node에서 확인할 수 있습니다. Houdini 22.0 문서는 Group syntax에서 현재 명시된 속성 조건을 비교할 때 참고하세요.

마무리: 패턴을 짧게 넣고 실제 번호를 보세요

Group 패턴은 숫자·그룹 이름·속성 중 무엇을 기준으로 고르는지 먼저 확인하고, 공백으로 나눈 패턴을 왼쪽부터 읽으면 덜 헷갈립니다. 전체를 반전하는 `!`와 앞선 선택을 줄이는 `^`를 구분하고, 결과의 요소 번호와 속성을 직접 확인하세요.

Group 패턴은 왼쪽부터 읽고, 실제 선택된 요소 번호와 속성으로 검증하세요.

vfx 잡학지식

함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.