본문으로 건너뛰기

안동민 개발노트

본문 시작

물리 재질 설정 및 최적화

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

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

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

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

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

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

하나의 물리 재질이 반응 수치와 표면 정체성을 함께 공급한다

시각 Material과 별개로, Physical Material은 충돌 계산에 쓸 값과 Hit 결과를 게임 피드백으로 분기할 Surface Type을 묶습니다.

  1. 1 · 적용 지점

    ASSIGN Visual Material 렌더 재질에서 연결 Simple Collision Static Mesh·Physics Body에 지정 Phys Material Override Actor·Component의 단순 충돌 값을 교체

  2. 2 · Physical Material Asset

    CONTRACT Friction 미끄러짐 Restitution 반발 Density 질량 계산 Surface Type SurfaceType_Ice 물리 수치와 독립된 게임플레이 분기 키

  3. CONTRACT
  4. 3 · 충돌 뒤 두 소비자

    RESULT Simulation 마찰·반발 combine 정책과 밀도가 실제 움직임에 반영됩니다. Gameplay Surface Type으로 발소리·충돌 VFX·데칼을 선택합니다.


물리 재질 (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: 이 옵션을 활성화하면 FrictionRestitution 값을 직접 지정할 수 있습니다. 비활성화하면 Default Physical Material이나 다른 설정의 영향을 받습니다.
  • Surface Type (표면 타입)
    • Project Settings > Physics > Physics Surface Types에서 미리 정의된 Surface Type을 선택할 수 있습니다.
    • Surface Type은 블루프린트에서 OnComponentHit 이벤트 발생 시 Hit ResultPhys Material을 통해 접근하여, 충돌한 표면의 종류에 따라 다른 사운드, 파티클, 또는 게임 플레이 로직을 구현하는 데 사용됩니다.

물리 재질 적용 방법

물리 재질은 표면의 마찰과 반발을 통해 움직임의 느낌을 바꾸는 설정입니다.

아래 다이어그램은 재질 값 선택과 적용 대상을 함께 점검하는 흐름을 정리합니다.

물리 재질은 표면의 마찰, 반발, 밀도로 움직임의 느낌을 바꾼다

같은 메시라도 어떤 물리 재질이 붙는지에 따라 멈춤, 미끄러짐, 튀어 오름이 달라진다.

느낌확인할 장면
Friction멈춤과 미끄러짐 정도얼음 바닥, 고무 바닥, 경사면 이동
Restitution충돌 뒤 튀어 오르는 정도공, 상자, 파편 반응
Density질량 계산에 반영되는 재질감무거운 금속과 가벼운 나무 구분
Surface Type사운드와 이펙트 분기 키발자국, 충돌음, 먼지 이펙트

물리 재질은 스태틱 메시 에셋 또는 일반 재질(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 MaterialPM_Rubber를 할당합니다.
    • 게임을 플레이하여 구체가 바닥에 떨어져 튕기는 것을 확인합니다.
  • 얼음 바닥 만들기
    • 레벨의 Floor 메시(StaticMeshActor)를 선택하고, 이 메시의 재질(Material)을 찾습니다. (보통 M_Ground_Grass 등)
    • 해당 재질 에셋을 더블클릭하여 재질 에디터를 엽니다.
    • Details 패널의 Material 섹션에서 Physics MaterialPM_Ice를 할당합니다.
    • 게임을 플레이하여 플레이어 캐릭터가 바닥 위에서 미끄러지는지 확인합니다. (미끄러지지 않는다면 캐릭터 무브먼트 컴포넌트의 Ground Friction 등의 설정이 더 강하게 적용될 수 있습니다. 이 경우 물리 시뮬레이션되는 오브젝트를 떨어뜨려 테스트하는 것이 더 명확합니다.)
  • 모래밭 만들기
    • 새로운 Cube 메시를 레벨에 배치하고 Simulate Physics를 활성화합니다.
    • 이 큐브에 새로운 시각적 재질(M_Sand와 같이 이름 지정)을 만들고, Details 패널의 Material 섹션에서 Physics MaterialPM_Sand를 할당합니다.
    • M_Sand 재질을 큐브에 적용합니다.
    • 게임을 플레이하여 큐브가 바닥에 떨어져 거의 튕기지 않고 빠르게 멈추는 것을 확인합니다.

물리 재질을 사운드와 이펙트까지 연결할 때는 Surface Type이 어떤 경로로 블루프린트에 전달되는지 함께 봐야 합니다.

Surface Type은 충돌 결과를 사운드와 이펙트 분기로 넘긴다

재질 감각은 물리 값에서 끝나지 않고 Hit Result를 통해 발소리와 파편 효과까지 이어진다.

  1. Physical Material

    표면에 Friction, Restitution, Surface Type을 지정한다.

  2. Trace / Hit

    Line Trace 또는 Hit 이벤트가 표면 정보를 얻는다.

  3. Break Hit Result

    Phys Mat과 Impact Point를 꺼낸다.

  4. Switch Surface

    Stone, Metal, Wood 같은 타입으로 분기한다.

  5. Feedback

    발소리, 파편, 먼지, Decal을 맞춰 재생한다.

기준판정
발소리가 틀림Trace가 실제 바닥 물리 재질을 읽는지 확인한다.
이펙트 위치가 어긋남Impact Point와 Normal 방향을 함께 사용한다.

물리 재질 최적화 고려 사항

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

  • 밀도 (Density)의 합리적인 설정: Density 값이 너무 극단적으로 낮거나 높으면 물리 시뮬레이션이 불안정해질 수 있습니다. 현실적인 값을 유지합니다.
  • 복잡한 물리 상호작용 피하기: 너무 많은 오브젝트가 동시에 물리 시뮬레이션에 참여하거나, 복잡한 물리 재질 상호작용이 일어나는 것을 피합니다.
  • Surface Type 활용: Surface Type은 물리 충돌 시 사운드 이펙트나 파티클 효과를 다르게 재생하는 데 매우 유용합니다.
    • 편집(Edit) > 프로젝트 세팅(Project Settings) > 물리(Physics) > Physics Surface Types에서 필요한 Surface Type을 미리 정의합니다.
    • 블루프린트 OnComponentHit 이벤트에서 Hit ResultPhys Material을 가져와 Surface Type을 비교하여 특정 효과를 재생할 수 있습니다. 이는 물리 기반 오디오 시스템 구축의 기초가 됩니다.
  • 물리 시뮬레이션 범위 제한: 불필요하게 먼 거리의 오브젝트에 물리 시뮬레이션을 활성화하지 않도록, Sleep 설정이나 Cull Distance 등을 활용하여 최적화합니다.

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

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

물리 재질은 어디에 붙이느냐에 따라 적용 범위가 달라집니다.

아래 표는 스태틱 메시, 머티리얼, 액터 오버라이드, Surface Type을 선택할 때의 기준을 정리합니다.

물리 재질 적용 위치표

물리 재질은 에셋, 머티리얼, 액터 중 어디에 붙이느냐에 따라 재사용 범위와 예외 처리 방식이 달라집니다.

  1. 같은 메시의 기본값

    Static Mesh 에셋을 쓰는 모든 인스턴스에 같은 마찰과 반발력을 적용할 때 선택합니다.

  2. 표면 표현과 함께 관리

    Material 눈, 얼음, 금속처럼 시각 재질과 물리 특성이 같이 움직일 때 가장 자연스럽습니다.

  3. 레벨의 한 액터만 예외

    Override 같은 메시라도 특정 배치물만 미끄럽거나 잘 튕겨야 할 때 인스턴스에서 덮어씁니다.

  4. 사운드와 이펙트 분기

    Surface Type Hit Result에서 표면 타입을 읽어 발소리, 충돌음, 파티클을 다르게 재생합니다.

물리 재질은 표면 감각을 만드는 데이터이므로, 어디에 붙였는지와 어떤 Surface Type으로 읽히는지를 같이 확인해야 합니다.

물리 재질 적용 기준

물리 재질은 표면의 마찰과 반발을 분리해 같은 물체도 바닥 종류에 따라 다르게 반응하게 합니다.

  1. Friction
    Friction

    미끄러운 얼음, 거친 바닥처럼 이동 저항을 표면별로 나눕니다.

  2. Restitution
    Restitution

    공이 튀는 정도나 충돌 후 반발감을 제어합니다.

  3. Apply
    Apply

    메시, 머티리얼, 액터 오버라이드 중 유지보수하기 쉬운 위치에 적용합니다.

  4. Combine
    Combine

    두 표면이 만났을 때 어떤 값 조합을 쓸지 Combine Mode를 확인합니다.