안동민 개발노트

본문 시작

물리 재질 설정 및 최적화

물리 재질의 마찰·반발·밀도를 조정하고 Surface Type을 사운드와 이펙트에 연결해 표면별 반응을 만듭니다.

표면이 모두 같은 마찰과 반발력을 가지면 게임은 단조롭고 가짜처럼 느껴집니다.

얼음 위 미끄러짐, 고무 바닥의 반동, 금속 충돌 소리처럼 표면별 차이가 있어야 플레이 감각이 살아납니다.

이번 절에서는 물리 재질(Physical Material)을 사용해 오브젝트의 물리 반응을 분리하는 방법을 다룹니다.

마찰력, 반발력, 밀도 값을 어떻게 잡아야 의도한 결과가 나오는지와 Surface Type을 사운드/이펙트에 연결하는 구조까지 함께 정리하겠습니다.

이 절을 마치면 오브젝트의 겉모습뿐 아니라 실제 반응성까지 설계할 수 있습니다.


물리 재질 (Physical Material)의 이해

물리 재질은 UE5의 기본 물리 시스템인 Chaos가 오브젝트 간의 상호작용을 계산할 때 참조하는 데이터 에셋입니다.

이는 시각적인 재질(Material)과는 별개로, 마찰·반발·밀도와 게임플레이에서 사용할 표면 타입을 담습니다. 시각 머티리얼의 색이나 질감을 자동으로 바꾸지는 않습니다.

주요 역할

  • 마찰 (Friction): 오브젝트가 다른 표면 위에서 미끄러지는 정도를 제어합니다.
  • 반발력 (Restitution): 오브젝트가 충돌 시 튕겨 나가는 정도(탄성)를 제어합니다.
  • 밀도 (Density): 형상과 함께 질량 특성 계산에 사용합니다. 자동 계산은 Mass가 0이라는 조건이 아니라 질량 오버라이드 여부 등에 따르며, Raise Mass To Power도 확인합니다.
  • 표면 타입 (Surface Type): 충돌 시 발생하는 사운드나 파티클 효과를 결정하는 데 사용됩니다. (예: 금속에 부딪히는 소리, 나무에 부딪히는 소리)

물리 재질 생성 및 설정

생성
  • 콘텐츠 브라우저에서 마우스 오른쪽 버튼 클릭
  • 물리(Physics) > 물리 머티리얼(Physical Material) 선택
  • PM_ 접두사를 붙여 이름을 지정합니다. (예: PM_Wood, PM_Metal, PM_Rubber, PM_Ice)
설정 (물리 재질 에디터)
  • 생성된 물리 재질 에셋을 더블클릭하여 에디터를 엽니다.
  • Friction (마찰)
    • 0.0: 이 재질의 마찰 계수를 0으로 둡니다. 최종 접촉 마찰은 상대 재질과 Combine Mode에 따릅니다.
    • 1.0: 마찰 계수 1의 예시이며 모든 일반 표면의 표준값은 아닙니다.
    • >1.0: 높은 마찰 (고무처럼 끈적임)
    • Combine Mode: 두 오브젝트의 마찰력이 결합되는 방식 (평균, 최소, 최대, 곱셈 등)
  • Restitution (반발력)
    • 0.0: 튕기지 않음 (점토처럼 충격을 흡수)
    • 1.0: 반발 계수의 높은 쪽 값입니다. 상대 재질·Combine Mode·해결 조건 때문에 실제 높이가 항상 같지는 않습니다.
    • Combine Mode: 두 오브젝트의 반발력이 결합되는 방식
  • Density (밀도)
    • 단위는 g/cm³입니다. 예를 들어 1.0은 물의 밀도와 비슷한 값입니다.
    • 값이 높을수록 같은 부피 대비 질량이 커집니다. (예: 납은 높게, 스티로폼은 낮게)
  • Override Friction Combine Mode / Override Restitution Combine Mode: 계수 입력의 사용 여부가 아니라, 두 표면의 값을 합치는 모드를 재질별로 지정하는 옵션입니다.
  • Surface Type (표면 타입)
    • Project Settings > Physics > Physics Surface Types에서 미리 정의된 Surface Type을 선택할 수 있습니다.
    • 유효한 Hit Result의 Phys Material을 읽고 Get Surface Type / Switch on EPhysicalSurface로 사운드·이펙트를 선택합니다. Trace나 이동 sweep이 물리 재질을 반환하도록 설정했는지 확인하며, 타입만 지정해도 효과가 자동 재생되는 것은 아닙니다.

물리 재질 적용 방법

물리 재질은 스태틱 메시 에셋 또는 일반 재질(Material) 에셋에 할당할 수 있습니다.

