3D 씬 가져오기

Godot 씬 가져오기

3D 애셋을 다룰 때, Godot는 유연하면서 구성할 수 있는 가져오기를 갖고 있습니다.

Godot는 으로 작업합니다. 이는 즉, 좋아하는 3D DCC에서 작업한 전체 씬을 최대한 가깝게 전송한다는 것입니다.

Godot는 다음 3D 씬 파일 형식을 지원합니다:

  • DAE (COLLADA), 현재 가장 성숙한 워크플로입니다.
  • glTF 2.0. Both text and binary formats are supported. Godot has full support for it, but the format is new and gaining traction.
  • OBJ (Wavefront) 형식. 또한 완벽하게 지원하지만, 꽤 제한적입니다 (피봇, 스켈레톤 등을 지원하지 않음).
  • ESCN, a Godot specific format that Blender can export with a plugin.

그냥 텍스처와 함께 씬 파일을 프로젝트 저장소에 복사하면 됩니다, 그리고 Godot는 완전히 가져올 것입니다.

메시를 내보낼 때, 메시가 본에 의해 형태가 변하지 않는 것이 중요합니다. 좋아하는 3D 편집기에서 메시를 내보낼 때, 스켈레톤이 기존의 T 포즈나 기본 휴식 포즈로 되어있는지 확인하세요.

FBX는 왜 안 되죠?

대부분의 게임 엔진은 3D 씬을 가져오기 위해 FBX 형식을 사용합니다, 확실하게 업계에서 가장 표준화된 형식이죠. 하지만 이 형식은 Autodesk에서 닫힌 라이브러리를 사용해야 하는데, Godot보다 더 제한적인 라이선스 제약에서 배포됩니다.

언젠가 미래에 세운 계획은, GDNative를 사용해 이진 플러그인을 제공하는 것입니다.

Maya와 3DS Max에서 DAE 파일을 가져오기

Autodesk는 Maya와 3DS Max를 위한 내장 COLLADA 지원을 추가했습니다, 하지만 기본적으로 고장나고 사용하지 않아야 합니다. 이 형식을 내보내는 최선의 방법은 OpenCollada 플러그인을 사용하는 것입니다. 항상 소프트웨어의 최신 버전으로 업데이트 되진 않지만 잘 작동합니다.

블렌더에서 DAE 파일 가져오기

블렌더도 내장 COLLADA 지원을 갖고 있지만, 역시 고장나고 사용해서는 안됩니다.

Godot는 파이썬 플러그인을 지원하며 씬을 가져오는 작업이 훨씬 더 좋을 것입니다.

Exporting glTF 2.0 files from Blender

There are three ways to export glTF files from Blender. As a glTF binary (.glb file), glTF embedded (.gltf file), and with textures (gltf + .bin + textures).

glTF binary files are the smallest of the three options. They include the mesh and textures set up in Blender. When brought into Godot the textures are part of the object's material file.

glTF embedded files function the same way as binary files. They don't provide extra functionality in Godot, and shouldn't be used since they have a larger file size.

There are two reasons to use glTF with the textures separate. One is to have the scene description in a text based format and the binary data in a separate binary file. This can be useful for version control if you want to review changes in a text based format. The second is you need the texture files separate from the material file. If you don't need either of those glTF binary files are fine.

주석

Blender does not export emissive textures with the glTF file. If your model uses one it must be brought in separately.

블렌더에서 ESCN 파일 가져오기

가장 강력한 것으로,`godot-blender-exporter <https://github.com/godotengine/godot-blender-exporter>`__라고 부릅니다. .escn 파일을 사용하며, .tscn 파일 (Godot 씬 파일)의 다른 이름의 일종입니다; 가능한 한 많은 정보를 블렌더 씬에서 유지해줍니다.

ESCN 내보내기는 기능과 사용법을 설명하는 세부적인 문서를 갖고 있습니다.

가져오기 워크플로

