[ZFX Action] Lücken-Zwischen-Den-Assets-Füller

Die ZFX Tool Action. Baue ein Tool für Spieleentwicklung!
Antworten
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

[ZFX Action] Lücken-Zwischen-Den-Assets-Füller

Beitrag von Schrompf »

Ich trage seit einigen Jahren die Idee mit mir herum, das "Prozedurale" an prozeduraler Generierung mal aus dem großen Kontext rauszunehmen und stattdessen auf das kleine Detail loszulassen. Der Gedanke ist, dass der Entwickler / Leveldesigner grob vorgibt "hier Felswand, da Wiese, dort Pfad entlang, da Steintreppe" und die Lib daraus nach Bedarf den Mesh und die Texturen generiert.

Es soll also nicht darum gehen, irgendwelche Level prozedural zu erzeugen, sondern den Leveldesigner machen zu lassen, die Signature Assets einzubinden und dann ... naja... halt den ganzen langweiligen Rest dazwischen bruchfrei wie aus einem Guss zu generieren. Das Ganze später dann auch noch on demand während der Bewegung des Betrachters und genau in dem Detail, das für den Abschnitt nötig ist, damit der Betrachter auf die Entfernung auf dem Bildschirm eine detaillierte Ansicht bekommt. Das ist aber für viel später und ich bin immer noch nicht sicher, ob das überhaupt jemals machbar sein wird.

[edit]Neue Version mit nur SSE4, jetzt mit PDB 7MB groß
http://www.splitterwelten.info/privat/ToolAction.zip (2,1MB, Windows Only)

Links-Klick markiert, Shift-Linksklick wählt hinzu oder ab.
Doppelklick erzeugt einen neuen Punkt auf Nullhöhe und verbindet ihn mit allen erreichbaren nicht-überlappenden Kanten in der Nähe
Rechts-Halten verschiebt auf Bodenhöhe, Shift-Rechts-Halten verschiebt in der Höhe
Entf löscht die ausgewählten Punkte und alle anhängenden Dreiecke
Strg+Z für Undo, Strg+Y für Redo
Mausrad für Zoom, es gibt noch kein Sicht-Drehen
F1 schaltet die Ansicht des Editor-Meshes um, F2 schaltet den generierten Mesh um.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: [ZFX Action] Lücken-Zwischen-Den-Assets-Füller

Beitrag von Schrompf »

Erster Stand: ich habe mein Siedler-Spiel auseinander gerupft und einen minimalen Editor geschrieben, in dem man vorerst nur den Gras-Layer editieren kann. Jetzt funktioniert das ganz gut - ich werde wohl jetzt mal daran gehen, die Flächen ein bissl zu unterteilen und in kleinen Segmenten unzuwrappen, um als ersten Schritt eine Dummy-Rauschtextur draufzuzimmern.
screenshot0001.png
Toll, nich?
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: [ZFX Action] Lücken-Zwischen-Den-Assets-Füller

Beitrag von Schrompf »

Neue Dreiecke erzeugen, indem man irgendwo hin doppelklickt und der automatisch alle sinnvollen Dreiecke in der Nähe dazu erstellt. Außerdem gibt's jetzt ne 10-Zeilen-Version von Undo und Redo, indem ich einfach Lambdas in nem Vektor speichere, von denen jedes ne Kopie der Szene enthält und bei Ausführung mit der aktuellen Szene swappt. Simpel und tatsächlich vollständig funktionsfähig, 15min Programmierdauer.

Der eigentliche Sinn des Tools, nämlich die Mesh- und Texturgenerierung, habe ich noch nicht mal angefangen.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: [ZFX Action] Lücken-Zwischen-Den-Assets-Füller

Beitrag von Schrompf »

Parallele Landschaftsgenerierung während des Editierens. Das Ressourcen-Schubsen von Thread zu Thread mittels Lambdas war echt mühsam.
screenshot0002.png
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: [ZFX Action] Lücken-Zwischen-Den-Assets-Füller

Beitrag von Schrompf »

Einen Tag später als geplant, aber das erste nennenswerte Feature funktioniert: wenn die Wiese zu steil wird, zieht das Tool eine Steilwand ein. Ich habe alle Kombinationsmöglichkeiten abgedeckt, hoffe ich. Nächster Schritt wäre dann das Automatische Unwrappen der entstandenen Polys und das Generieren von Wiese- und Felstextur mit einer gewissen Sonderbehandlung der kantennahen Texel. Mach ich, falls es zu ner "Ich mach weiter am Tool"-Action kommen sollte :-)