스태틱 메시 에셋에 적용

  • 가장 직접적인 방법: 특정 스태틱 메시 에셋의 기본 물리 특성을 정의할 때 사용합니다.
  • 절차

    물리 재질을 적용할 Static Mesh 에셋을 더블클릭하여 스태틱 메시 에디터를 엽니다.

    Details 패널의 Physics (물리) 섹션에서 Simple Physical Material 속성을 찾습니다.

    드롭다운 메뉴에서 생성된 물리 재질 (예: PM_Rubber)을 선택하여 할당합니다.

  • 주의: 이 에셋의 단순 충돌 기본값을 공유합니다. 컴포넌트에서 Phys Material Override를 지정한 인스턴스는 예외입니다.

일반 재질 에셋에 적용

  • 복잡 충돌의 표면 구분: 시각적인 재질과 물리적 특성을 함께 관리할 수 있어 효율적입니다.
  • 절차

    물리 재질을 적용할 일반 Material 에셋을 더블클릭하여 재질 에디터를 엽니다.

    Details 패널의 Material 섹션에서 Phys Material 속성을 찾습니다.

    드롭다운 메뉴에서 생성된 물리 재질 (예: PM_Ice)을 선택하여 할당합니다.

  • 주의: 메시 표면의 Material/Material Instance에 지정하는 경로와 단순 충돌용 경로를 구분합니다. 어떤 경로가 더 일반적이라고 고르기보다, 사용하는 충돌·Trace가 Simple인지 Complex인지 확인합니다.

액터별 오버라이드

  • 특정 인스턴스에만 적용: 레벨에 배치된 특정 액터 인스턴스에만 물리 재질을 다르게 적용하고 싶을 때 사용합니다.
  • 절차

    레벨에 배치된 Static Mesh Actor를 선택합니다.

    메시 컴포넌트의 Phys Material Override 속성을 찾습니다.

    Phys Material Override 슬롯에 원하는 물리 재질을 할당합니다.

  • 주의: 단순 충돌용 물리 재질을 바꾸는 용도입니다. 복잡 Trace의 모든 표면 재질까지 무조건 덮어쓴다고 가정하지 말고 실제 Hit Result를 확인합니다.

물리 재질 설정 실습

다양한 물리 재질을 만들어 적용하고 그 효과를 직접 관찰해 봅시다.

새로운 레벨 생성: 파일(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 메시 컴포넌트의 Phys Material Override에 PM_Ice를 할당합니다.
    • Character Movement의 Ground Friction은 표면의 Friction을 자동 복사하지 않습니다. 먼저 같은 초기 속도의 시뮬레이션 큐브로 비교하고, 캐릭터 이동감은 다음 절의 별도 로직으로 연결합니다.
  • 모래밭 만들기
    • 새로운 Cube 메시를 레벨에 배치하고 Simulate Physics를 활성화합니다.
    • 큐브 컴포넌트의 Phys Material Override에 PM_Sand를 지정합니다. 시각적 재질 M_Sand는 별도로 만들어 큐브에 적용합니다.
    • 같은 높이·바닥·질량·감쇠에서 튕김과 정지 시간을 비교합니다. 바닥 재질의 계수와 Combine Mode도 기록합니다.

표면별 피드백은 성공한 Trace/Hit의 물리 재질을 읽은 뒤 Surface Type으로 효과를 선택합니다. 재질이 없거나 Hit가 실패한 경우의 기본 효과도 정합니다.


물리 재질 최적화 고려 사항

물리 재질 자체는 성능에 큰 영향을 미치지 않지만, 이를 통해 파생되는 물리 시뮬레이션의 복잡도는 성능에 영향을 줄 수 있습니다.

  • 밀도 (Density)의 합리적인 설정: Density 값이 너무 극단적으로 낮거나 높으면 물리 시뮬레이션이 불안정해질 수 있습니다. 현실적인 값을 유지합니다.
  • 복잡한 물리 상호작용 피하기: 너무 많은 오브젝트가 동시에 물리 시뮬레이션에 참여하거나, 복잡한 물리 재질 상호작용이 일어나는 것을 피합니다.
  • Surface Type 활용: Surface Type은 물리 충돌 시 사운드 이펙트나 파티클 효과를 다르게 재생하는 데 매우 유용합니다.
    • 편집(Edit) > 프로젝트 세팅(Project Settings) > 물리(Physics) > Physics Surface Types에서 필요한 Surface Type을 미리 정의합니다.
  • 물리 시뮬레이션 범위 제한: 불필요하게 먼 거리의 오브젝트에 물리 시뮬레이션을 활성화하지 않도록, Sleep 또는 별도의 거리 기반 활성화 로직을 사용합니다. 렌더링 Cull Distance는 물리 시뮬레이션을 자동 중지하지 않습니다.

물리 재질 설정은 오브젝트 간 마찰, 반발력, 밀도, 표면 타입을 구분해 상호작용 결과를 조정하는 방법입니다.

프로젝트에 필요한 표면별 물리 기준을 먼저 정한 뒤 메시와 머티리얼에 적용하세요.