Blender

[Blender] 물리 시뮬레이션 기초 - Fluid Liquid 개념

귤까망 2025. 10. 20. 23:14

물, 연기, 기체 등 자연스러운 유체의 움직임을 3D로 구현
- Domain: 유체가 움직일 수 있는 공간 (보통 큐브모양으로 지정)
- Flow: 유체가 나오는 공간/발생지
- Effector: 유체를 방해하거나 영향을 주는 오브젝트 (Collision 역할)
- Voxel: 도메인을 구성하는 보이지 않는 3D 격자 조각 (사이즈가 너무 크면 작은 움직임 표현 안됨)
* Domain과 Flow 타입 맞춰주기

 

Flow
- Flow Behavior: Geometry(오브젝트 모양만큼 한번 떨어짐), Inflow(물이 계속 흐름), Outflow(Inflow의 배수구 역할)
- Use Flow: 물을 흐르게 할지말지
- Sampling Substeps: 움직임을 좀 더 부드럽게 연결
- Is Planar: 오브젝트를 두께감 있게 인식 (Plane인 경우 사용)
- Initial Velocity: 시뮬레이션 시작할 때의 발사 속력
=> Source: 움직일 때 유체가 튀기는 힘과 source 값 곱셈 (역동적인 표현 가능)

Effector
: collision 역할
- Sampling Substeps: 움직임이 있을 때 부드럽게 연결
- Surface Thickness: 높을수록 충돌 거리가 멀어짐
- use Effector: 충돌할지말지
- Is Planar: Plane 사용할 경우 체크해서 두께감 적용

Domain
- Resolution Divisions: 플루이드 시뮬레이션의 전체적인 해상도와 퀄리티 결정. Voxel 사이즈 조절 (64정도)
- Liquid > Mesh: 끄면 파티클만 보임
- Time Scale: 시뮬레이션 속도 (속도를 느리게 해서 점성이 있어보이게 표현 가능)
- CFL Number: 시간에 대한 계산을 안정적이게 해줌, 얼마나 잘게 쪼개서 계산하냐 (값이 작을수록 디테일 정밀)
- Timesteps: CFL Number가 잘게 쪼갠 계산을 몇 번 반복할지 (미니멈은 1로 두고, 맥시멈으로 조절)
* CFL=2, Timesteps=1 => 블렌더가 6번 계산하고 싶어도 한 번만 계산 => 불안정한 결과
* CFL=2, Timesteps=10 => 블렌더가 원하는 만큼 계산 => 세세한 움직임까지 표현
- Liquid > Particle Radius: 안에 있는 파티클을 감싸고있는 메쉬의 크기 (물의 힘 표현)
- Diffusion: 액체의 점성 표현, Base * 10^-Exponent (Fluid Presets으로 간단하게 설정 가능)
   => Base: 값이 클수록 끈적거리고 좀 느리게 퍼짐
   => Exponent: 값이 작을수록 점성이 높아짐
   => High Viscosity Solver: 시럽이나 꿀처럼 점성이 높은 물체를 만들 때 사용
- Cache: 다른 시뮬레이션보다 무거워서 외부에 파일을 하나 만들어 Bake 값들을 저장 (안전)
   => Type > Replay는 간단한 작업을 실시간으로 계산. Bake를 할 순 없음
   => Type > Modular는 Liquid값, 세팅값 등등 여러 군데에 Bake가 숨어있음
   (플루이드 시뮬은 항목이 많아서 단계별로 Bake할 수 있게끔)
   * Is Resumable은 Bake 중 튕겼을 때 체크되어있는 경우, 그 다음 프레임부터 이어서 베이크 가능
   => Type > All은 한번에 Bake 가능하지만, 단계별 수정 불가!

 

 

꿀 흐르는 모션 만들기
큐브 추가한 후 카메라에 꽉 차게 사이즈 조절
> Domain으로 이름 변경하고 Fluid 시뮬레이션 선택하고 Type을 Liquid로 변경
> UV스피어 꺼내고 카메라에 안보이게 위로 이동시킨 후 사이즈 조절
> 도메인은 해상도 계산이 용이하게 최대한 효율적인 사이즈로 줄이기
> UV스피어 Flow로 이름 변경하고, Fluid 시뮬레이션에서 Flow 선택 후 Type은 Liquid, Behavior은 Inflow로 선택
> 허니스틱에는 Fluid 시뮬레이션에서 Effector로 설정
* 가끔 오브젝트 위치를 이동하면 재생 안되는 오류가 생김 => Domain의 Resolution Division값을 약간 수정하면 오류 해결
> Diffusion 체크하고 값 조절해서 점성 높이기
> 바닥에 쌓이지 않도록 Domain을 Border Collisions에서 Bottom 체크 해제하여 바닥과 충돌 없애기
> Flow 선택하고 Shader Editor에서 new 눌러서 색 설정
> Transmission weight 값 1로 올리고, Roughness 많이 줄이고, Metallic 값 살짝 주기
> 단계별 Bake

 

 

Fluid Liquid 개념

 

꿀이 조금 딱딱해보인다 😭