Manuals
Manuals




This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English

Komponent Model

Defold jest w swej istocie silnikiem 3D. Nawet gdy pracujesz wyłącznie z materiałami 2D, całe renderowanie odbywa się w 3D, ale jest rzutowane na ekran w projekcji ortograficznej. Defold pozwala korzystać z pełnej zawartości 3D przez dodawanie zasobów 3D, czyli Models, do kolekcji. Możesz budować gry wyłącznie w 3D, używając tylko zasobów 3D, albo łączyć zawartość 3D i 2D według własnych potrzeb.

Tworzenie komponentu modelu

Komponenty modelu tworzy się tak samo jak każdy inny komponent obiektu gry. Możesz to zrobić na dwa sposoby:

  • Utwórz plik Model przez kliknięcie prawym przyciskiem myszy lokalizacji w przeglądarce Assets i wybranie New... ▸ Model.
  • Utwórz komponent osadzony bezpośrednio w obiekcie gry przez kliknięcie prawym przyciskiem myszy obiektu gry w widoku Outline i wybranie Add Component ▸ Model.

Model w obiekcie gry

Gdy model jest już utworzony, musisz określić kilka właściwości:

Właściwości modelu

Oprócz właściwości Id, Position i Rotation istnieją następujące właściwości specyficzne dla komponentu:

Mesh
Ta właściwość powinna wskazywać plik glTF .gltf lub .glb zawierający siatkę, której chcesz użyć. Jeśli plik zawiera cele morfingu, zostaną one zaimportowane razem z siatką. Jeśli plik zawiera wiele siatek, odczytywana jest tylko pierwsza z nich.
Create GO Bones
Zaznacz tę opcję, aby utworzyć obiekt gry dla każdej kości modelu. Takie obiekty gry możesz wykorzystać do dołączania innych obiektów, na przykład broni do kości dłoni.
Skeleton
Ta właściwość powinna wskazywać plik glTF .gltf lub .glb zawierający szkielet używany do animacji. Pamiętaj, że Defold wymaga pojedynczej kości głównej w hierarchii.
Animations
Ustaw tę właściwość na Animation Set File zawierający animacje, których chcesz używać na modelu.
Default Animation
To animacja z zestawu animacji, która będzie automatycznie odtwarzana na modelu.

Oprócz właściwości powyżej będzie też pole, w którym można przypisać materiał do każdej siatki modelu:

Material
Ustaw tę właściwość na materiał, który utworzyłeś i który nadaje się do teksturowanego obiektu 3D. Jako punkt wyjścia możesz wykorzystać kilka wbudowanych materiałów:
  • Use model.material for static non-instanced models
  • Use model_instanced.material for static instanced models
  • Use model_skinned.material for skinned (animated) non-instanced models
  • Use model_skinned_instanced.material for skinned (animated) instanced models

W zależności od materiału będzie dostępna jedna lub więcej właściwości tekstury:

Texture
Ta właściwość powinna wskazywać plik obrazu tekstury, który ma zostać zastosowany do obiektu.

Modyfikowanie w edytorze

Mając komponent modelu na miejscu, możesz swobodnie edytować i przekształcać komponent albo otaczający go obiekt gry za pomocą zwykłych narzędzi Scene Editor, aby przesuwać, obracać i skalować model według własnego uznania.

Modyfikowanie w czasie działania

Możesz manipulować modelami w czasie działania gry za pomocą wielu różnych funkcji i właściwości (zobacz dokumentację API dotyczącą użycia).

Wiggler w grze

Animacja w czasie działania

Defold zapewnia rozbudowane wsparcie dla sterowania animacją w czasie działania gry. Więcej informacji znajdziesz w instrukcji animacji modelu:

local play_properties = { blend_duration = 0.1 }
model.play_anim("#model", "jump", go.PLAYBACK_ONCE_FORWARD, play_properties)

Kursor odtwarzania animacji można animować ręcznie albo za pomocą systemu animacji właściwości:

-- ustaw animację biegu
model.play_anim("#model", "run", go.PLAYBACK_NONE)
-- animuj kursor
go.animate("#model", "cursor", go.PLAYBACK_LOOP_PINGPONG, 1, go.EASING_LINEAR, 10)

Modele mogą też używać animacji celów morfingu z glTF. Wagi celów morfingu są animowane funkcją model.play_anim() tak jak inne animacje modelu, a w czasie działania można je odczytywać lub nadpisywać za pomocą model.get_blend_weights() i model.set_blend_weights(). Szczegóły znajdziesz w sekcji o celach morfingu w instrukcji animacji modeli.

Zmienianie właściwości

Model ma też kilka właściwości, którymi można manipulować za pomocą go.get() i go.set():

animation
Bieżąca animacja modelu (hash) (TYLKO DO ODCZYTU). Animację zmieniasz za pomocą model.play_anim() (zobacz wyżej).
cursor
Znormalizowany kursor animacji (number).
material
Materiał modelu (hash). Możesz go zmieniać za pomocą właściwości zasobu materiału i go.set(). Przykład znajdziesz w dokumentacji API.
playback_rate
Szybkość odtwarzania animacji (number).
textureN
Tekstury modelu, gdzie N ma wartość od 0 do 15 (hash). Możesz odczytywać te właściwości za pomocą go.get() i zmieniać je przy użyciu właściwości zasobu tekstury oraz go.set(). Defold obsługuje najwyżej 16 tekstur na jedno wywołanie rysowania, ale shader może użyć ich mniej na adapterach graficznych z niższym limitem samplerów tekstur.

Materiał

Oprogramowanie 3D zwykle pozwala ustawiać na wierzchołkach obiektu właściwości, takie jak kolor i teksturowanie. Informacje te trafiają do pliku glTF .gltf lub .glb, który eksportujesz z programu 3D. W zależności od potrzeb gry musisz wybrać i/lub utworzyć odpowiednie i wydajne materiały dla swoich obiektów. Materiał łączy programy cieniujące z zestawem parametrów renderowania obiektu.

Istnieje kilka wbudowanych materiałów, których możesz użyć jako punktu wyjścia:

  • Use model.material for static non-instanced models
  • Use model_instanced.material for static instanced models
  • Use model_skinned.material for skinned (animated) non-instanced models
  • Use model_skinned_instanced.material for skinned (animated) instanced models

Wbudowane materiały modeli używają lokalnej przestrzeni wierzchołków. W przypadku modeli ze skinningiem lokalna przestrzeń wierzchołków pozwala shaderowi wierzchołków wykonywać skinning na GPU przy użyciu tekstury macierzy kości; lokalna przestrzeń wierzchołków jest również wymagana do instancjonowania modeli. Własny materiał przeznaczony dla modeli ze skinningiem GPU lub instancjonowanych powinien zatem używać ustawienia przestrzeni wierzchołków Local.

Cache macierzy kości używa tekstury RGBA32F. Jeśli aktywny adapter graficzny nie obsługuje tego formatu tekstury, Defold nie może utworzyć animowanego komponentu Model używającego materiału w przestrzeni lokalnej. W OpenGL ES 2.0 i WebGL 1.0 obsługa zależy więc od rozszerzenia tekstur zmiennoprzecinkowych adaptera. Aby zachować zgodność z adapterem, który go nie ma, użyj własnego materiału w przestrzeni świata; taki materiał wykonuje skinning na CPU i nie pozwala instancjonować modeli. Wymiary cache można dostosować w ustawieniach projektu Model.

Jeśli chcesz tworzyć własne materiały dla modeli, zajrzyj do dokumentacji materiałów, aby uzyskać więcej informacji. Instrukcja shaderów zawiera informacje o tym, jak działają programy cieniujące.

Stałe materiału

Domyślny materiał komponentu typu model posiada stałe, które można zmienić za pomocą funckji go.set() lub go.animate() (więcej szczegółów znajdziesz w instrukcji do materiałów). Przykłady:

go.set("#model", "tint", vmath.vector4(1,0,0,1))
go.animate("#model", "tint", go.PLAYBACK_LOOP_PINGPONG, vmath.vector4(1,0,0,1), go.EASING_LINEAR, 2)
tint
Odcień kolorystyczny modelu (vector4). Wektor typu vector4 służy do reprezentowania odcienia, a składowe x, y, z i w odpowiadają odpowiednio za odcień czerwony, zielony, niebieski i alfa.

Renderowanie

Domyślny skrypt do renderowania jest zaprojektowany specjalnie z myślą o grach 2D i nie działa z modelami 3D. Jednak po skopiowaniu domyślnego skryptu do renderowania i dodaniu kilku linii kodu możesz włączyć renderowanie modeli. Na przykład:


  function init(self)
    self.model_pred = render.predicate({"model"})
    ...
  end

  function update()
    ...
    render.set_depth_mask(true)
    render.enable_state(graphics.STATE_DEPTH_TEST)
    render.set_projection(stretch_projection(-1000, 1000))  -- ortograficzna
    render.draw(self.model_pred)
    render.set_depth_mask(false)
    ...
  end

Szczegóły działania skryptów do renderowania znajdziesz w dokumentacji renderowania.