GridTalk.de

Normale Version: Ein Computerspiel von der Wurzel an mit Gimp, Blender und Godot
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Lange ist es her, im zarten Alter von 15 Jahren programmierte ich eine Art "Asteroids" auf dem vierzeiligen Display eines geliehenen programmierbaren Taschenrechners. Dann folgten ein Labyrinthspiel und Vier Gewinnt auf dem Commodore 64. Auf diese alte Tradition aufbauend dachte ich dieses Jahr, man könnte ja mal wieder nicht nur mit fremder Leute Software Szenen aufbauen, sondern richtig ein Spiel von Grund auf machen.

Dies wird aus Zeitgründen natürlich sehr einfach bleiben, aber ich möchte moderne Methoden und Standards verwenden. Und Open Source soll es sein, also konkret mit dem Trio von Gimp (Texturen), Blender (Meshes), Godot (Game-Engine) erstellbar sein.

[Bild: computerspielk8ku0.jpg]

Heute neu hinzugekommen: Tagesabhängig gefärbter Himmel, einschließlich Sternenhimmel nachts. Nächster Schritt wird sein, die blaue Leere unten durch animiertes Wasser zu ersetzen. Mit etwas Meeresboden wäre dann eine Skybox fertig, die man in der GUI von Godot einfach wie ein beliebiges Objekt in die Szene ziehen kann.

Das "Roboter erschießt Roboter" Setting ist durch Nachprogrammieren eines Tutorials entstanden. Das werde ich längerfristig ins Fantasy-Mittelalter verlagern, wo ich halt schon viele Meshes und Texturen für habe.