Download mach ich gleich, hier erstmal ein Bild
screenshot0004.png
Der entstehende Mesh ist wegen eines Denkfehlers in der "Alle drei Kanten eines Dreiecks brauchen eine Stufe"-Behandlung noch nicht wasserdicht :-(
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
marcgfx
Establishment
Beiträge: 2050
Registriert: 18.10.2010, 23:26

Re: [ZFX Action] Lücken-Zwischen-Den-Assets-Füller

Beitrag von marcgfx »

Coole Sache Schrompf. Hört sich wie ein schönes Tool für Leveldesigner an! Werde es morgen mal testen.

Wozu machst du das?
Parallele Landschaftsgenerierung während des Editierens
Ist die Berechnung so aufwändig, dass es nicht im selben Thread gemacht werden kann? Oder machst du das in weiser Voraussicht für potentielle Erweiterungen?
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: [ZFX Action] Lücken-Zwischen-Den-Assets-Füller

Beitrag von Schrompf »

marcgfx hat geschrieben: 02.07.2019, 01:58Ist die Berechnung so aufwändig, dass es nicht im selben Thread gemacht werden kann? Oder machst du das in weiser Voraussicht für potentielle Erweiterungen?
Für die weiteren Schritte, ja. Aktuell ist das, was da passiert, bzgl. Rechenzeit ziemlich harmlos. War nur kompliziert, alle möglichen Kombinationen von Ecken, Stufen und Kanten abzudecken. Aber was ich das Wochenende eigentlich noch schaffen wollte, war der nächster Schritt, alle so entstandenen Dreiecke zu unwrappen, also Texturplatz zuzuweisen. Und dann werden Texturen generiert, die a) so ein bissl nach Wiese und Felsen aussehen sollen und b) an den Übergängen sinnvoll aussehen sollen. Also so ein bissl Gras noch die Felswand hochwachsen lassen, oder dass ein bissl Grün an der Felsoberkante überhängt.

Das ist ja ganz am Ende die eigentliche Vision: der Leveldesigner gibt die grobe Struktur vor: "hier Wiese, hier Felswand, da soll ein Trampelpfad langgehen". Evtl. wird das eine oder andere kritische Asset noch mit reinplatziert, z.B. ein alter Brunnen. Und dann rechnet das Tool alles dazwischen aus: die Wiese, die Felsen, den Trampelpfad am Brunnen vorbei, ein paar Bäume, einen schlüssigen Übergang des Baums mit Wurzeln in den Boden. Sowas halt. Am Ende soll ein Mesh mit unikater Textur entstehen, der komplett ohne Kanten auskommt, der wie aus einem Guss wirkt. Weil's mir auf die Nerven geht, dass selbst in aktuellen TripleA-Produktionen die Landschaft immer noch wie "Zusammengesteckt" aussieht.

Und ich vermute, dass je nach Texturauflösung die Berechnung dann nicht mehr <1ms dauert, sondern eher mehrere Sekunden.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
marcgfx
Establishment
Beiträge: 2050
Registriert: 18.10.2010, 23:26

Re: [ZFX Action] Lücken-Zwischen-Den-Assets-Füller

Beitrag von marcgfx »

Spannende Idee jedenfalls und vermutlich ziemlich kompliziert. Habs eben testen wollen, leider ist es direkt abgeschmiert (Win 7 64bit)

Vermutlich hilft das wenig:

Code: Alles auswählen

Problemsignatur:
  Problemereignisname:	APPCRASH
  Anwendungsname:	Action7_x64_Release.exe
  Anwendungsversion:	0.0.0.0
  Anwendungszeitstempel:	5d1a75eb
  Fehlermodulname:	Action7_x64_Release.exe
  Fehlermodulversion:	0.0.0.0
  Fehlermodulzeitstempel:	5d1a75eb
  Ausnahmecode:	c000001d
  Ausnahmeoffset:	000000000004addb
  Betriebsystemversion:	6.1.7601.2.1.0.256.48
  Gebietsschema-ID:	2055
  Zusatzinformation 1:	5b17
  Zusatzinformation 2:	5b1792cd512f4206fb9aa956b97c6d3d
  Zusatzinformation 3:	8511
  Zusatzinformation 4:	851113621dd3abb8919cdce2f7116702
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: [ZFX Action] Lücken-Zwischen-Den-Assets-Füller

Beitrag von Schrompf »

Stimmt, das hilft nicht. Aber das Log unter C:\Users\<DeinAccount>\AppData\Roaming\ToolAction könnte helfen. Wobei. Ne, hilft auch nix, weil ich ja diesmal der Downloadgröße wegen keine Debug-Symbole beigelegt habe.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [ZFX Action] Lücken-Zwischen-Den-Assets-Füller

Beitrag von Krishty »

Also ich lasse meine User immer, während die Absturzmeldung noch offen ist, im Task-Manager via Rechtsklick auf den Prozess einen Dump erzeugen und mir zuschicken. Da ich alle Debug-Symbole bei mir aufbewahre, kann ich den Dump in Visual Studio öffnen und debuggen (wenn auch nur statisch).
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: [ZFX Action] Lücken-Zwischen-Den-Assets-Füller

Beitrag von Schrompf »

Ich hatte auch mal im Code irgendwas eingestellt, so dass ein Minidump erzeugt und in das Log-Verzeichnis gelegt wird. Aber hab ich für das Minitool nicht gemacht. Die Idee, das über den Taskmanager zu machen, ist auch super
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
marcgfx
Establishment
Beiträge: 2050
Registriert: 18.10.2010, 23:26

Re: [ZFX Action] Lücken-Zwischen-Den-Assets-Füller

Beitrag von marcgfx »

http://www.falkenbrew.com.s3.amazonaws. ... elease.DMP
200mb dump... lösche es wieder wenn du es hast, oder es nichts bringt
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: [ZFX Action] Lücken-Zwischen-Den-Assets-Füller

Beitrag von Schrompf »

Falls der Dump stimmt, ist ein Bitshift gecrasht. Ein Bitshift! Kann das sein, dass C:\Users\<DeinAccount>\AppData\Roaming\ToolAction\tool.log etwas von "Illegal Instruction" erzählt und einfach dein Prozessor vor... pff... keine Ahnung... 2011 gebaut wurde? Dass Du einfach kein SSE4 kannst?
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [ZFX Action] Lücken-Zwischen-Den-Assets-Füller

Beitrag von Krishty »

Meine CPU stammt von lange vor 2011

Beim Start sofort
Unhandled exception at 0x000000013F19C94D in Action7_x64_Release.exe: 0xC000001D: Illegal Instruction.

Adresse: 000000013F19C94D C5 FC 10 00 vmovups ymm0,ymmword ptr [rax]

Ich würde ja jetzt sagen: Prüf das beim Starten und zeig ggf. eine MessageBox "CPU zu alt" an, aber du hast nun mein Beileid, dass Microsoft die AVX-API derart verkackt hat, dass du dafür sowas machen müsstest: https://docs.microsoft.com/en-us/window ... te-context *spuck*
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: [ZFX Action] Lücken-Zwischen-Den-Assets-Füller

Beitrag von Schrompf »

Krasser Stuhlgang. Nuja, für den Moment schraub ich das Instruction Set einfach runter. Aber hier und da benutze ich schon ganz gerne mal zumindest SSE4, weil so banale Sachen wie popcnt() / clz() aus unerfindlichen Gründen erst extrem spät ins Instruction Set gekommen sind.

So nen riesigen Budenzauber, nur um am Anfang dann ein Fehler-Popup anstatt eines Crashes zu präsentieren, mach ich jedenfalls nicht. Irgendwann später mal schieb ich alles missionskritische in ne DLL und lade zur Laufzeit je nach Prozessor-Features eine davon nach.

[edit] Aktualisierte Version mit nur SSE4 (glaube ich) unter dem Link im Startbeitrag.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [ZFX Action] Lücken-Zwischen-Den-Assets-Füller

Beitrag von Krishty »

Schrompf hat geschrieben: 06.07.2019, 13:12Aber hier und da benutze ich schon ganz gerne mal zumindest SSE4, weil so banale Sachen wie popcnt() / clz() aus unerfindlichen Gründen erst extrem spät ins Instruction Set gekommen sind.
CLZ gibt es seit den 80ern implizit via Bit Scan Reverse (BSR), jedoch ist das Ergebnis der Index des höchstwertigen Bits und für Null undefiniert. Die SSE4-Version definiert ein Ergebnis für Null und invertiert die Nummerierung, ansonsten ist sie gleich. Falls dich der eine Sprung nicht umbringt, brauchst du also zumindest dafür kein SSE4.

Code: Alles auswählen

// Counts consecutive zero bits in the integer, starting with the most significant bit.
//  • returns “32” for zero
unsigned int countLeadingZeroBits(unsigned int const x) {
	// • x86 has hardware support via BSR (Bit Scan Reverse)

#	if _MSC_VER

		// • BSR is available via “_BitScanReverse()” intrinsic
		// • result is undefined for zero
		// • sets the zero flag, though (return value of the intrinsic) – saves a comparison over “if(0 == x)”
		unsigned long result;
		if(_BitScanReverse(&result, x)) {
			return 31 ^ result; // SUB requires a MOV for the constant while XOR supports immediate operands
		} else {
			return 32;
		}

#	elif __clang__ || __GNUC__

		// • BSR is used by the “__builtin_clz()” built-in
		// • undefined for zero
		if(0 == x) {
			return 32;
		} else {
			return __builtin_clz(x);
		}

#	endif
}
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
scheichs
Establishment
Beiträge: 845
Registriert: 28.07.2010, 20:18

Re: [ZFX Action] Lücken-Zwischen-Den-Assets-Füller

Beitrag von scheichs »

Also bei mir läuft es. Die Grundidee finde ich auch hier ziemlich genial und würde bei passender Umsetung sicher einiges an mühevoller Fleissarbeit einsparen. So richtig habe ich die Bedienung des Tool aber nicht verstanden. Jedenfalls habe ich nicht annähernd ein Ergebnis wie auf deinen Bildern hinbekommen.
Antworten