물리 재질 설정 및 최적화
표면이 모두 같은 마찰과 반발력을 가지면 게임은 단조롭고 가짜처럼 느껴집니다.
얼음 위 미끄러짐, 고무 바닥의 반동, 금속 충돌 소리처럼 표면별 차이가 있어야 플레이 감각이 살아납니다.
이번 절에서는 물리 재질(Physical Material)을 사용해 오브젝트의 물리 반응을 분리하는 방법을 다룹니다. 마찰력, 반발력, 밀도 값을 어떻게 잡아야 의도한 결과가 나오는지와 Surface Type을 사운드/이펙트에 연결하는 구조까지 함께 정리하겠습니다.
이 절을 마치면 오브젝트의 겉모습뿐 아니라 실제 반응성까지 설계할 수 있습니다.
물리 재질 (Physical Material)의 이해
물리 재질은 언리얼 엔진의 물리 엔진인 PhysX가 오브젝트 간의 상호작용을 계산할 때 참조하는 데이터 에셋입니다. 이는 시각적인 재질(Material)과는 별개로, 오직 물리적인 특성만을 정의합니다.
주요 역할
- 마찰 (Friction): 오브젝트가 다른 표면 위에서 미끄러지는 정도를 제어합니다.
- 반발력 (Restitution): 오브젝트가 충돌 시 튕겨 나가는 정도(탄성)를 제어합니다.
- 밀도 (Density): 오브젝트의 부피당 질량을 정의하여, 질량이 계산되거나 부력 등에 영향을 미칩니다. (스태틱 메시의 질량(Mass)이 0일 때, 밀도와 부피를 통해 자동으로 질량이 계산됩니다.)
- 표면 타입 (Surface Type): 충돌 시 발생하는 사운드나 파티클 효과를 결정하는 데 사용됩니다. (예: 금속에 부딪히는 소리, 나무에 부딪히는 소리)
물리 재질 생성 및 설정
- 콘텐츠 브라우저에서 마우스 오른쪽 버튼 클릭
물리(Physics) > 물리 머티리얼(Physical Material)선택PM_접두사를 붙여 이름을 지정합니다. (예:PM_Wood,PM_Metal,PM_Rubber,PM_Ice)
- 생성된 물리 재질 에셋을 더블클릭하여 에디터를 엽니다.
-
Friction (마찰)0.0: 마찰 없음 (완전히 미끄러움, 얼음처럼)1.0: 표준 마찰 (일반적인 표면)>1.0: 높은 마찰 (고무처럼 끈적임)Combine Mode: 두 오브젝트의 마찰력이 결합되는 방식 (평균, 최소, 최대, 곱셈 등)
-
Restitution (반발력)0.0: 튕기지 않음 (점토처럼 충격을 흡수)1.0: 완벽하게 튕김 (탁구공처럼)Combine Mode: 두 오브젝트의 반발력이 결합되는 방식
-
Density (밀도)- 기본값:
1.0(g/cm³). 물의 밀도와 유사합니다. - 값이 높을수록 같은 부피 대비 질량이 커집니다. (예: 납은 높게, 스티로폼은 낮게)
- 기본값:
bOverride Friction / bOverride Restitution: 이 옵션을 활성화하면Friction및Restitution값을 직접 지정할 수 있습니다. 비활성화하면Default Physical Material이나 다른 설정의 영향을 받습니다.-
Surface Type (표면 타입)Project Settings > Physics > Physics Surface Types에서 미리 정의된Surface Type을 선택할 수 있습니다.- 이
Surface Type은 블루프린트에서OnComponentHit이벤트 발생 시Hit Result의Phys Material을 통해 접근하여, 충돌한 표면의 종류에 따라 다른 사운드, 파티클, 또는 게임 플레이 로직을 구현하는 데 사용됩니다.
물리 재질 적용 방법
물리 재질은 스태틱 메시 에셋 또는 일반 재질(Material) 에셋에 할당할 수 있습니다.
스태틱 메시 에셋에 적용
- 가장 직접적인 방법: 특정 스태틱 메시 에셋의 기본 물리 특성을 정의할 때 사용합니다.
-
절차
물리 재질을 적용할
Static Mesh에셋을 더블클릭하여 스태틱 메시 에디터를 엽니다.Details패널의Physics (물리)섹션에서Simple Physical Material속성을 찾습니다.드롭다운 메뉴에서 생성된 물리 재질 (예:
PM_Rubber)을 선택하여 할당합니다. - 주의: 이 방법은 해당 스태틱 메시 에셋이 사용되는 모든 곳에 동일한 물리 재질을 적용합니다.
일반 재질 에셋에 적용
- 가장 일반적이고 유연한 방법: 시각적인 재질과 물리적 특성을 함께 관리할 수 있어 효율적입니다.
-
절차
물리 재질을 적용할 일반
Material에셋을 더블클릭하여 재질 에디터를 엽니다.Details패널의Material섹션에서Physics Material속성을 찾습니다.드롭다운 메뉴에서 생성된 물리 재질 (예:
PM_Ice)을 선택하여 할당합니다. - 주의: 스태틱 메시 액터에 할당된 시각적 재질이 이 물리 재질을 참조하게 됩니다. 만약 스태틱 메시 에셋 자체에
Simple Physical Material이 할당되어 있다면, 이 방법으로 적용된 재질의 물리 재질이 무시될 수 있습니다. 일반적으로 재질에 물리 재질을 할당하는 것이 권장됩니다.
액터별 오버라이드
- 특정 인스턴스에만 적용: 레벨에 배치된 특정 액터 인스턴스에만 물리 재질을 다르게 적용하고 싶을 때 사용합니다.
-
절차
레벨에 배치된
Static Mesh Actor를 선택합니다.Details패널의Physics (물리)섹션에서Override Physics Material을 활성화합니다.활성화된
Physics Material Override슬롯에 원하는 물리 재질을 할당합니다. - 주의: 이 방법으로 오버라이드된 물리 재질은 에셋에 할당된 모든 물리 재질 설정을 무시합니다.
물리 재질 설정 실습
다양한 물리 재질을 만들어 적용하고 그 효과를 직접 관찰해 봅시다.
새로운 레벨 생성: 파일(File) > 새 레벨(New Level) > 기본(Basic)을 선택합니다.
- 콘텐츠 브라우저에
PM_Rubber(Restitution: 0.9, Friction: 0.5)를 만듭니다. - 콘텐츠 브라우저에
PM_Ice(Restitution: 0.1, Friction: 0.05)를 만듭니다. - 콘텐츠 브라우저에
PM_Sand(Restitution: 0.0, Friction: 0.8)를 만듭니다.
-
고무공 만들기
- 레벨에
Sphere스태틱 메시를 배치합니다. Details패널의Physics섹션에서Simulate Physics를 활성화합니다.Sphere에셋을 더블클릭하여 에디터를 엽니다.Details패널의Physics섹션에서Simple Physical Material에PM_Rubber를 할당합니다.- 게임을 플레이하여 구체가 바닥에 떨어져 튕기는 것을 확인합니다.
- 레벨에
-
얼음 바닥 만들기
- 레벨의
Floor메시(StaticMeshActor)를 선택하고, 이 메시의 재질(Material)을 찾습니다. (보통M_Ground_Grass등) - 해당 재질 에셋을 더블클릭하여 재질 에디터를 엽니다.
Details패널의Material섹션에서Physics Material에PM_Ice를 할당합니다.- 게임을 플레이하여 플레이어 캐릭터가 바닥 위에서 미끄러지는지 확인합니다. (미끄러지지 않는다면 캐릭터 무브먼트 컴포넌트의
Ground Friction등의 설정이 더 강하게 적용될 수 있습니다. 이 경우 물리 시뮬레이션되는 오브젝트를 떨어뜨려 테스트하는 것이 더 명확합니다.)
- 레벨의
-
모래밭 만들기
- 새로운
Cube메시를 레벨에 배치하고Simulate Physics를 활성화합니다. - 이 큐브에 새로운 시각적 재질(
M_Sand와 같이 이름 지정)을 만들고,Details패널의Material섹션에서Physics Material에PM_Sand를 할당합니다. M_Sand재질을 큐브에 적용합니다.- 게임을 플레이하여 큐브가 바닥에 떨어져 거의 튕기지 않고 빠르게 멈추는 것을 확인합니다.
- 새로운
물리 재질 최적화 고려 사항
물리 재질 자체는 성능에 큰 영향을 미치지 않지만, 이를 통해 파생되는 물리 시뮬레이션의 복잡도는 성능에 영향을 줄 수 있습니다.
- 밀도 (Density)의 합리적인 설정:
Density값이 너무 극단적으로 낮거나 높으면 물리 시뮬레이션이 불안정해질 수 있습니다. 현실적인 값을 유지합니다. - 복잡한 물리 상호작용 피하기: 너무 많은 오브젝트가 동시에 물리 시뮬레이션에 참여하거나, 복잡한 물리 재질 상호작용이 일어나는 것을 피합니다.
- Surface Type 활용:
Surface Type은 물리 충돌 시 사운드 이펙트나 파티클 효과를 다르게 재생하는 데 매우 유용합니다.편집(Edit) > 프로젝트 세팅(Project Settings) > 물리(Physics) > Physics Surface Types에서 필요한Surface Type을 미리 정의합니다.- 블루프린트
OnComponentHit이벤트에서Hit Result의Phys Material을 가져와Surface Type을 비교하여 특정 효과를 재생할 수 있습니다. 이는 물리 기반 오디오 시스템 구축의 기초가 됩니다.
- 물리 시뮬레이션 범위 제한: 불필요하게 먼 거리의 오브젝트에 물리 시뮬레이션을 활성화하지 않도록,
Sleep설정이나Cull Distance등을 활용하여 최적화합니다.
물리 재질 설정은 오브젝트 간의 물리적 상호작용에 현실감과 디테일을 더하는 강력한 도구입니다. 이 절에서 배운 물리 재질의 주요 속성(마찰, 반발력, 밀도, 표면 타입)과 적용 방법을 이해하고, 여러분의 게임에 맞는 다양한 물리적 특성을 가진 오브젝트들을 구현해 보세요.