Godot 씬 가져오기 어떻게 데이터를 가져오는 지에 따라 다른 워크플로가 있습니다. 많은 설정에 따라, 다음으로 씬을 가져올 수 있습니다:

  • 외부 머티리얼 (기본 값): 각 머티리얼은 파일 리소스에 저장됩니다. 모디파이어는 유지됩니다.
  • 외부 메시: 각 메시는 다른 파일로 저장됩니다. 많은 사용자는 메시를 직접 처리하는 것을 선호합니다.
  • 외부 애니메이션: 원본이 변경될 때 저장된 애니메이션을 수정하고 병합할 수 있도록 합니다.
  • 외부 씬: 가져온 씬의 각 루트 노드를 별도의 씬으로 저장합니다.
  • 단일 씬: 모든 것이 내장된 하나의 씬 파일입니다.
../../../_images/scene_import1.png

다른 개발자가 다른 요구가 있듯이, 이 가져오기 처리는 많이 커스터마이징 할 수 있습니다.

설정 가져오기

가져오기는 여러 설정이 있고, 밑에서 설명합니다:

../../../_images/scene_import2.png

노드(Nodes)

Root Type(루트 타입)

기본적으로, 가져온 씬의 루트 노드 타입은 "Spatial"이지만, 수정될 수 있습니다.

Root Name(루트 이름)

생성된 루트 노드에 특정 이름을 설정할 수 있습니다.

Root Scale

The scale of the root node.

Custom Script(커스텀 스크립트)

특수 스크립트로 가져오기 후 전체 씬을 처리하기 위해 제공할 수 있습니다. 후처리, 머티리얼 변경, 아니면 기하학으로 하는 재미있는 짓 등에 좋습니다.

다음과 같은 스크립트를 만드세요:

tool # needed so it runs in the editor
extends EditorScenePostImport

func post_import(scene):
  # do your stuff here
  return scene # remember to return the imported scene

post_import 함수는 가져온 씬을 인수로 받습니다 (매개변수는 사실 씬의 루트 노드입니다). 마지막으로 사용되는 씬은 반환되어야 합니다. 다른 것이 될 수 있습니다.

Storage(저장소)

기본적으로, Godot은 하나의 씬을 가져옵니다. 이 설정으로 루트 아래의 노드들을 각자의 씬으로 만들고 가져온 것을 인스턴스 하도록 지정할 수 있습니다.

물론 다른 곳에서 가져온 씬을 인스턴스 하는 것도 수동으로는 작동합니다.

머티리얼(Materials)

Location(위치)

Godot는 메시나 노드에서 머티리얼을 지원합니다. 기본적으로, 머티리얼은 각 노드에 들어갑니다.

Storage(저장소)

머티리얼은 씬이나 외부 파일 안에 저장될 수 있습니다. 기본적으로, 외부 파일에 저장되므로 편집하는 것이 가능합니다. 대부분의 3D DCC가 Godot와 같은 머티리얼 설정을 갖고 있지 않기 때문입니다.

머티리얼이 내장된 상태일 때, 원본 씬을 수정하고 다시 가져올 때마다 사라질 것입니다.

Keep On Reimport(다시 가져오기 유지)

한번Godot 기능을 사용하기 위해 머티리얼을 편집한다면, 가져오기는 편집한 것을 유지하고 원본 씬에서 오는 것은 무시합니다. 이 설정은 머티리얼이 파일로 저장된 경우에만 존재합니다.

Meshes(메시)

Compress(압축)

공간을 절약하기 위해 메시의 여러 측면에 덜 정확한 수치를 사용하도록 합니다.

이렇게 됩니다:
  • Transform Matrix (Location, rotation, and scale) : 32비트 실수에서 16비트 부호 있는 정수로.
  • Vertices : 32비트 실수에서 16비트 부호 있는 정수로.
  • Normals : 32비트 실수에서 32비트 부호 있는 정수로.
  • Tangents : 32비트 실수에서 32비트 부호 있는 정수로.
  • Vertex Colors : 32비트 실수에서 32비트 부호 있는 정수로.
  • UV : 32비트 실수에서 32비트 부호 있는 정수로.
  • UV2 : 32비트 실수에서 32비트 부호 있는 정수로.
  • Vertex weights : 32비트 실수에서 16비트 부호 있는 정수로.
  • Armature bones : 32비트 실수에서 16비트 부호 있는 정수로.
  • Array index : 얼마나 많은 원소가 있는 지에 따라 32비트나 16비트 부호 있는 정수로.
