본문 바로가기
이펙트 (FX)/이펙트 팁 : Houdini

[Houdini] 담배 연기 만드는 법 소개 (Cigarette Smoke)

by Minkyu Lee 2025. 8. 19.

개요

후디니에서 샤프한 연기를 만드는 노하우를 소개하는 아티클이다.

 

내용

파트 1: Cigarette Smoke (2016년 4월)

이 글은 Houdini를 사용하여 사실적인 담배 연기를 만드는 방법에 대한 초기 튜토리얼입니다. 저자인 알레산드로 페페는 두 가지 주요 시뮬레이션 기법을 제시합니다.

  1. 포인트를 애드벡션하는 방법 (Advect Points):
    • 개념: 연기 시뮬레이션으로 생성된 속도 필드(Velocity Field)를 따라 수많은 포인트를 흘려보내 연기의 움직임을 표현하는 방식입니다.
    • 과정: 먼저 연기 시뮬레이션 데이터를 불러온 뒤, 포인트 이미터(Emitter)를 설정하고 솔버(Solver)를 이용해 매 프레임 포인트를 생성하고 움직임을 계산합니다.
    • 문제점 및 해결책: 이 방식은 포인트가 부족해 연기가 끊겨 보이거나, 움직임이 계단처럼 각져 보이는 문제가 발생할 수 있습니다. 저자는 이를 해결하기 위해 포인트의 초기 위치를 살짝 "번지게(smearing)" 하거나, 밀도가 높은 영역으로 포인트를 모아주는 그래디언트 벡터 필드(Gradient Vector Field)를 사용하는 방법을 제안합니다.
  2. 라인을 애드벡션하는 방법 (Advect Lines):
    • 개념: 포인트 대신 라인(선)을 속도 필드에 따라 흘려보내는 방식입니다. 이는 저자가 더 선호하는 방법입니다.
    • 장점: 라인을 사용하면 포인트 방식의 단점인 연기의 끊김 문제를 해결할 수 있습니다. 결과적으로 더 부드럽고 연속적인, 실제 담배 연기 특유의 곡선 형태를 효과적으로 표현할 수 있습니다.
    • 과정: 일정한 지점에서 생성된 라인을 솔버 내에서 지속적으로 리샘플링하고 부드럽게 만들어 자연스러운 연기 흐름을 만듭니다.
    • 렌더링: 최종적으로 시뮬레이션된 결과물에 나이(age), 밀도(density) 같은 속성을 추가하고, 만트라(Mantra) 렌더러와 파이로 셰이더(Pyro Shader)를 사용하여 렌더링하는 과정을 간략히 소개합니다.

이 글은 당시의 기술을 바탕으로 사실적인 연기 효과를 구현하기 위한 저자의 깊이 있는 고민과 문제 해결 과정을 보여줍니다.


파트 2: Alessandro Pepe 기술 인터뷰 및 튜토리얼 (GridMarkets)

