이번 Blender 4.5의 Fluid 시뮬레이터를 이용한 Fire와 Smoke 시리즈의 세 번째 튜토리얼에서는, Blender가 Bake를 실행하고 저장하는 방식, 즉 Fire와 Smoke의 물리 시뮬레이션에 대해 이야기하겠습니다.


이 튜토리얼은 Blender 4.5의 불과 연기 기초에 관한 10편짜리 미니 시리즈의 일부입니다. 전체 에피소드 목록을 보려면 여기를 클릭하세요.


영상 자막 텍스트

안녕하세요!이번 Blender 4.5의 Fluid 시뮬레이터를 이용한 Fire와 Smoke 시리즈의 세 번째 튜토리얼에서는, Blender가 Bake를 실행하고 저장하는 방식, 즉 Fire와 Smoke의 물리 시뮬레이션에 대해 이야기하겠습니다.

특히 하나의 Domain에서 시뮬레이션을 한 번만 계산한 후, 그 복사본들을 씬의 다른 위치에 배치해도 모든 복사본에 대해 다시 계산할 필요가 없는 방법을 살펴보겠습니다.

마지막으로 시뮬레이션 재생에 Offset을 설정해, 애니메이션이 불꽃이 처음 점화되는 장면이 아니라 이미 타고 있는 상태에서 시작하도록 만드는 방법을 보겠습니다.

이번 튜토리얼의 시작 씬은 장작이 들어 있는 화로(brazier)로 구성되어 있습니다. 이들은 두 개의 분리된 메쉬이며, 장작은 하나의 메쉬로 이루어져 있습니다. 화로는 직사각형 Plane 위에 놓여 있는데, 이 Plane은 바닥 역할을 하며 나중에 다른 화로들을 여기에 배치할 예정입니다. 가상 World는 Strength 값이 0이고 광원이 없기 때문에 Rendered 모드에서는 씬이 완전히 검게 보입니다.

이전 에피소드에서 배운 것처럼, 오브젝트가 불꽃을 내도록 만들기 위해서는 Fire And Smoke Flow 타입의 Fluid 컴포넌트를 할당해야 합니다. 그래서 장작에 Physics Fluid 컴포넌트를 추가하고, Behavior를 Inflow로 설정해 매 프레임마다 불꽃을 생성하도록 합니다.

그런 다음 Cube를 생성해 Flow 컴포넌트를 Domain 타입으로 할당하고, 씬 전체를 감싸도록 배치합니다. 곧바로 문제를 발견할 수 있는데, 기본 Resolution 값이 너무 낮아 Voxel이 지나치게 커지고, 불꽃이 방출체 오브젝트에 비해 지나치게 크게 보입니다.

Resolution을 64로 높여도 크게 개선되지 않고, 시뮬레이션 계산 시간만 길어집니다. Resolution을 더 올리는 것은 이 접근법이 잘못된 것임이 분명하므로 시도조차 하지 않겠습니다.

가장 명확한 해결책은 Domain을 화로와 불꽃 및 Smoke가 위로 퍼질 수 있는 약간의 공간만 포함하도록 크기를 조정하는 것입니다. 이제 Resolution이 조금 과할 정도로 잘 작동합니다. 사실 너무 과해서 다시 32로 낮춰도 잘 정의된 불꽃을 얻을 수 있습니다. 오히려 문제는 장작이 불꽃을 지나치게 많이 생성한다는 점입니다.

생성되는 불꽃의 양을 줄이기 위해 Inflow 오브젝트의 Fuel 파라미터를 조정할 수 있습니다. 직관적으로 Fuel 값이 클수록 매 프레임마다 더 많은 연료가 소모됩니다. 따라서 불꽃이 적절한 크기에 도달할 때까지 이 값을 낮추는 것이 해결책입니다.

앞서 언급했듯이, Baking 즉 물리 시뮬레이션 계산에 관련된 데이터는 Domain 오브젝트의 Cache 섹션에 지정된 경로에 있는 전용 폴더에 저장됩니다. Domain을 생성하기 전에 파일을 디스크에 저장했기 때문에, Cache 폴더는 Blender 프로젝트 파일과 동일한 디렉토리에 생성됩니다.

Domain의 Cache 섹션에서는 Domain 시뮬레이션을 계산할 프레임 범위를 설정할 수 있습니다. 이는 씬의 애니메이션 프레임 범위와 일치할 필요는 없습니다. 이 기능은 전체 Bake를 실행하기 전에 불꽃의 모양을 대략 확인하기 위해 제한된 프레임만 Baking하는 데 유용합니다. 또 다른 활용 예는 Fluid 오브젝트가 카메라 뷰에 없는 구간으로, 이 경우 해당 프레임에 대해 물리 시뮬레이션을 계산할 필요가 없습니다.

Cache 섹션의 다른 파라미터를 살펴보기 전에, Domain과 화로, Inflow 역할의 장작으로 구성된 세트를 복사해 씬에 여러 개 배치하면 어떻게 되는지 보겠습니다. 앞서 본 것처럼 씬 전체를 덮는 단일 Domain을 사용하려면 매우 높은 Resolution이 필요하고, 많은 공간이 낭비됩니다. 따라서 여러 화로를 추가하려면 전체 세트를 복제하는 수밖에 없습니다.

문제는 Timeline에서 Play를 누르면 Blender가 모든 Domain에 대해 동일한 Cache 폴더를 사용한다는 점입니다. 즉, 모든 Domain이 동일한 시뮬레이션 데이터를 공유하게 됩니다. 모든 시뮬레이션에 동일한 파라미터를 유지하려는 경우라면, Domain을 약간 회전시키거나 각각 다른 Material을 부여하여 렌더링 시 불꽃의 외형을 다양하게 만드는 식으로 관찰자를 속이는 방법을 쓸 수도 있습니다.

