총격전 중에 물속으로 뛰어들면 총알이 안 닿는 게임이 많습니다. 2023년 12월 한 배틀로얄 게임에서 스트리머가 물속 상대에게 총알을 퍼부어도 안 죽는다고 항의하자, 그 게임의 빌드 엔지니어는 의도한 동작이라고 답했습니다. 반대로 물속에서 총이 아예 안 나가게 잘라 둔 게임도 있습니다.
이건 게임이 지어낸 규칙이 아닙니다. 현실에서도 물속에선 총알이 금방 힘을 잃습니다.
영상판 — 영상의 수조와 총알은 언리얼 엔진에 직접 짠 촬영 리그이고, 총알은 엔진 물리 없이 이 글의 식으로 프레임마다 적분했습니다. 그래프와 수치는 전부 우리 랩의 값입니다
왜 이런 게 생겼나
총알을 밀어내는 힘은 공기 저항과 같은 이차 항력입니다. 감속은 감속 계수 k 곱하기 속력 제곱이고, k 는 매질의 밀도·항력 계수·단면적에 비례하고 총알 질량에 반비례합니다. 공기의 밀도는 1.2 kg/m³, 물은 1000 kg/m³이니 물속에서는 같은 총알이 833배 큰 저항을 받습니다.
9 mm 권총탄급 총알(8 g, 지름 9 mm, 400 m/s, 코가 앞을 보는 상태의 항력 계수 0.35)이 50 m/s 로 떨어지기까지 가는 거리는 공기에서 1,245 m, 물에서 1.49 m 입니다. 물에 꽂히는 순간의 감속은 중력가속도의 22,700배 입니다.
50 m/s 는 피부를 못 뚫는 속력 근처로 우리가 정한 문턱이지, 총알이 거기서 멈춘다는 뜻은 아닙니다. 빠른 총알은 물속에서 뒤로 공기 주머니를 끌고 가는데, 우리 모형에서는 이 문턱 밑에서 주머니가 꺼지고 총알이 뒤집혀 조금 더 기어가다 가라앉습니다. 게임이 물속 총알을 다루는 방식은 이 곡선을 어떻게 흉내 내느냐, 아예 무시하느냐로 갈립니다.

물속 1 m 에서 속력의 3/4 이 사라진다
이 식을 그대로 풀어 낸 답을 닫힌 해라고 합니다. 속력은 거리에 대해 지수로, 시간에 대해서는 1/(1 + k v0 t) 꼴로 줄어듭니다(v0 는 처음 속력). 우리 총알은 물속 1 m 만에 400 m/s 에서 99 m/s 로, 속력의 3/4 을 잃습니다.
항력 계수를 얼마로 잡든 곡선 모양은 같고 눈금만 바뀝니다. 완전히 뒤집힌 총알(계수 1.0)은 50 m/s 까지 0.52 m, 소총탄급(4 g, 5.7 mm, 900 m/s, 계수 0.5)은 1.81 m 입니다. 실제 소총탄은 물속에서 뒤집히며 부서지니 이 값은 차수 확인용입니다.
한 실험 방송이 2005년에 잰 바로는 초음속 소총탄은 물 0.9 m 안에서 부서지고, 권총탄은 비살상 속력까지 최대 2.4 m 가 들었습니다(위키피디아 시즌 요약으로만 확인한 2차 자료). 우리 권총탄은 뒤집힌 뒤 기어가는 0.33 m 까지 더해 1.83 m 로, 실험 방송의 권총탄 최대치 2.4 m 안쪽입니다.

