디피처로 스태틱 메시 단순화

Defeature, 스태틱 메시 지오메트리에서 작은 구멍이나 돌출부를 제거하여 렌더링 퍼포먼스를 향상시키는 방법을 설명합니다.

Windows
MacOS
Linux

Defeature (디피처)란 돌출부나 구멍을 제거하여 메시를 단순화하는 방법입니다. 메시의 버텍스 및 트라이앵글 수를 줄여 렌더링 퍼포먼스를 향상시킬 수 있습니다.

defeaturing-banner.png

디피처는 컴퓨터 응용 디자인(CAD) 애플리케이션의 지오메트리에 특히 좋습니다. 물리적인 제조용으로 부품 및 어셈블리를 설계하고 모델링할 때, 보통 제조하는 현실의 사물에는 필수인 작은 부분이 실시간 렌더링에는 필요치 않을 수 있습니다.

예를 들어, 연료 펌프 어셈블리의 이 부품은 트라이앵글이 20,000 개입니다. 일부 구멍을 제거하면 그 수가 거의 절반으로 줄어듭니다. 이 경우 어셈블리의 다른 부품이 수정된 영역을 커버하므로, 그 맥락에서 보면 렌더링 결과에 눈에 띄는 변화가 없습니다.

이전: 20,617 트라이앵글

이후: 11,553 트라이앵글

추가로 레벨 오브 디테일 (LOD) 을 만들어 화면 공간을 덜 차지할 때 메시를 한층 더 단순화시킬 계획이라면, 디피처를 적용한 메시에서 LOD 를 만들면 단순화된 메시를 눈에 덜띄게 만들 수 있습니다. 예를 들어, 크랭크 축 어셈블리의 이 작은 부품에서, 디테일이 낮은 LOD 레벨에서 보면 작은 구멍의 지그 재그가 매우 심해 보입니다. 디피처링을 통해 작은 구멍을 제거한 뒤 LOD 를 만들면, 작은 크기로 봤을 때 메시가 훨씬 깔끔해 보입니다.

원본 메시

LOD 2

디피처 이후 LOD

언리얼 에디터는 데이터스미스 또는 FBX 에서 임포트한 스태틱 메시 애셋에 디피처를 적용하는 기능을 제공합니다.

제거가능 피처

디피처 툴이 제거할 수 있는 피처 유형, 제거하려는 피처 크기를 제어하는 데 사용할 수 있는 측정 단위의 설명은 다음과 같습니다.

관통 구멍

Through holes (관통 구멍)은 오브젝트의 한 쪽과 반대 쪽을 완전히 관통하는 표면의 구멍입니다.

제거할 관통 구멍의 크기 제한은 최대 직경으로 지정할 수 있습니다.

관통 구멍 제거 전

관통 구멍 제거 후

막힌 구멍

Blind holes (막힌 구멍)은 오브젝트를 완전히 관통하지 않는 표면의 구멍입니다. 표면의 일정 깊이 위치에 밑면이 있습니다.

제거할 막힌 구멍 크기 제한은 구멍의 최대 직경과 표면 아래 구멍의 최대 깊으로 지정할 수 있습니다. 그 치수 모두 지정한 것보다 작은 구멍만 제거됩니다.

막힌 구멍 제거 전

막힌 구멍 제거 후

돌출

Protrusions (돌출)은 주변 표면 위로 솟아 오른 돌기입니다.

제거할 돌출 크기 제한은 돌출의 최대 직경과 표면 위로 솟아 오른 최대 높이로 지정합니다. 그 치수 모두 지정한 것보다 작은 것만 제거됩니다.

돌출 제거 전

돌출 제거 후

스태틱 메시 에디터의 디피처

  1. 스태틱 메시 에디터에서 수정하고자 하는 스태틱 메시를 엽니다.
    콘텐츠 브라우저 에서 애셋을 더블클릭하거나, 우클릭한 후 편집 을 선택하면 됩니다.

  2. 메시 편집 툴바를 엽니다.
    Open the Mesh Editing Toolbar

  3. Defeaturing (디피처) 아이콘을 클릭합니다.
    Defeaturing

  4. 제거할 피처를 구성할 수 있는 세팅 대화창이 표시됩니다.
    Defeaturing settings
    스태틱 메시에서 제거하려는 피처 각 유형에 대해 해당하는 옵션과 해당 피처 유형의 최대 치수를 설정합니다.

    선택한 각 피처 유형의 최대 치수를 기본값에서 늘립니다.

  5. Proceed (진행)을 클릭하면 디피처 작업이 시작되고 스태틱 메시가 수정됩니다.
    Proceed

에디터 스크립트의 디피처