추가 정보:
  • UV2 = 세부적인 텍스처와 베이크된 텍스처를 위한 두 번째 UV 채널.
  • Array index = 위 배열의 각 요소에 순서를 매기는 배열; 즉, 꼭짓점과 노말에 순서를 매깁니다.

이로 인해 정밀도가 떨어질 수 있으니, 필요하다면 이 옵션을 끌 수 있습니다. 예를 들어, 메시가 매우 크거나 큰 영역을 포함하는 여러 메시를 가져온다면, 메시의 가져오기를 압축하는 것으로 기하학이나 꼭짓점이 있어야 할 자리에 없을 수도 있습니다.

Ensure Tangents(탄젠트 보장)

노말 맵핑 된 텍스처가 사용된다면, 메시는 탄젠트 배열을 가져야 합니다. 이 설정으로 원본 씬에서 탄젠트 배열이 없다면 생성하게 해줍니다. Godot는 Mikktspace를 사용하지만, 가져오기에서 생성하는 것이 항상 더 좋습니다.

Storage(저장소)

메시는 내장 대신 별개의 파일 (리소스)로 저장될 수 있습니다. 직접 객체를 짓는 것이 아니라면 이것은 꽤 실용적인 사용을 갖지는 않습니다.

이 설정은 씬 대신 메시로 직접 작업하기를 선호하는 사람들을 돕기 위해 제공됩니다.

Light Baking

Whether or not the mesh is used in baked lightmaps.

  • Disabled: The mesh is not used in baked lightmaps.
  • Enable: The mesh is used in baked lightmaps.
  • Gen Lightmaps: The mesh is used in baked lightmaps, and unwraps a second UV layer for lightmaps.

주석

For more information on light baking see Baked lightmaps.

External Files(외부 파일)

생성된 메시와 머티리얼은 하위 디렉토리에 씬의 이름을 가지면서 선택적으로 저장될 수 있습니다.

애니메이션 설정

Godot는 애니메이션 데이터를 어떻게 다루는 지에 따라 많은 설정을 제공합니다. (블렌더처럼) 일부 내보내기는 하나의 파일에 많은 애니메이션을 생성할 수 있습니다. 3DS Max나 Maya와 같은 것은 같은 타임라인에 많은 애니메이션을 넣어야 하거나, 최악의 경우, 애니메이션을 별도의 파일에 넣어야 합니다.

../../../_images/scene_import3.png

애니메이션 가져오기는 기본적으로 활성화되어 있습니다.

초당 프레임

대부분의 3D 가져오기 형식은 프레임 대신 초 당 타임라인으로 애니메이션을 저장합니다. 애니메이션을 가능한 한 충실하게 가져오기 위해선, 편집에 사용된 초 당 프레임을 지정하세요. 이를 잘못하면 부들거리는 애니메이션을 만들게 됩니다.

Filter Script(필터 스크립트)

어떤 애니메이션에서 트랙을 유지할 지 결정하기 위한 특수 문법에 filter script를 지정할 수 있습니다. (@TODO 이것은 문서가 필요합니다)

Storage(저장소)

기본적으로, 애니메이션은 내장으로 저장됩니다. 대신 파일에 애니메이션을 저장할 수 있습니다. 이렇게 하면 커스텀 트랙을 애니메이션에 추가하고 다시 가져온 후에도 이를 유지할 수 있습니다.

Optimizer(최적화 도구)

애니메이션을 가져올 때, Optimizer는 실행됩니다, 이걸로 애니메이션의 크기는 상당히 줄어듭니다. 일반적으로, 애니메이션이 활성화되어 있기 때문에 애니메이션이 손상되었다고 의심되는 상황이 아니라면 항상 켜져 있어야 합니다.

Clips(클립)

하나의 타임라인에서 여러 애니메이션을 클립처럼 지정하는 것이 가능합니다. 어떤 프레임에서 각 클립을 가져와야 하는 프레임으로 지정하세요 (그리고 물론, 위의 FPS 설정을 지정하는 것도 잊지 마세요).

씬 상속

In many cases, it may be desired to make modifications to the imported scene. By default, this is not possible because if the source asset changes (source .dae, .gltf, .obj file re-exported from 3D modelling app), Godot will re-import the whole scene.

