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
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.
Komponenty modelu tworzy się tak samo jak każdy inny komponent obiektu gry. Możesz to zrobić na dwa sposoby:

Gdy model jest już utworzony, musisz określić kilka właściwości:
Oprócz właściwości Id, Position i Rotation istnieją następujące właściwości specyficzne dla komponentu:
Oprócz właściwości powyżej będzie też pole, w którym można przypisać materiał do każdej siatki modelu:
W zależności od materiału będzie dostępna jedna lub więcej właściwości tekstury:
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.
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).

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.
Model ma też kilka właściwości, którymi można manipulować za pomocą go.get() i go.set():
animationhash) (TYLKO DO ODCZYTU). Animację zmieniasz za pomocą model.play_anim() (zobacz wyżej).cursornumber).materialhash). Możesz go zmieniać za pomocą właściwości zasobu materiału i go.set(). Przykład znajdziesz w dokumentacji API.playback_ratenumber).textureNhash). 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.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:
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.
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)
tintvector4). 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.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.