블루프린트와 Python 으로 관통 구멍, 막힌 구멍, 돌출을 제거할 수 있습니다.

선행 조건: Editor Scripting Utilities (에디터 스크립팅 유틸리티) 플러그인을 미리 설치한 상태여야 합니다. 자세한 내용은 에디터 자동화 및 스크립트 작성 문서를 참고하세요.

구현 방법 선택

블루프린트

Python

블루프린트의 Mesh Processing > Defeature Mesh 노드로 스태틱 메시 애셋에 디피처 툴을 실행할 수 있습니다.

Defeature Mesh node

이 노드를 사용하려면, PlacedEditorUtilityBase 와 같은 에디터 전용 클래스에서 파생한 블루프린트 클래스여야 합니다. 자세한 내용은 블루프린트를 사용한 에디터 스크립팅 문서를 참고하세요.

이 노드에 다음 입력을 제공해야 합니다.

  • 수정하려는 스태틱 메시 애셋에 대한 참조. 이 애셋은 일반적으로 Editor Scripting > Asset > Load Asset 노드를 호출해서 먼저 로드해야 합니다.

  • 스태틱 메시에 수정하려는 LOD 의 인덱스. 특정 LOD 에 디피처를 적용하려는 것이 아니면 0 입니다.

  • 스태틱 메시에서 제거할 피처 유형을 제어하는 MeshDefeaturingParameterObject 및 제거할 피처 최대 크기.
    이 오브젝트를 구성하려면: 1. 블루프린트의 내 블루프린트 패널에서 + 변수 버튼을 클릭하여 새 변수를 추가합니다.

    ![Add variable](defeaturing-add-variable.png "Add variable")

    2. 변수 유형을 Mesh Defeaturing Parameter Object 의 레퍼런스로 설정합니다.

    ![Mesh Defeaturing Parameter Object](defeaturing-add-parameter-object.png "Mesh Defeaturing Parameter Object")

    3. 변수를 블루프린트 그래프로 Control 드래그하여 그 변수 값을 가져오는 새 노드를 만듭니다.

    ![Drag and drop](defeaturing-drag-variable.png "Drag and drop")

    4. 새 변수 노드의 출력 포트를 오른쪽으로 드래그하고, 변수 목록에서 수정하려는 세팅에 대한 Set 노드를 선택합니다.

    ![Defeaturing parameter API](defeaturing-parameter-api.png "Defeaturing parameter API")

예를 들어 다음 스크립트는 스태틱 메시 애셋에서 너비가 5 cm 미만인 모든 관통 구멍을 제거합니다.

스태틱 메시 애셋에 디피처 툴을 실행하는 함수는 다음과 같습니다: unreal.EditorMeshProcessing.defeature_mesh().

이 함수에 전달할 내용은 다음과 같습니다.

  • 수정하려는 스태틱 메시 애셋. 이 애셋은 보통 다음 함수를 호출해서 먼저 로드해야 합니다: unreal.EditorAssetLibrary.load_asset().

  • 스태틱 메시에 수정하려는 LOD 인덱스. 특정 LOD 에 디피처를 적용하려는 것이 아니면 0 입니다.

  • 생성한 unreal.MeshDefeaturingParameterObject. 스태틱 메시에서 제거할 피처 유형을 제어하는 구성 파라미터와 제거할 피처 최대 크기로 이 오브젝트를 구성합니다.

예를 들어, 다음 스크립트는 스태틱 메시의 모든 관통 구멍, 막힌 구멍, 돌출 중 unreal.MeshDefeaturingParameterObject 에 설정된 치수 미만인 것을 전부 제거합니다.

import unreal
asset_name = "/Game/Unreal_Sportbike/Geometries/0x25f0e0b7Unreal_Sportbike_geom_3180.Accumulator_case"
def defeature_mesh(mesh_name):
    # 애셋 로드
    mesh_asset = unreal.EditorAssetLibrary.load_asset(mesh_name)
    # 파라미터 오브젝트 생성
    options = unreal.MeshDefeaturingParameterObject()
    # 그 프로퍼티 구성
    options.fill_blind_holes = True
    options.filled_hole_max_diameter = 10
    options.filled_hole_max_depth = 5
    options.fill_through_holes = True
    options.through_hole_max_diameter = 10
    options.remove_protrusions = True
    options.protrusion_max_diameter = 10
    options.protrusion_max_height = 5
    # 디피처 실행
    unreal.MeshProcessingLibrary.defeature_mesh(mesh_asset, 0, options)
    # 애셋 저장
    unreal.EditorAssetLibrary.save_loaded_asset(mesh_asset)
defeature_mesh(asset_name)
Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback