유체(Fluid)는 고체처럼 일정한 형태를 유지하지 않고 흐를 수 있는 물질이다.
대표적으로 액체와 기체가 있다.
유체 역학에서 중요한 것은
밀도 -> 압력 -> 부력
유체 + 물체의 상대 운동 -> 저항 -> 항력
유체의 속도/점성 -> 흐름의 특성
이다.
게임 물리에서는 실제 유체를 정확하게 시뮬레이션하지 않더라도 부력, 공기 저항, 물 저항, 항력 등을 근사하는 데 이 개념들이 사용된다.
밀도
밀도(Density)는 단위 부피당 질량이다.
ρ = m/V
ρ -> 밀도
m -> 질량
V -> 부피
이다.
단위는
kg/m³
를 사용한다.
밀도가 높다는 것은 같은 부피 안에 더 많은 질량이 들어 있다는 의미다.
밀도는 부력과 유체 저항을 이해하는 데 중요한 변수다.
예를 들어
물의 밀도 ≈ 1000 kg/m³
정도로 생각할 수 있다.
공기의 밀도는 물보다 훨씬 작다.
따라서 같은 부피의 물과 공기는 질량 차이가 매우 크다.
압력
압력(Pressure)은 단위 면적당 작용하는 힘이다.
P = F/A
P -> 압력
F -> 힘
A -> 면적
이다.
단위는 파스칼(Pa)이다.
1 Pa = 1 N/m²
같은 힘이라도 작용 면적이 작으면 압력이 커진다.
면적 감소 -> 압력 증가
유체에서는 압력이 모든 방향으로 전달된다.
정지한 유체에서 깊이에 따른 압력은
P = P_0 + ρgh
로 표현할 수 있다.
P_0 -> 표면 압력
ρ -> 유체 밀도
g -> 중력 가속도
h -> 깊이
이다.
따라서
깊이 증가 -> 압력 증가
한다.
부력
부력(Buoyant Force)은 유체 속에 들어간 물체가 유체로부터 받는 위쪽 방향의 힘이다.
아르키메데스 원리에 따르면 부력은 물체가 밀어낸 유체의 무게와 같다.
F_b = ρ_fluid g V_displaced
이다.
ρ_fluid -> 유체 밀도
V_displaced -> 물체가 밀어낸 유체의 부피
이다.
물체의 평균 밀도와 유체의 밀도를 비교하면 대략적인 상태를 판단할 수 있다.
ρ_object > ρ_fluid -> 가라앉음
ρ_object < ρ_fluid -> 뜸
ρ_object = ρ_fluid -> 중성 부력
단, 떠 있는 물체는 물체 전체가 유체에 잠기는 것이 아니라 일부만 잠겨 부력과 중력이 평형을 이룬다.
부력 = 중력 -> 평형
점성
점성(Viscosity)은 유체가 흐름에 저항하는 성질이다.
쉽게 말하면 유체 내부의 층과 층 사이에서 발생하는 마찰과 비슷한 성질이다.
점성이 낮으면 쉽게 흐르고,
점성이 높으면 흐르기 어렵다.
예를 들어
물 -> 낮은 점성
꿀 -> 높은 점성
으로 볼 수 있다.
점성이 높을수록 유체 내부의 속도 차이를 줄이려는 효과가 강해진다.
게임에서는 점성을 직접 계산하기보다
점성 증가 -> 움직임 저항 증가
형태로 단순화하는 경우가 많다.
유체 흐름
유체 흐름은 유체 입자들이 공간을 통해 이동하는 현상이다.
흐름을 분석할 때 유체의
속도
압력
밀도
점성
등을 고려한다.
대표적인 흐름 형태는 층류와 난류다.
층류
유체가 비교적 규칙적인 층을 이루며 흐른다.
규칙적인 흐름 -> 층류
점성이 높거나 흐름 속도가 낮을 때 나타나기 쉽다.
난류
유체가 불규칙하게 섞이며 복잡하게 흐른다.
불규칙한 흐름 -> 난류
속도가 높거나 물체의 형상과 유체 조건에 따라 난류가 발생하기 쉽다.
레이놀즈 수
층류와 난류를 판단할 때 대표적으로 레이놀즈 수(Reynolds Number)를 사용한다.
Re = ρvL/μ
또는 동점성계수 ν를 사용하면
Re = vL/ν
이다.
ρ -> 밀도
v -> 유체 속도
L -> 대표 길이
μ -> 동점성계수
이다.
레이놀즈 수가 낮으면 점성 효과가 상대적으로 크고, 높으면 관성 효과가 상대적으로 크다.
일반적인 흐름에서는
낮은 Re -> 층류 경향
높은 Re -> 난류 경향
으로 이해할 수 있다.
다만 실제 전이 기준은 유동 조건과 형상에 따라 달라진다.
유체 저항
물체가 유체 속을 움직이면 유체는 물체의 운동을 방해한다.
이를 일반적으로 유체 저항(Fluid Resistance)이라고 한다.
구조는
물체 운동 -> 유체와 상대 운동 -> 저항력
이다.
저항력의 방향은 일반적으로 상대 운동 방향의 반대다.
v > 0 -> F_drag < 0
v < 0 -> F_drag > 0
따라서
저항력 -> 운동 방향 반대
라고 볼 수 있다.
공기 저항
공기 저항은 공기 중에서 움직이는 물체가 받는 저항력이다.
저속에서는 단순화해서 속도에 비례하는 모델을 사용할 수도 있다.
F_drag = -cv
하지만 일반적인 고속 운동에서는 항력을 속도의 제곱에 비례하는 형태로 근사하는 경우가 많다.
F_drag = 1/2 ρ C_d A v²
이다.
ρ -> 공기 밀도
C_d -> 항력 계수
A -> 기준 면적
v -> 물체와 공기의 상대 속도
이다.
방향까지 포함하면 저항력은 속도와 반대 방향으로 적용한다.
F_drag = -1/2 ρ C_d A |v|v
형태로 표현할 수 있다.
항력
항력(Drag Force)은 유체 속에서 움직이는 물체가 유체로부터 받는 운동 저항력이다.
핵심 요소는
유체 밀도
상대 속도
물체의 기준 면적
물체 형상
이다.
대표적인 항력 공식은
F_d = 1/2ρC_dAv²
이다.
여기서 중요한 것은 속도가 제곱으로 들어간다는 것이다.
속도 2배 -> 항력 4배
속도 3배 -> 항력 9배
가 된다.
따라서 빠르게 움직일수록 공기 저항의 영향이 급격하게 커진다.
Drag Coefficient
Drag Coefficient(항력 계수) C_d는 물체의 형상과 유동 조건에 따른 항력 특성을 나타내는 무차원 계수다.
항력은
F_d = 1/2ρC_dAv²
이므로
C_d 증가 -> 항력 증가
한다.
같은 면적, 같은 속도, 같은 공기 밀도라도 물체의 형상에 따라 항력이 달라질 수 있다.
예를 들어
유선형 물체 -> 상대적으로 낮은 C_d
둔한 형상의 물체 -> 상대적으로 높은 C_d
로 생각할 수 있다.
실제 C_d는 고정된 물체 고유 상수가 아니라 레이놀즈 수, 마하 수, 자세, 표면 특성 등의 영향을 받을 수 있다.
게임에서는 물체의 형태를 직접 유체역학적으로 계산하는 대신
C_d -> 물체별 저항 특성을 조절하는 파라미터
로 사용하는 경우가 많다.
종단 속도
물체가 공기 중에서 낙하하면 처음에는 중력이 물체를 가속한다.
하지만 속도가 증가하면 공기 저항도 증가한다.
속도 증가 -> 항력 증가
결국 어느 순간
중력 = 항력
이 되는 상태에 접근한다.
그러면 알짜힘이 0이 되어 가속도가 0이 된다.
F_net = mg - F_d = 0
따라서
a = 0
이고 속도는 더 이상 증가하지 않는다.
이때의 속도를 종단 속도(Terminal Velocity)라고 한다.
종단 속도와 항력
제곱 항력 모델을 사용하면 종단 속도에서는
mg = 1/2ρC_dAv_t²
이다.
이를 정리하면
v_t = sqrt(2mg / ρC_dA)
이다.
따라서
질량 증가 -> 종단 속도 증가
공기 밀도 증가 -> 종단 속도 감소
항력 계수 증가 -> 종단 속도 감소
단면적 증가 -> 종단 속도 감소
한다.
유체 저항의 모델
게임에서는 상황에 따라 저항 모델을 단순화할 수 있다.
선형 저항
F_drag = -cv
속도에 비례한다.
계산이 간단하고 작은 속도 영역의 근사나 게임플레이용 물리에 적합하다.
제곱 저항
F_drag = -kv|v|
또는
F_drag = -1/2ρC_dA|v|v
속도의 제곱에 비례한다.
실제 공기 저항을 근사할 때 일반적으로 더 적합하다.
두 모델의 차이는
선형 저항 -> 속도 증가에 비례하여 저항 증가
제곱 저항 -> 속도 증가에 따라 저항이 훨씬 빠르게 증가
이다.
물속에서의 저항
물은 공기보다 밀도가 훨씬 높기 때문에 같은 조건이라면 물속에서 항력이 훨씬 크게 발생한다.
F_d = 1/2ρC_dAv²
에서
ρ_water >> ρ_air
이기 때문이다.
따라서 게임에서는
공기 -> 낮은 저항
물 -> 높은 저항
으로 설정하여 물속 움직임을 표현할 수 있다.
물속에서는 항력뿐만 아니라 부력도 함께 고려해야 한다.
물속 운동 -> 중력 + 부력 + 항력
게임 물리에서의 적용
게임에서 실제 유체역학을 그대로 구현하는 경우는 드물다.
대부분 목적에 맞게 단순화한다.
예를 들어 물속 캐릭터라면
중력 -> 아래 방향 힘
부력 -> 위 방향 힘
항력 -> 이동 반대 방향 힘
을 적용할 수 있다.
이를 합치면
F_net = F_gravity + F_buoyancy + F_drag
가 된다.
그리고 뉴턴의 제2법칙으로
a = F_net/m
을 계산한다.
공기 저항을 구현한다면
상대 속도 -> 항력 계산 -> 운동 반대 방향으로 적용
하는 구조가 기본이다.
핵심 정리
밀도 -> ρ = m/V
압력 -> P = F/A
정지 유체의 압력 -> P = P_0 + ρgh
부력 -> F_b = ρ_fluid gV_displaced
점성 -> 유체의 흐름에 대한 내부 저항
층류 -> 규칙적인 유체 흐름
난류 -> 불규칙하고 복잡한 유체 흐름
레이놀즈 수 -> Re = ρvL/μ
유체 저항 -> 유체가 물체의 운동을 방해하는 효과
항력 -> 유체 속 물체의 운동을 방해하는 힘
항력 -> F_d = 1/2ρC_dAv²
Drag Coefficient -> C_d
속도 증가 -> 항력 급격히 증가
속도 2배 -> 제곱 항력 4배
종단 속도 -> 중력과 항력이 평형을 이루는 속도
종단 속도 -> v_t = sqrt(2mg/ρC_dA)
전체 구조는 다음과 같이 잡으면 된다.
유체 -> 밀도 / 압력 / 점성 / 흐름
유체 + 물체 -> 부력 / 항력
상대 속도 -> 유체 저항
상대 속도 증가 -> 항력 증가
항력 증가 -> 가속도 감소
중력 + 항력 -> 종단 속도
물속 운동 -> 중력 + 부력 + 항력
결국 유체 물리의 핵심은 유체의 밀도와 점성, 물체와 유체 사이의 상대 운동이 물체에 힘을 만들어낸다는 것이다. 게임 물리에서는 이 관계를 목적에 맞게 단순화하여 부력과 항력, 저항 계수 등을 조절하는 방식으로 구현하면 된다.