게임은 프레임마다 한 번 계산한다
게임은 이 식을 연속으로 풀지 않고 프레임마다 한 번, 60 fps 면 1/60 초마다 속도를 갱신합니다. 가장 단순한 갱신은 속도에서 k 곱하기 속도 제곱 곱하기 dt(프레임 시간)를 빼는 것입니다.
이 방식은 k 곱하기 속도 곱하기 dt 가 1 보다 작을 때만 안정합니다. 1 을 넘으면 한 프레임에 빼는 양이 지금 속도보다 커져 부호가 뒤집힙니다. 공기에서는 이 값이 0.011 이라 문제가 없지만, 물에서는 9.3 입니다. 첫 프레임에 속도가 400 m/s 에서 −3,311 m/s 로 뒤집혀, 총알이 물에 닿는 순간 뒤로 튀어 화면 밖으로 사라지는 버그가 됩니다.
고치는 법은 두 가지입니다. 한 프레임을 여러 토막으로 쪼개 적분하거나, 닫힌 해를 그대로 쓰는 것입니다. 닫힌 해는 속도를 1 + k v dt 로 나누는 것이라 dt 가 얼마든 부호가 안 바뀌고, 첫 프레임 끝 속력은 38.9 m/s 입니다. 토막 적분은 토막이 적으면 똑같이 터지고, 늘릴수록 이 값에 다가갑니다.

수면을 지나는 프레임은 그 점에서 쪼갠다
두 번째 문제는 매질이 바뀌는 순간입니다. 400 m/s 총알은 한 프레임(1/60 초)에 공기로 6.67 m 를 갑니다. 수면이 그 사이 어딘가에 있으면 게임은 그 프레임을 공기로 칠지 물로 칠지 정해야 합니다.
프레임 끝의 매질로 통째로 치면 둘 다 틀립니다. 물로 치면 총알은 아직 공중에 있는데 이미 38.9 m/s 로 느려져 물 밖에서 멈춥니다. 공기로 치면 6.67 m 를 물속으로 그대로 가서 수면 아래 대상을 관통합니다.
바른 방법은 수면과 만나는 점을 찾아 그 프레임을 두 토막으로 쪼개는 것입니다. 프레임 절반에서 입수한다면 앞 절반은 공기 식, 뒤 절반은 물 식으로 계산해 물속을 1.24 m 가고, 프레임 끝 속력은 70.9 m/s 가 됩니다.

게임이 고르는 세 가지 방식
이 계산을 게임이 다 하는 건 아닙니다. 총알을 여러 프레임에 걸쳐 실제로 날리는 투사체와, 쏘는 프레임에 선을 한 번 그어 맞았는지 정하는 히트스캔에 따라 세 갈래로 나눌 수 있습니다.
- 투사체를 적분한다. 위의 식을 프레임마다 돌리는 방식입니다. 우리 리그가 이렇게 하며, 특정 게임의 코드를 보고 적은 것은 아닙니다.
- 히트스캔을 수면에서 끊는다. 판정 선을 수면에서 잘라 물속 대상은 맞지 않게 하는 방식입니다. 아래 셋째 항목의 SDK 에도 물속 대상을 빼는 플래그가 있지만 기본은 꺼져 있고, 특정 게임이 이 방식을 쓴다고 확인한 것은 아닙니다. 물을 아예 예외로 둔 게임은 있습니다. 한 밀리터리 게임의 야전 교범은 보통 총은 물속에서 쏠 수 없고, 전용 탄을 넣은 수중 소총만 40 m 까지 쓸 수 있다고 적어 두었습니다. 물속 대상을 못 맞히게 한 게 아니라 물속에서 쏘는 것 자체를 막은 경우입니다.
- 판정은 그대로 두고 그림만 느리게 보인다. 코드가 공개된 한 엔진 SDK 의 총알 코드는 히트스캔 선을 수면에서 끊지 않습니다. 물속 대상도 기본으로 피해를 받고, 안 맞게 하려면 플래그를 따로 켜야 합니다. 플레이어가 잠수 중이면 장식용 물속 총알을 초속 1500 유닛(약 38.1 m/s)으로 띄울 뿐이라, 판정과 그림이 서로 다른 말을 합니다.

우리 수조는 이렇게 계산한다
영상의 촬영 리그는 엔진 물리 없이 위의 닫힌 해를 한 프레임에 토막 16개로 적분하고, 수면을 지나는 프레임은 교점에서 쪼갭니다. 공기 주머니가 꺼진 뒤에는 뒤집힌 총알이 옆면으로 물을 받는 항력(원래의 11배)으로 계속 적분해, 0.33 m 를 더 기어가다 0.75 m/s 로 가라앉게 했습니다. 영상의 총알은 보이게 4배로 키웠고, 수면의 파도와 파문은 보기 위해 넣은 그림이라 계산에는 들어가지 않습니다.

