후디니 Scatter 포인트 수와 밀도: 면적당 개수 계산
후디니 Scatter 포인트 수와 밀도를 조절할 때는 먼저 표면 면적과 Density Scale을 확인해야 합니다. Houdini Scatter SOP의 By Density 모드에서는 기본적으로 예상 포인트 수 = 표면 면적 × 밀도로 계산합니다. 다만 실제 생성 개수는 Seed에 따라 달라질 수 있습니다. 정확한 개수가 필요하면 Force Total Count를 사용하고, 점 사이의 뭉침을 줄이려면 Relax Iterations를 조절합니다.
예를 들어 면적이 100인 평면에 Density Scale 10을 지정하면 예상 포인트 수는 1,000개입니다. 그러나 이것이 반드시 1,000개를 생성한다는 뜻은 아닙니다. 면적에 비례해 점을 만들 것인지, 개수를 고정할 것인지부터 구분해야 합니다.
후디니 Scatter 포인트 수와 밀도는 면적×밀도로 계산합니다
Houdini 19.5의 Scatter SOP에서 Generate를 By Density로 설정하면 Density Scale을 기준으로 점을 생성합니다. 속성이나 텍스처에 의한 밀도 보정이 없는 경우, Density Scale은 표면의 단위 면적당 기대 포인트 수를 나타냅니다.
계산식은 다음과 같습니다.
예상 포인트 수 ≈ 표면 면적 × Density Scale
필요한 점 수를 먼저 정했다면 Density Scale의 시작값은 예상 점 수 ÷ 면적으로 계산하세요. 실제 결과는 seed와 다른 밀도 보정의 영향을 받을 수 있습니다.
| 표면 면적 | Density Scale | 예상 포인트 수 |
|---|---|---|
| 1 | 20 | 20개 |
| 4 | 20 | 80개 |
| 9 | 20 | 180개 |
| 16 | 20 | 320개 |
여기서 중요한 점은 Houdini의 씬 단위가 자동으로 미터(m)가 되지는 않는다는 사실입니다. 모델링 단위가 미터라면 면적을 m²로 해석할 수 있지만, 그렇지 않다면 위 계산은 씬 단위²를 기준으로 합니다.
또한 By Density의 계산값은 정확한 생성 개수가 아니라 기대 개수입니다. Scatter의 Global Seed는 포인트 배치뿐 아니라 생성 개수에도 영향을 줄 수 있습니다.
실측: 면적이 커지면 실제 포인트 수도 비례할까?
이론적인 기대 개수와 실제 생성 개수가 얼마나 다른지 Houdini 19.5.435에서 측정했습니다.
- 실험 환경: Windows 11 Pro, AMD Ryzen 7 5800X3D, Houdini 19.5.435 hython
- 입력: Rows 2, Columns 2인 단일 Grid SOP
- 노드: Scatter 2.0
- Generate: By Density
- Density Scale: 20
- Force Total Count: Off
- Relax: Off
- Global Seed: 0~31, 총 32개
- 면적: 1, 4, 9, 16 씬 단위²
| 면적 (씬 단위²) | 예상 개수 | 실제 평균 개수 | 실제 개수 범위 |
|---|---|---|---|
| 1 | 20 | 18.72 | 13~34 |
| 4 | 80 | 78.03 | 64~107 |
| 9 | 180 | 177.03 | 157~219 |
| 16 | 320 | 316.53 | 293~372 |
면적 16에서는 기대 개수가 320개였지만 실제 결과는 Seed에 따라 293~372개였습니다. 평균은 316.53개로 기대 개수에 가까웠습니다.
면적 1에서도 기대 개수는 20개였지만 실제 결과는 13~34개였습니다. 따라서 Density Scale에 면적을 곱한 숫자를 실제 생성 개수로 단정하면 안 됩니다.
이번 측정에서는 면적이 커질수록 평균 생성 개수도 증가했고, 평균값은 각 면적의 기대 개수에 가까웠습니다. 다만 이 결과는 단일 Grid와 지정한 Seed 범위에서 얻은 값입니다. 다른 형상에서도 같은 오차 범위가 나타난다는 뜻은 아닙니다.
정확한 개수는 Force Total Count로 고정합니다
Scatter에서 포인트 수를 결정하는 방법은 목적에 따라 다릅니다.
| 목적 | 선택 | 결과 |
|---|---|---|
| 면적에 비례해 포인트 생성 | Generate: By Density, Force Total Count Off | Density Scale을 기준으로 기대 개수 결정 |
| 정확한 포인트 개수 지정 | Force Total Count On | 지정한 총 개수 생성 |
| 특정 영역에 더 많은 점 배치 | Density Attribute | 위치별 상대 밀도 조절 |
| 점의 뭉침 감소 | Relax Iterations | 점 사이의 분포를 더 고르게 조정 |
표면 크기가 달라질 때 포인트 수도 함께 증가해야 한다면 By Density를 기준으로 설정하세요. 반대로 최종 배치점이 반드시 지정한 개수여야 한다면 Force Total Count를 켜세요.
두 설정은 해결하는 문제가 다릅니다. Density Scale은 면적당 기대 개수를 정하는 기준이고, Force Total Count는 최종 개수를 정확하게 지정하는 기능입니다. 체크박스를 켜면 그 옆 입력란에서 고정할 개수를 지정하며 Density Scale은 비활성화됩니다.