이 페이지는 단순히 저자를 소개하는 것을 넘어, 그가 직접 진행하는 담배 연기 튜토리얼의 또 다른 버전과 함께 그의 작업 방식과 기술적 노하우를 상세히 설명하는 내용을 담고 있습니다.

  • 저자 소개:
    • 드림웍스 애니메이션, 프레임스토어 등 세계적인 스튜디오에서 경력을 쌓은 로스앤젤레스 기반의 리드 FX-TD(Technical Director)입니다.
  • 기술적 팁 및 워크플로:
    • 캐싱(Caching)의 중요성: 작업 속도를 높이고 가볍게 유지하기 위해 시뮬레이션 결과를 캐시 파일로 저장하는 것을 강조합니다. 특히 클라우드 렌더링 시 경로 문제를 피하기 위해 $HIP 변수를 사용한 상대 경로 설정을 권장합니다.
    • VDB SDF 활용: VDB의 SDF(Signed Distance Fields)를 사용하여 충돌 오브젝트 내부에 시뮬레이션을 가두거나, 시뮬레이션 후 밖으로 튀어나간 포인트를 다시 안으로 밀어 넣는 후처리 작업의 유용성을 설명합니다.
    • 볼륨으로의 변환: 라인을 볼륨(연기)으로 변환할 때 'Volume Rasterize' SOP을 사용하는 것이 효율적이라고 말합니다. 이 과정에서 포인트에 pscale(두께)과 density(밀도) 속성을 미리 설정하여 볼륨의 형태를 제어하는 방법을 안내합니다.
    • 밀도 제어 최적화: 뷰포트에서는 Point Wrangle로 밀도를 높게 설정해 빠르게 피드백을 확인하고, 최종 렌더링 시에는 셰이더에서 밀도를 미세 조정하여 매번 볼륨을 다시 생성하는 비효율을 피하는 팁을 공유합니다.
    • 나이(Age) 속성 활용: 포인트에 age 속성을 생성하여 연기가 생성되고 성장하는 방향과 진행 상태를 파악하는 것이 좋은 습관이라고 조언합니다. 이 age 속성을 램프(Ramp) 파라미터와 연결하여 연기가 서서히 나타났다가 사라지는 효과를 제어하는 구체적인 방법을 설명합니다.
    • 실제 배경에서의 확인: 최종 결과물을 검은 배경이 아닌 실제 촬영 영상이나 유사한 배경 이미지 위에 올려놓고 확인하는 습관의 중요성을 강조합니다. 이는 최종 샷에서의 느낌을 더 정확하게 파악하고, 검은 배경에서는 보이지 않던 문제를 발견하게 해줍니다.

파트 3: Cigarette Smoke Part 3 (2022년 1월)

이 글은 파트 1이 게시된 지 약 6년 만에 작성된 업데이트 버전으로, Houdini 19의 최신 기술과 워크플로를 반영하여 기존의 담배 연기 설정을 현대화한 내용입니다.

  • 핵심 변화:
    1. 최신 파이로 워크플로 적용: 시뮬레이션 부분에서 더 현대적이고 효율적인 파이로(Pyro) 워크플로를 도입했습니다.
    2. 로직 단순화 및 속도 개선: 기존 솔버 내부에서 사용되던 느린 스무스 SOP(Smooth SOP)를 훨씬 빠른 포인트 랭글(Point Wrangle) 코드로 대체하여 로직을 간소화하고 성능을 크게 향상시켰습니다.
    3. 렌더러 교체: 렌더링 방식이 기존의 만트라(Mantra)에서 훨씬 빠른 **카르마 XPU(Karma XPU)**로 변경되었습니다. 저자는 특히 볼륨 렌더링에서 카르마 XPU가 만트라보다 월등히 빠르다고 강조합니다.
  • 추가 실험: 본 튜토리얼 내용 외에도, 그리드(Grid)를 애드벡션하여 UV에 어떤 영향을 미치는지 관찰하는 등 몇 가지 추가적인 실험 내용을 "잡담(trivia)" 형식으로 공유합니다.

이 글은 동일한 주제에 대해 6년이라는 시간 동안 기술이 어떻게 발전했으며, 그에 따라 아티스트의 접근 방식과 워크플로가 어떻게 더 효율적으로 진화했는지를 명확하게 보여주는 사례입니다.

 

 

파트 1

https://pepefx.blogspot.com/2016/04/cigarette-smoke.html

 

Cigarette Smoke - Part 1

Houdini tutorial - how to create cigarette smoke with Houdini

pepefx.blogspot.com

 

파트 2

https://www.gridmarkets.com/alessandro-pepe

 

GridMarkets cloud rendering | featured artist: Alessandro Pepe

featured artist: Alessandro Pepe, FX Developer & 3D Artis

www.gridmarkets.com

 

파트 3

https://pepefx.blogspot.com/2022/01/cigarette-smoke-part-3.html

 

Cigarette Smoke - Part 3 - Houdini 19

Cigarette Smoke Houdini

pepefx.blogspot.com

 

첨부파일

저자분이 무료로 공개한 자료다.

위 글에 올라와있는 hip 파일들을 다운받은 것

 

파트1

cigaretteSmoke.hipnc
0.80MB

 

파트2

Alessandro Pepe - cigarettesmoke_p2.hip
2.26MB

 

파트3

cigaretteSmoke_p3.hipnc
1.77MB

 

 

댓글