정리
물속에서 총알이 힘을 잃는 건 게임의 규칙이 아니라 밀도 833배가 만드는 이차 항력입니다. 게임이 이걸 프레임마다 계산한다면 저항을 그냥 곱하지 말고 닫힌 해나 토막 적분을 써야 하고, 수면을 지나는 프레임은 교점에서 쪼개야 합니다. 서두의 배틀로얄 게임은 물이 총알을 막는 쪽이고, 반대로 물속에서도 판정이 그대로인 게임에서는 물속이 안전하지 않습니다.
참고 자료
- Valve, Source SDK 2013 —
src/game/shared/baseentity_shared.cpp의FireBullets(히트스캔 트레이스는 물을 끊지 않고 물속 대상도 기본 피해,FIRE_BULLETS_DONT_HIT_UNDERWATER플래그) ·HandleShotImpactingWater(물튀김 + 잠수 중 장식 waterbullet) ·src/game/server/waterbullet.cpp(WATERBULLET_INITIAL_SPEED,WATERBULLET_STOP_TIME 0.5) https://github.com/ValveSoftware/source-sdk-2013 - Bohemia Interactive Community Wiki, "Arma 3: Field Manual - Weapons Advanced" — Underwater Weapons 절: 보통 총은 물속에서 쏠 수 없고 SDAR 5.56 mm 에 dual purpose 탄을 넣으면 40 m 까지 https://community.bistudio.com/wiki/Arma_3:_Field_Manual_-_Weapons_Advanced
- GamesRadar+, 2023년 12월 — Call of Duty: Warzone 에서 물속 상대가 안 죽는다는 스트리머(@TheBoiSantana)의 항의에 빌드·자동화 엔지니어(@KasikaQC)가 "working as intended" 라고 답한 기사 https://www.gamesradar.com/warzone-streamer-complains-that-they-cant-kill-someone-in-the-water-devs-tell-them-thats-how-physics-works-actually/
- Wikipedia, "MythBusters (2005 season)" — Episode 34 "Bulletproof Water"(2005년 7월 13일 방송): 초음속 소총탄은 물 0.9 m 안에서 부서지고 권총탄은 비살상 속력까지 최대 2.4 m. 2차 자료 https://en.wikipedia.org/wiki/MythBusters_(2005_season)
- Gaylord, Blair, Courtney, Courtney, "Bullet Retarding Forces in Ballistic Gelatin by Analysis of High Speed Video" (2013) — 빽빽한 매질에서 총알의 감속력을 고속 영상으로 재는 방법(9 mm, 20,000 fps) https://arxiv.org/abs/1305.5215
이 글의 항력 계산, 프레임 적분 비교, 수면 쪼개기, 촬영 리그와 모든 도판은 직접 짠 것이고(파이썬 랩과 언리얼 C++ 리그), 영상의 수조도 같은 식입니다. 세 가지 방식은 위 원문 코드와 문서에서 확인한 범위만 적었고, 특정 게임의 내부 코드를 본 것이 아닙니다.
'게임개발뜯어보기' 카테고리의 다른 글
| 물보라만 튀는 게임 물, 제대로 하면 이렇게 됩니다 - 높이장과 파동 방정식 (1) | 2026.09.19 |
|---|---|
| 캐릭터 발이 계단에 딱 붙는 이유 - 발 IK(Foot IK) (0) | 2026.09.18 |
| 공중에 뜬 모래는 왜 건드려야 떨어질까 - 바뀐 곳만 다시 보는 더티 렉트 (0) | 2026.09.16 |
| 풀 수백만 가닥이 한 물결로 넘어가는 이유 - GPU 인스턴싱과 버텍스 셰이더 (0) | 2026.09.15 |
| 끝없이 가도 땅이 나오는 게임, 그 땅은 어디에 저장돼 있을까 - 펄린 노이즈와 침식 (0) | 2026.09.15 |