[UE4] Blueprint & Python으로 Datasmith 가져오기 프로세스 맞춤설정

Datasmith 가져오기 처리를 Blueprint 또는 Python으로 결합하여 워크플로우를 더욱 효율적으로 만들 수 있습니다.

Datasmith를 사용하여 정상적으로 가져오면 아래 이미지와 같이 2단계 프로세스가 실행됩니다.

이미지는 공식 문서에서 인용
h tp // 아피. 그래, 응. 코 m/JP응/엔테 rp 리세/다타 s미 th/오오ぇrゔぃ에 w/쿠스와 다진 m포 rtP로세스 s/그리고 x. HTML
  • 파일의 내용을 메모리내에서 읽어 씬을 구축.
  • Asset, Actor로 변환하여 레벨에 생성. (가져 오기)

  • Blueprint/Python을 사용하면 이 두 프로세스를 분해하여 따로따로 실행하거나 그 사이에 독자적인 처리를 짜서 실제로 가져오기 전에 실행할 수 있습니다.

    이번은 일례로서, 바운딩 박스의 3변의 합계가 일정 이하의 오브젝트를 제외해 임포트 해 보고 싶습니다.
    나사 등 세세한 부품을 제외하는 데 사용할 수 있을까 생각합니다.

    Blueprint의 경우



    Editor Scripting Utilities 플러그인을 활성화해야 합니다.
    편집기 편집 > 플러그인에서 Editor Scripting Utilities에서 검색하여 활성화하십시오.


    먼저 콘텐츠 브라우저에서 블루프린트 클래스를 만듭니다.


    상위 클래스는 Placed Editor Utility Base로 설정됩니다.


    Blueprint 그래프는 이런 느낌입니다.


    보기 쉽도록 이 사이트에도 업하고 있습니다.
    h tps://b ぅ에 p 린츠에. 이 m / b p p rin t / _ x g ri d /

    가장 왼쪽의 이벤트 노드는 사용자 정의 이벤트이며, 편집기에서 호출을 선택하면 편집기에서 실행할 수 있습니다.
    여기를 참고로 설정해보십시오.
    h tp // 아피. 그래, 응. 코 m/JP응/엔기네/에아와 r/Sc리 p 칭다다토토마치온/Bぅ에p린 ts/이여 x. HTML

    거친 처리의 흐름을 해설하면,

    Datasmith 파일을 참조하여 Datasmith Scene 빌드
    ↓
    구축된 씬의 모든 액터를 배열로서 취득해, For Each Loop로 개별적으로 바운딩 박스의 크기를 평가해 일정 이하이면 씬으로부터 삭제
    ↓
    마지막으로 가져온 액터가 있으면 삭제
    위에서 재구성한 것을 가져오고 마지막으로 메모리의 Datasmith Scene 재설정

    같은 흐름이 있습니다.

    파이썬의 경우



    Python 플러그인을 사용하도록 설정해야 합니다.
    편집기 편집 > 플러그인에서 Python 플러그인을 활성화하십시오.
    언리얼 엔진에서 Python을 사용하는 방법은 여기를 참조하십시오.
    h tp // 아피. 그래, 응. 코 m/JP응/엔기네/에아와 r/Sc리 p칭암다토 마치온/Py 텐/그리고 x. HTML
    import unreal
    #.udatasmithのファイルパスを指定。
    ds_file_on_disk = ""
    ds_scene_in_memory = unreal.DatasmithSceneElement.construct_datasmith_scene_from_file(ds_file_on_disk)
    
    if ds_scene_in_memory is None:
        print "Scene loading failed."
        quit()
    
    
    #バウンディングボックス3辺の和が一定以下のメッシュを取り除く。
    remove_size = 500
    for mesh in ds_scene_in_memory.get_meshes():
        mesh_size = mesh.get_bounding_box_height() + mesh.get_bounding_box_width() + mesh.get_bounding_box_depth()
        if remove_size > mesh_size:
            ds_scene_in_memory.remove_mesh(mesh)
    
    # 上記で取り除いたメッシュを参照するメッシュ アクタをシーンから取り除く。
    for mesh_actor in ds_scene_in_memory.get_all_mesh_actors():
        mesh_reference = mesh_actor.get_mesh_element()
        if mesh_reference is None:
            print("removing an actor with a missing mesh:" + mesh_actor.get_element_name())
            ds_scene_in_memory.remove_mesh_actor(mesh_actor)
    
    # インポート オプションを設定する。
    options = unreal.DatasmithImportBaseOptions()
    options.scene_handling = unreal.DatasmithImportScene.NEW_LEVEL
    
    # アセットとアクタを作成することでプロセスをファイナライズする。
    
    # 宛先フォルダは /Game/ で始まる必要がある。
    ds_scene_in_memory.import_scene("/Game/MyStudioScene", options)
    
    # Datasmith シーンをクリーン アップする。
    ds_scene_in_memory.destroy_scene()
    print "Custom import process complete!"
    

    이런 느낌입니다.
    공식 문서에도 있듯이 이름으로 판별하여 삭제하거나 그 밖에도 여러가지 응용할 수 있다고 생각합니다.

    참고 링크


  • Datasmith 가져오기 프로세스 사용자 정의
    h tp // 아피. 그래, 응. 코 m/JP응/엔테 rp 리세/다타 s미 th/오오 ぇrゃぃ에 w/쿠 s와 다진 m포 rtP 로세 s/ 어서 x. HTML
  • 실시간 디자인 도구 만들기 : McLaren으로 언리얼 스튜디오에서 CAD 가져 오기 자동화
    htps //w w. 그래, 응. 코 m / 그럼 / ch-b-g / 마킨 g- 아레 아 l - 치메 - 데시 군 - 와 lmc ぁ음, 음, l-s
  • 좋은 웹페이지 즐겨찾기