Density Attribute와 Seed는 무엇을 바꿀까?
Density Scale이 전체적인 밀도 기준이라면 Scatter Density Attribute는 표면의 어느 위치에 포인트를 더 많이 배치할지 조절하는 역할을 합니다.
Houdini 19.5에서는 Density Attribute에 point, vertex, primitive, detail 클래스의 속성을 사용할 수 있습니다. Point와 Vertex 속성의 값은 Primitive 표면에서 선형 보간됩니다.
따라서 영역별로 밀도가 다른 분포를 만들려면 해당 표면의 속성 값과 속성 클래스를 확인해야 합니다. 19.5.435 UI에서는 Use Density Attribute를 켠 다음 Density Attribute에 입력 표면의 속성 이름을 지정합니다. Density Attribute를 사용한 결과는 속성 값에 의해 상대적으로 보정된 분포이므로 단순히 전체 면적과 Density Scale만 곱한 값을 실제 포인트 수로 취급하면 안 됩니다.
Global Seed는 포인트의 생성 개수와 위치에 영향을 줍니다. By Density에서 Force Total Count를 끈 경우에는 Seed가 바뀌면서 포인트 수까지 달라질 수 있습니다.
배치를 비교할 때는 Seed를 고정한 상태에서 Density Scale이나 Density Attribute를 먼저 바꾸세요. Seed까지 동시에 바꾸면 어떤 설정이 결과를 변화시켰는지 구분하기 어려워집니다.
면적과 목표 간격으로 밀도 계산하기
작업할 때는 목표 포인트 수보다 점 사이의 대략적인 간격을 먼저 알고 있는 경우도 있습니다. 이때는 평면 격자를 가정한 간단한 근사식으로 Density Scale의 시작값을 구할 수 있습니다.
밀도 ≈ 1 ÷ 간격²
예상 개수 ≈ 면적 ÷ 간격²
예를 들어 모델링 단위가 미터이고 표면 면적이 100m²이며 목표 간격이 0.5m라면 다음과 같이 계산합니다.
- 목표 간격: 0.5m
- 간격의 제곱: 0.25m²
- 근사 밀도: 1 ÷ 0.25 = 4개/m²
- 근사 포인트 수: 100 × 4 = 400개
이 계산은 점이 일정 간격의 평면 격자에 놓인다고 가정한 근사식입니다. Scatter가 실제로 만든 점 사이의 평균 최근접 거리가 반드시 0.5m가 된다는 의미는 아닙니다. 무작위 배치와 Relax 결과에는 차이가 생길 수 있습니다.
아래 계산기에서 표면 면적과 목표 간격 또는 Density Scale을 입력해 예상 포인트 수를 계산해 보세요. 면적은 m²로 입력합니다. 모델링 단위가 미터일 때만 계산된 개수/m² 밀도를 Houdini의 Density Scale과 직접 대응시킬 수 있습니다. 계산 결과는 반올림한 예상값이며 실제 생성 개수를 보장하지 않습니다.
Scatter 포인트 수 계산기
면적과 간격 또는 면적당 개수를 넣으면 기대 포인트 수를 계산합니다.
간격 방식은 밀도≈1/간격²인 평면 격자 근사입니다. 계산값은 예상 개수이며, Houdini Scatter의 실제 개수나 Relax 후 최근접 거리를 보장하지 않습니다. m²와 Houdini 장면 단위가 같도록 모델 크기를 맞춘 경우에만 Density Scale로 그대로 옮기세요.
계산기로 구한 밀도는 초기 설정값으로 사용하세요. 실제 포인트 수는 Scatter 결과에서 확인하고, 개수가 정확해야 한다면 Force Total Count를 사용하세요.
Relax Iterations는 포인트를 얼마나 고르게 만들까?
Density Scale로 포인트 수를 조절해도 점이 특정 위치에 뭉쳐 보일 수 있습니다. 이때 사용하는 기능이 Scatter Relax Iterations입니다.
Relax Points를 켜면 점을 반복적으로 밀어내면서 뭉침을 줄이고 blue-noise에 가까운 분포를 만들도록 시도합니다. Relax Iterations가 반복 횟수입니다. 반복 횟수가 증가하면 계산 시간도 늘어납니다.
이를 비교하기 위해 Houdini 19.5.435에서 동일한 Grid와 Seed를 유지하고 Relax Iterations만 변경했습니다.
- 실험 환경: Windows 11 Pro, AMD Ryzen 7 5800X3D, Houdini 19.5.435 hython
- 입력: 10×10 Grid, 면적 100 씬 단위²
- Density Scale: 10
- 측정 배치: Seed 203, 실제 포인트 수 971개
- 거리 측정: 각 점에서 가장 가까운 다른 점까지의 거리
- Cook 시간: Seed 201~205의 forced cook 평균
- 비교한 Relax Iterations: 0, 1, 2, 5, 10, 20
| Relax Iterations | 최근접 거리 최솟값 | 최근접 거리 평균 | 평균 Cook 시간 (ms) |
|---|---|---|---|
| 0 | 0.005 | 0.162 | 0.12 |
| 1 | 0.028 | 0.231 | 1.98 |
| 2 | 0.122 | 0.256 | 3.53 |
| 5 | 0.176 | 0.283 | 10.03 |
| 10 | 0.208 | 0.298 | 19.64 |
| 20 | 0.246 | 0.309 | 41.61 |
Relax를 사용하지 않았을 때 최근접 거리의 최솟값은 0.005, 평균은 0.162였습니다. Iterations를 5로 높이자 최솟값은 0.176, 평균은 0.283으로 증가했습니다.
Iterations 20에서는 최근접 거리 최솟값이 0.246, 평균이 0.309였습니다. 이번 구성에서는 반복 횟수가 많아질수록 서로 지나치게 가까운 점이 줄어드는 방향으로 변화했습니다.
그러나 계산 비용도 증가했습니다. Relax 0의 평균 Cook 시간은 0.12ms였지만, Relax 5에서는 10.03ms, Relax 20에서는 41.61ms였습니다.
이 시간은 지정한 PC와 단일 Grid 구성에서 얻은 forced cook 측정값입니다. 다른 하드웨어나 복잡한 표면에서도 동일한 시간이 걸린다는 뜻은 아닙니다.
실무에서는 Relax Iterations를 무조건 높이기보다 낮은 값부터 증가시키면서 배치의 균일성과 Cook 비용을 함께 비교하세요. 반복 횟수의 적정값은 작업에 필요한 분포와 처리 비용을 기준으로 판단해야 합니다.
Output Radius Attribute는 평균 포인트 간격이 아닙니다
19.5.435 UI에서는 Use Output Radius Attribute를 켜고 Output Radius Attribute에 만들 속성 이름을 지정하면 각 점에 반경 값을 출력합니다. 이 반경은 점 위치의 밀도에 대응하며, 점과 점 사이의 실제 평균 거리로 해석하면 안 됩니다.
Houdini 19.5 공식 문서에 따르면 표면에서 최대 반경 제한이 적용되지 않은 경우, 반경은 대략 다음 식으로 계산됩니다.
Radius ≈ 0.537 ÷ √Density
Density가 10이라면 반경은 약 0.170 씬 단위입니다. 이 값은 평균 최근접 거리와 같은 개념이 아닙니다.
앞선 Relax 실험에서도 Seed 203의 평균 Output Radius Attribute는 모든 반복 단계에서 0.170으로 유지됐습니다. 반면 실제 평균 최근접 거리는 Relax 0에서 0.162, Relax 20에서 0.309로 달라졌습니다.
| Relax Iterations | 평균 Output Radius | 평균 최근접 거리 |
|---|---|---|
| 0 | 0.170 | 0.162 |
| 5 | 0.170 | 0.283 |
| 10 | 0.170 | 0.298 |
| 20 | 0.170 | 0.309 |
즉, Output Radius는 해당 위치의 밀도와 연관된 반경을 확인할 때 사용하는 값이고, Relax로 달라진 실제 점 간격을 직접 나타내는 값은 아닙니다. 배치가 얼마나 고른지 판단하려면 실제 포인트 사이의 거리를 별도로 확인해야 합니다.
포인트 분포 비교 도구로 차이 확인하기
밀도가 같더라도 점을 배치하는 방식에 따라 가까운 점이 몰려 보일 수 있습니다. Relax를 적용하면 점을 서로 밀어내는 과정에서 분포가 달라집니다.
아래 분포 체험 도구에서 점들이 뭉친 상태와 보다 고르게 퍼진 상태를 비교해 보세요. 이 도구는 배치의 개념을 이해하기 위한 시각적 예시이며, Houdini 19.5.435의 Scatter 알고리즘이나 앞선 실측 결과를 그대로 재현하는 것은 아닙니다.
무작위 분포와 단순 이완 근사 비교
같은 무작위 점을 유지한 채 보기 모드를 바꾸세요.
무작위로 생성한 예시 점입니다.
브라우저 JS의 단순 이완 근사 시각화이며 Houdini Scatter의 Relax 알고리즘 구현과 다릅니다. 실제 점 개수나 거리는 Houdini에서 확인하세요.
도구에서 보이는 점 간격과 실제 Houdini 결과는 다를 수 있습니다. 최종 설정은 자신의 Scatter 결과를 기준으로 확인하세요. 같은 Seed에서 Relax Iterations만 바꿔 비교하면 분포 변화의 영향을 구분하기 쉽습니다.
Houdini 19.5와 22의 Scatter 문서 차이
이번 글의 조작 기준과 실측 버전은 Houdini 19.5.435입니다. Scatter 공식 문서는 Houdini 버전에 따라 설명 범위가 다르므로 최신 문서에 나오는 옵션이 19.5.435에도 동일하게 존재한다고 가정하면 안 됩니다.
Houdini 22.0 공식 문서는 노드를 Scatter 2.0으로 표기합니다. Houdini 19.5.435 설치판에서 확인한 노드 타입도 scatter::2.0이지만, 19.5 공식 문서 페이지 제목은 Scatter입니다. 문서 표기와 실제 설치 UI를 함께 확인하세요.
Density Attribute 설명도 차이가 있습니다. Houdini 19.5 문서를 기준으로 설명한 By Density 외에, Houdini 22 문서에서는 In Texture Space와의 관계도 명시합니다. Density Texture 역시 더 넓은 Generate 모드와 관련해 설명됩니다.
따라서 Houdini 22 문서를 참고하는 경우에는 해당 버전의 설명을 확인하세요. 이 글에 제시한 면적별 포인트 수, Relax 거리, Cook 시간은 모두 Houdini 19.5.435에서 측정한 값이며 Houdini 22의 실측 결과를 뜻하지 않습니다.
공식 문서는 Houdini 19.5 Scatter SOP 문서와 Houdini 22 Scatter SOP 문서를 참고할 수 있습니다.
Scatter 결과를 Copy to Points에 연결할 때
Scatter로 만든 포인트를 Copy to Points의 배치점으로 사용한다면, 먼저 배치할 개수와 분포를 결정해야 합니다. 면적에 따라 배치 개수를 늘릴 것인지, 정확한 개수를 유지할 것인지, 특정 영역에 더 많이 배치할 것인지에 따라 Scatter 설정이 달라집니다.
배치점을 정한 뒤 복사 오브젝트의 회전이나 크기까지 조절해야 한다면 Copy to Points에서 orient·N·up·pscale 속성의 적용 순서를 설명한 글을 함께 확인하세요. Scatter의 포인트 분포와 Copy to Points의 복사 방향·크기 설정은 서로 구분해서 다뤄야 합니다.
정리: 포인트 수와 간격은 따로 판단하세요
후디니 Scatter 포인트 수와 밀도를 설정할 때 가장 먼저 결정할 것은 정확한 개수가 필요한지, 면적에 비례한 분포가 필요한지입니다.
- Density Scale: 면적당 기대 포인트 수를 정합니다. 기본 계산은 면적 × 밀도입니다.
- Force Total Count: 정확한 개수가 필요할 때 사용합니다.
- Density Attribute: 표면 위치에 따른 상대적인 밀도 분포를 조절합니다.
- Global Seed: 점의 위치와 생성 개수에 영향을 줄 수 있습니다.
- Relax Iterations: 점의 뭉침을 줄이지만 계산 시간도 증가합니다.
- Output Radius Attribute: 위치별 밀도에 대응하는 반경이며 실제 평균 최근접 거리와는 다릅니다.
실측에서는 Density Scale 20의 예상 포인트 수가 면적에 따라 증가했지만 실제 개수는 Seed별로 달랐습니다. 또한 Relax Iterations를 높이면 이번 Grid 구성에서는 평균 최근접 거리가 증가하면서 Cook 시간도 늘어났습니다.
먼저 면적과 목표 개수로 Density Scale의 시작값을 계산하세요. 그다음 실제 생성 개수를 확인하고, 필요한 경우 Force Total Count나 Relax Iterations를 조절하세요. 목표 간격으로 계산한 밀도는 근사값이므로 최종 분포는 실제 Houdini 결과를 기준으로 판단해야 합니다.
vfx 잡학지식

댓글 0
첫 댓글을 남겨보세요.