하지만, 씬 상속을 사용하면 지역 수정을 만드는 것이 가능합니다. 가져온 씬을 열면 다음 대화 상자가 나타납니다:

../../../_images/scene_import4.png

상속된 씬에서, 수정에 대한 유일한 제한은 다음과 같습니다:

  • 노드는 삭제될 수 없습니다 (하지만 어디에나 추가될 수 있습니다).
  • 하위 리소스를 편집할 수 없습니다 (이를 위해선 위에서 설명했듯 외부로 저장해야 합니다)

그 외에는 모든 것이 허용됩니다!

가져오기 힌트

여러번 씬을 편집할 때, 내보낸 후 해야 하는 일반적인 작업이 있습니다:

  • 객체에 충돌 감지를 추가하기
  • 객체를 내비게이션 메시로 설정하기
  • (모델링에 사용되는 특정 빛과 같이) 게임 엔진에 사용되는 않는 노드 지우기

이 워크플로를 간단히 하기 위해, Godot는 3D 모델링 소프트웨어에서 객체의 이름에 붙일 수 있는 일부 접미사를 제공합니다. 가져올 때, Godot는 이를 감지하고 자동으로 동작을 수행합니다:

노드 삭제 (-noimp)

이 접미사를 갖고 있는 이름의 노드는 가져오는 순간 삭제될 것이며, 이는 타입과 관계없습니다. 가져온 씬에서는 나타나지 않습니다.

충돌 생성 (-col, -colonly, -convcolonly)

"-col" 설정은 오직 Mesh 노드에만 작동할 것입니다. 이것이 감지되면, 메시와 같은 기하학을 사용하여 자식 정적 충돌 노드가 추가될 것입니다.

하지만, 시각적인 기하학이 너무 복잡하거나 충돌에 너무 부드럽지 않은 경우, 잘 작업되지 않을 수 있습니다.

이를 해결하기 위해, "-colonly" 모디파이어가 존재합니다, 가져오면 메시는 제거되고 class_staticbody 충돌이 대신 생성됩니다. 이렇게 하면 시각적 메시와 실제 충돌을 분리할 수 있습니다.

"-convcolonly" 설정은 class_concavepolygonshape 대신 class_convexpolygonshape를 만들 것입니다.

"-colonly" 설정은 블렌더의 Empty 객체와 함께 사용될 수도 있습니다. 가져올 때, class_staticbody와 자식으로 충돌 노드를 생성할 것입니다. 충돌 노드는 미리 정의된 모양 중 하나를 가지며, 블렌더의 Empty 형태 타입에 따라 다릅니다:

../../../_images/3dimp_BlenderEmptyDrawTypes.png
  • Single arrow는 class_rayshape를 만들 것입니다
  • Cube는 class_boxshape를 만들 것입니다
  • Image는 class_planeshape를 만들 것입니다
  • Sphere (그리고 나열되지 않은 나머지)는 class_sphereshape를 만들 것입니다

블렌더의 편집기에서 더 좋은 가시성을 위해, 충돌 Empty에 "X-Ray"를 설정하고 User Preferences / Themes / 3D View / Empty에서 뚜렷한 색상을 설정할 수 있습니다.

내비게이션 생성 (-navmesh)

이 접미사를 가진 메시 노드는 내비게이션 메시로 변환될 것입니다. 기존 메시 노드는 삭제될 것입니다.

VehicleBody 만들기 (-vehicle)

이 접미사를 가진 메시 노드는 VehicleBody 노드의 자식으로 가져오게 됩니다.

VehicleWheel 만들기 (-wheel)

이 접미사를 가진 메시 노드는 VehicleWheel 노드의 자식으로 가져오게 됩니다.

리지드 바디 (-rigid)

이 메시에서 리지드 바디를 만듭니다.

애니메이션 루프 (-loop, -cycle)

시작과 끝에 "loop"나 "cycle" 표시가 있는 COLLADA 문서에서 애니메이션 클립은 루프 플래그가 설정된 Godot 애니메이션을 가져올 것입니다. 대소문자를 구분하고 하이픈(-)이 필요하지 않습니다.

블렌더에서, 이를 위해 NLA 편집기를 사용하여 Action 이름에 "loop"나 "cycle" 접두사 혹은 접미사를 붙여야 합니다.