진짜 문제는 Domain의 Resolution이나 다른 파라미터를 변경한 뒤 다시 Bake를 실행할 때 발생합니다. 예를 들어, 배경 오브젝트에는 높은 Resolution이 필요하지 않으므로 더 멀리 있는 Domain들의 Resolution을 낮췄다고 합시다. 이제 Blender는 데이터가 완전히 뒤섞이게 되는데, 이는 서로 다른 특성을 가진 오브젝트들이 동일한 볼륨 데이터 세트를 공유하고 있기 때문입니다.

각 Domain이 다른 Domain과 명확히 분리된 데이터를 가지도록 하려면, 시뮬레이션을 실행하기 전에 각 Domain마다 별도의 Cache 폴더를 지정해야 합니다. 물론 이렇게 하면 다양한 Domain 데이터 때문에 디스크 사용량이 크게 늘어납니다. 따라서 필요에 따라 전략을 선택해야 합니다. 하나 또는 몇 개의 아주 큰 Domain을 사용해 같은 시뮬레이션을 복제할지, 아니면 Domain마다 별도의 Cache를 생성할지를 결정하는 것은 여러분에게 달려 있습니다.

지금까지 Blender는 우리가 Timeline에서 Play를 누를 때마다 시뮬레이션을 Bake해 왔습니다. 하지만 이것만이 가능한 모드는 아닙니다.

사실, 또 다른 모드가 있으며, 이를 통해 매우 유용한 도구를 사용할 수 있습니다. 간단히 하기 위해, 씬에는 화로와 그 Domain만 남기고 다른 것들은 삭제하겠습니다. 주의할 점은, Domain을 삭제해도 디스크의 데이터는 삭제되지 않는다는 것입니다. 사실 이것은 좋은 점이기도 한데, 나중에 시뮬레이션 데이터를 저장하고 재사용할 수 있기 때문입니다. 하지만 이번 경우에는 그 데이터가 필요 없으므로 직접 수동으로 삭제하겠습니다.

Domain의 Cache 섹션에는 Type 메뉴가 있으며, 기본값은 Replay입니다. 지금까지 사용해 온 모드로, Blender는 프레임 1로 돌아가 Play를 누를 때마다 새로운 Bake를 다시 계산하고 이전 데이터를 덮어씁니다.

Modular 모드에서는 시뮬레이션의 다양한 측면을 분리하여 개별적으로 Bake할 수 있습니다. 이 방식은 전체 시뮬레이션을 다시 하지 않고 특정 부분만 따로 확인하거나 교체할 수 있어서 유용한 경우가 있습니다.

마지막으로 All 모드는 전체 시뮬레이션을 Bake하지만 Timeline이 아니라 백그라운드에서 계산합니다.

Bake를 시작하려면 패널에서 Bake All 버튼을 클릭해야 합니다. Blender는 진행 상태를 보여주는 진행 바를 표시합니다. 계산이 완료되면, Timeline에서 Play를 눌러 훨씬 부드럽게 결과를 확인할 수 있습니다.

Blender가 이미 시뮬레이션을 미리 계산했기 때문입니다. 시뮬레이션 설정을 변경하려면 먼저 Free All 버튼을 클릭해 기존 데이터를 지워야 합니다. 그러면 파라미터를 다시 수정할 수 있고, 변경 후에는 다시 Bake All을 클릭해 Blender가 시뮬레이션을 새로 계산하도록 해야 합니다. 사용 중인 폴더를 살펴보면 Modular와 All 모드에서 계산되고 따로 저장되는 다양한 모듈 또는 Bake 단계가 있다는 것을 확인할 수 있습니다.

All 모드에서는 Offset 파라미터가 활성화되는데, 이것은 이미 눈치챘을지도 모를 문제를 해결하는 데 도움이 됩니다. 지금까지 모든 Fire 시뮬레이션은 애니메이션 첫 프레임에서 불꽃이 점화되는 장면으로 시작했습니다. 하지만 때로는 불이 이미 타고 있는 상태에서 애니메이션을 시작하고 싶을 때가 있습니다.

이 문제를 해결하려면 Offset 필드에 음수를 입력하면 됩니다. Tooltip의 설명에 따르면, 이것은 Baking이 더 일찍 시작된다는 뜻이 아니라, 애니메이션 첫 프레임에서 시뮬레이션이 이미 지정된 프레임 수만큼 진행된 것처럼 재생된다는 의미입니다. 애니메이션 프레임 길이는 여전히 Frame Start와 Frame End 사이에 지정된 값으로 유지됩니다. 이 경우 Timeline의 마지막 25프레임에는 시뮬레이션이 없는데, Offset을 통해 Timeline의 첫 프레임에서 시뮬레이션의 25번째 프레임을 재생하도록 Blender에 지시했기 때문입니다.

이를 해결하려면 Bake에서 더 많은 프레임을 계산해 시뮬레이션이 Timeline 전체를 덮도록 하면 됩니다. 따라서 Domain의 Cache 섹션에서 Frame End를 275로 설정하고, Free All을 클릭한 다음 Bake All을 실행해 다시 Bake를 진행합니다.

이 사이트는 제 작업 일부를 소개하기 위한 목적만을 가지고 있으며, 어떠한 홍보 목적도 포함하지 않습니다. 현재 맞춤 작업, 컨설팅 또는 기타 어떤 형태의 업무 협업에 대한 요청도 받고 있지 않으며, 이에 대해 응답하지 않으니 양해 부탁드립니다.


확장된 개인정보 및 쿠키 사용 정책