Liebe Grüße,
Mareta
Das nachprogrammierte Tutorial habe ich auf GitHub nun "archiviert", also abgeschlossen. Denn das Ergebnis einiger kontaktloser Wochenenden ist nun ein Multiplayer-First-Person-Online... naja, nicht Shooter. Bisher kann man mit einer roten Wolke herumlaufen und das Wetter einstellen. Smile
Weil Godot 4.0 wohl recht starke Änderungen beinhalten wird, lege ich nun die nächsten Monate erst mal den Fokus auf Content, also statische Meshes. Meine in Lizenz gekauften Grafikquellen sind leider nicht in glTF 2.0 (gab's damals noch nicht), und sie enthalten auch keine optimierten Physikmeshes. Also erwartet mich viel Handarbeit in Blender zur Überbrückung der Wartezeit... Rolleyes

---------------------------------
EDIT: Server gelöscht, daher Binärversion nicht mehr verfügbar.
Habe es mal getestet. Na ist ja noch nicht viel, aber das du das hinbekommen hast, klasse. Bin jedenfalls auf die Fortschritte gespannt.Smile
Godot scheint mir recht interessant zu sein und auch ich bin gespannt auf das was noch kommen mag. Ich habe mir den Quellcode mal angeschaut und gesehen, dass du da doch schon recht viel Arbeit reingesteckt hast.

Bei mir klappt es nicht so richtig. Der Start-Bildschirm ist perfekt, aber im Game sehe ich keine rote Wolke, sondern nur den blauen Himmel mit den weissen Wolken und ansonsten schwarzen Boden und schwarze Hügel.

Es hat aber trotzdem Spass gemacht mit den Einstellungen zu spielen und in einer dazu passenden Stimmung die Blitze blitzen und den Donner so richtig krachen zu lassen.
Danke, Pius! Smile

Wegen der Grafikfehler kann ich leider nicht viel Tipps geben, außer eben debuggen mit dem Quellcode. Auf meinem Rechner geht es, sowohl unter Windows als auch unter Linux (Geforce 960). Der schwarze Boden hätte mit Sandtextur gerendert werden müssen, die rote Wolke des eigenen Avatars hätte man gut beim Blick nach unten gesehen. Gerade wegen der fehlenden Avatarwolke vermute ich grundsätzlichere Probleme mit Godot, oder den von mir gewählten Minimalanforderungen, weil ich als Avatarersatz momentan nur eingefärbte Partikel aus den godoteigenen Objekten genommen habe - also gar keine eigenen Meshes oder Texturen.

https://github.com/MaretaDagostino/Hyper...odot/level
https://github.com/MaretaDagostino/Hyper...ts/terrain
https://github.com/MaretaDagostino/Hyper...characters

Bei wem die Grafik korrekt angezeigt wird ... Diese verlinkten Dateien wären die primären Anker, um ohne selber zu coden Content aufzustellen. Level.tscn ist die Szene, sozusagen "Sim". Um die Programmlogik und den Spielinhalt zu trennen, sehe ich den Ordner "level-assets" für die Meshes und Texturen vor. Man könnte also einfach weitere Meshes da reinschmeißen und in der grafischen Godot-Entwicklungsumgebung auf Level.tscn platzieren. In "character.tscn" ist derzeit die Wolke modelliert, da könnte man eine Mesh-Figur reinsetzen. Allerdings habe ich noch keinerlei Code implementiert, um Animationen anzusteuern: Außer einer Bewegungs-Endlosschleife könnte eine solche Puppe derzeit nichts. Immerhin würde sie wie eine Brettspielfigur bewegt. Die Drehungen des Gesamtavatars sind bereits implementiert, auch wenn das bei einer Partikelwolke noch nicht viel hermacht. (Wenn der Avatar sich bewegt, dreht sich der Körper in Blickrichtung.)
Danke für die detaillierten Informationen, Mareta. Wenn ich auf meinem Rechner unter Linux den Sourcecode als Projekt in Godot v3.2.3 importiere und von dort starte, passiert genau dasselbe.

Meine GK ist etwas kleiner bemessen. Ich habe eine NVidia Geforce GTX 660, die noch auf der Kepler GPU Architektur basiert. Ich habe auf diesem Rechner in den vergangenen Monaten recht viel mit Graphik-Software herumgespielt und dabei vielleicht wieder einmal etwas zerschossen. Unter anderem hatte ich im Dezember die NVidia Vulkan Beta Driver installiert.

Der Trigger ist gesetzt Wink Es lässt mir jetzt keine Ruhe mehr und sobald ich genügend Zeit finde, werde ich bestimmt noch herausfinden, woran es liegt.
Nachtrag: auf dem gleichen Rechner im Dual Boot unter Windows 10 läuft es. Jetzt weiss ich wenigstens wie es sein sollte und dass es nicht an der Grafikkarte liegt. Meine fehlgeschlagenen Versuche machte ich unter Ubuntu 20.04.
Das Problem, das ich mit dem Hyperweb-Testgame (Allegria-Game) auf meinem Rechner unter Linux habe, scheint viel komplexer zu sein als ich zunächst erwartet hatte. Nachdem ich mich rund 2 Tage lang damit beschäftigt habe, werde ich es zumindest vorläufig wieder auf Eis legen.

Was auch immer die Ursache für das Problem ist, es handelt sich um ein grenzwertiges Problem, denn es ist mir zweimal gelungen, dass ich das Spiel aus dem Godot Editor heraus fehlerfrei durchlaufen lassen konnte. Es ist mir nach dutzenden Versuchen auch zweimal gelungen das fertig compilierte Allegria-Game.x86_64 aus dem Download von Mareta fehlerfrei zu durchlaufen.

Das Problem geht aber über das Laufzeitverhalten hinaus, denn es zeigt sich schon wenn ich den Quell-Code im Godot Editor lade. Sobald ich das Projekt Hyperweb-Testgame lade werden im Viewport im Level Node die Skybox, der Ground und das Terrain schwarz angezeigt. Einzig der blaue Himmel mit den Wolken wird in der Perspektive richtig angezeigt. Aber auch im Editor wurden mir bis jetzt nach dem Laden des Projektes die Texturen zweimal richtig angezeigt.

Nachdem ich im Ausschlussverfahren mit dem Hyperweb-Testgame Quellcode im Godot Editor verschiedene Versuche durchgeführt habe, kann ich auschliessen, dass das eigentliche Problem im Bereich des Terrain Nodes oder des Avatars, bzw. des Characters (character.tscn) und des Players (Player.tscn) selbst liegt. Diese stellen für sich allein betrachtet kein Problem dar.

Meine Recherchen haben ergeben, dass ich nicht der einzige bin, der mit Godot unter Linux schon ähnliche Phänomene erlebt hat. Eine Lösung habe ich aber keine gefunden. Relevante "Issues" wurden von den Entwicklern geschlossen, weil sie nicht reproduziert werden konnten und diesbezügliche Fragen in Foren wurden gar nicht oder nicht abschliessend beantwortet.

Beim Start von Allegria-Game.x86_64 aus einem Terminalfenster mit dem Parameter --verbose ist mir noch aufgefallen, dass während des Ladens der Resourcen unmittelbar vor dem Laden des Hauptmenüs ein Fehler angezeigt wird:

Code:
$ ./Allegria-Game.x86_64 --verbose
Godot Engine v3.2.3.stable.official - https://godotengine.org
XInput: Refreshing devices.
XInput: No touch devices found.
Detecting GPUs, set DRI_PRIME in the environment to override GPU detection logic.
Only one GPU found, using default.
Using GLES3 video driver
OpenGL ES 3.0 Renderer: GeForce GTX 660/PCIe/SSE2
PulseAudio: detected 2 channels
PulseAudio: audio buffer frames: 512 calculated latency: 11ms

CORE API HASH: 0
EDITOR API HASH: 0
Loading resource: res://internal/Environment.tres
Loading resource: res://internal/Globals.gdc
Loading resource: res://internal/menues/Pause_Popup.tscn
Loading resource: res://internal/Vegur-Regular.otf
Loading resource: res://internal/menues/Debug_Display.tscn
Loading resource: res://internal/menues/Debug_Display.gdc
Loading resource: res://internal/Main.tscn
Loading resource: res://internal/Main.gdc
Loading resource: res://internal/player/Player.tscn
Loading resource: res://internal/player/characters/character.tscn
Loading resource: res://internal/player/Player.gdc
Loading resource: res://level/Level.tscn
Loading resource: res://level-assets/terrain/Terrain.gltf
Loading resource: res://level-assets/terrain/Terrain.material
Loading resource: res://level-assets/terrain/Terrain.png
Loading resource: res://level-assets/terrain/Terrain_ORM.png
Loading resource: res://level-assets/terrain/Terrain_N.png
Loading resource: res://game-assets/textures/GravelGround.png
Loading resource: res://game-assets/Skybox.tscn
Loading resource: res://internal/skybox/Lightning.png
Loading resource: res://internal/skybox/Moon.png
Loading resource: res://internal/skybox/Sky.shader
Loading resource: res://internal/skybox/Clouds.shader
Loading resource: res://internal/skybox/Skybox.gdc
Loading resource: res://internal/skybox/Thunder.wav
Loading resource: res://internal/skybox/Water.material
Loading resource: res://internal/skybox/Water.shader
Loading resource: res://internal/skybox/Water_UV.png
Loading resource: res://internal/skybox/Water_N_A.png
Loading resource: res://internal/skybox/Water_N_B.png
Loading resource: res://internal/skybox/Foam.png
Loading resource: res://internal/skybox/Caustic.png

< =========== HIER KOMMT MITTEN DRIN EIN FEHLER =================>
ERROR: _gl_debug_print: GL ERROR: Source: OpenGL    Type: Error
   ID: 1281 Severity: High    Message: GL_INVALID_VALUE error generated.
   At: drivers/gles3/rasterizer_gles3.cpp:123.

Loading resource: res://internal/menues/Main_Menu.tscn
Loading resource: res://internal/menues/Main_Menu.gdc
Loading resource: res://Title.jpg

< =============== HIER IST DAS SPIEL GELADEN. ===================>
<== DIE FOLGENDEN MELDUNGEN ERSCHEINEN ERST BEIM VERLASSEN DES SPIELS == >

WARNING: cleanup: ObjectDB instances leaked at exit (run with --verbose for details).
   At: core/object.cpp:2135.
Leaked instance: SpatialVelocityTracker:1449
Leaked instance: Camera:1448 - Node name: Camera
Hint: Leaked instances typically happen when nodes are removed from the scene tree (with `remove_child()`) but not freed (with `free()` or `queue_free()`).
Orphan StringName: Camera
Orphan StringName: SpatialVelocityTracker
StringName: 2 unclaimed string names at exit.
Nach meinen Recherchen bedeutet OpenGL Error 1281, dass ein ungültiger Wert an OpenGL übergeben wurde. Meine Vermutung geht jetzt dahin, dass zum Zeitpunkt des Fehlers bereits OpenGL-spezifischer Code ausgeführt wird, der auf Resourcen zugreift, die noch nicht vollständig geladen und initialisiert sind.

Da ich die Probleme vor allem im Zusammenhang mit den Shadern für das Wetter und/oder dem Wasser vermute (alles was mit dem Wasser zu tun hat zu entfernen reichte nicht), werde ich mal die Version 4 von Godot abwarten, die, wenn ich es richtig gelesen habe, im Bereich Skybox Neuigkeiten mitbringt.

Bis dahin werde ich die Zeit nutzen um mich etwas vertiefter mit Godot zu befassen. Den Einblick, den ich jetzt bekommen konnte, war recht beeindruckend und hat mich auf ein paar Ideen gebracht, die ich unbedingt noch ausloten muss.
Wow, das nenne ich mal eine Untersuchung! Smile

Godot selber debuggen kann ich leider auch nicht, alleine schon aus Zeitgründen und weil ich werktags nach der Arbeit zu platt bin, mich weiter tiefschürfend durch fremden Code zu graben. Godot 4.0 wird eine dynamische Skybox mitbringen, so dass sich einiges (vermutlich aber nicht alles) aus der derzeitigen Skybox erübrigt. Außerdem wird die Server-Client-Kommunikation geändert. Beides erfordert grundlegende Überarbeitungen, weshalb ich auch vorher nichts mehr am Testgame weiter code.

Es fehlt ja noch der komplette Content, so dass ich die Zeit gut sinnvoll mit Blender überbrücken kann. Und die Methode Avatare zu importieren ist bisher nur eine vage Idee, geschweige denn einen Discord Gruppenchat in einem Inworld Chatfenster abzuwickeln. Also genug andere Baustellen...

Würde das Programm mal den Level einer Tech-Demo überschreiten, wäre ein richtiges Software-Design nötig, mit UML oder so. Sonst wäre schnell das Chaoslevel "organisch gewachsener Code" erreicht. Und noch eine weitere virtuelle Welt braucht es ja eigentlich auch nicht: Ich sage nur Sinespace (Unity 3D, kommerziell, free to use) oder ViRCadia (Direktimport von Objekten oder Szenen, Open Source, kann selbst gehostet werden), mal sehen wo sich irgendwann mal eine Community bildet. Meins jedenfalls wird eine Tech-Demo bleiben, ich werde nicht versuchen eine weitere Virtuelle-Welten-Software aus dem Boden zu stampfen. Shy