icon
7장 : 물리 환경 설정

물리 재질 설정 및 최적화


이전 절에서 중력과 충돌의 기본 개념을 이해하고 조정하는 방법을 배웠습니다. 이제 물리 시뮬레이션의 현실감을 한 단계 더 높이는 중요한 요소인 물리 재질(Physical Material) 에 대해 자세히 알아볼 차례입니다. 물리 재질은 오브젝트 표면의 마찰력, 반발력, 밀도 등 물리적 특성을 정의하여 오브젝트 간의 충돌 반응을 더욱 세밀하게 제어할 수 있게 합니다. '나 혼자 언리얼 기본' 교재를 통해 여러분이 언리얼 엔진에서 물리 재질을 효과적으로 설정하고, 이를 통해 더욱 사실적이고 몰입감 있는 물리 환경을 창조할 수 있도록 안내해 드리겠습니다. 마치 실제 세계의 모든 물체가 고유한 표면 특성을 가지듯, 여러분의 레벨도 물리 재질을 통해 오브젝트에 독특한 물리적 개성을 부여해 봅시다.


물리 재질 (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을 통해 접근하여, 충돌한 표면의 종류에 따라 다른 사운드, 파티클, 또는 게임 플레이 로직을 구현하는 데 사용됩니다.

물리 재질 적용 방법

물리 재질은 스태틱 메시 에셋 또는 일반 재질(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 재질을 큐브에 적용합니다.
    • 게임을 플레이하여 큐브가 바닥에 떨어져 거의 튕기지 않고 빠르게 멈추는 것을 확인합니다.

물리 재질 최적화 고려 사항

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

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

물리 재질 설정은 오브젝트 간의 물리적 상호작용에 현실감과 디테일을 더하는 강력한 도구입니다. 이 절에서 배운 물리 재질의 주요 속성(마찰, 반발력, 밀도, 표면 타입)과 적용 방법을 이해하고, 여러분의 게임에 맞는 다양한 물리적 특성을 가진 오브젝트들을 구현해 보세요.