Sanity check: "Skin-fähige" Retro-Sprites

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4254
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Sanity check: "Skin-fähige" Retro-Sprites

Beitrag von Chromanoid »

Hallo zusammen,
ich spiele in Gedanken mit einer Spielidee und frage mich, ob folgendes möglich ist, oder ob da Texture-Mapping, Rastering o.Ä. in die Quere kommt. Bevor ich das ausprobiere, dachte ich, ich frage einfach mal :)

1. Ich habe ein 3D-Modell. Das Modell rendere ich vorab als Sprite so, dass statt Farben Texturkoordinaten (kodiert als Farben) ausgespuckt werden.
2. Ich rendere den Sprite nun unter Zuhilfenahme einer Textur für das ursprüngliche 3D-Modell ohne Interpolation auf Basis der Texturkoordinaten, die in der Sprite-Grafik kodiert sind.
3. Ich habe nun einen "Skin-fähigen" Sprite, der zwar retromäßig aber sehr vielfältig aussehen kann, wenn ich entsprechende Texturen vorsehe???

Vielen Dank und viele Grüße!
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

Re: Sanity check: "Skin-fähige" Retro-Sprites

Beitrag von Spiele Programmierer »

Ich denke, da spricht grundsätzlich nichts dagegen.
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4254
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Sanity check: "Skin-fähige" Retro-Sprites

Beitrag von Chromanoid »

Supi, vielen Dank!

Dann gleich die nächste Frage: gleiches Prinzip nur für "Deferred Texturing" - also für 3D-Modelle einfach UV-Koordinaten und Materialnummer im Shader raushauen. Dann nacheinander die Materialien-Texturatlasse abklappern (falls man mehrere hat) und aufhören bis keine "unbekannten" Materialien mehr da sind (rauskriegen über Counter oder Query-Objects oder so).

Edit: Ahh, hab da bei "Deferred Texturing" tatsächlich was gefunden: https://mynameismjp.wordpress.com/2016/ ... nd-decals/
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

Re: Sanity check: "Skin-fähige" Retro-Sprites

Beitrag von Spiele Programmierer »

Hm, da weiß ich jetzt nicht genau wie du dir das mit Counter/Query-Objekte vorstellst.

Aber rein theoretisch kann man sicherlich alles so indirekt rendern. Ich denke, dafür sollte man am besten einen/wenige große Texturatlanten/Texturarrays verwenden oder eben mit Bindless Textures wie in deinem Link.

Ich frage mich aber, ob das eine gute Idee ist. Wenn du sehr viel Overdraw hast, wo du die selbe Stelle immer wieder neu renderst kann, man damit wahrscheinlich einige Bandbreite sparen, aber ich denke normalerweise ist es wahrscheinlich effektiver das Overdraw-Problem selbst zu lösen.
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: Sanity check: "Skin-fähige" Retro-Sprites

Beitrag von xq »

Grundlegend spricht nix gegen die Idee, aber! Denk dran, dass du tierische Aliasing-Probleme bekommst, da jeder Pixel nur eine einzige Texturkoordinate speichert, du aber eigentlich in so einem Fall eine MSAA/SSAA-Lösung haben möchtest, welche mehr als eine Texturkoordinate speichert und sampled. Ich würde hier eher die Sprites für jeden Character pre-rendern, das dürfte relativ flott gehen, auch wenn du Animationen brauchst.

Ich hab das ganze hier mal visualisiert: Flat Rendering (32²), UV Restoration (32²) (das wäre dein Vorschlag) und das ganze mit 4×4 SSAA:


Damit bekommst du eben auch schönes Alpha-Blending für Sprites, falls du das willst.
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

Re: Sanity check: "Skin-fähige" Retro-Sprites

Beitrag von Spiele Programmierer »

Man kann auch eine echte Multisampling-Textur nehmen. Zum Beispiel in OpenGL mit GL_ARB_texture_storage_multisample, was seit 4.3 zwingend unterstützt wird.
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4254
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Sanity check: "Skin-fähige" Retro-Sprites

Beitrag von Chromanoid »

Coole Ideen, Danke für die Darstellung!

Was ist das für ein cooles Tool? Auch haben will. Ich glaube ich lebe hinter dem Mond :D

Ich mache mir ein bisschen Gedanken darüber (auch aus Spaß, ansonsten wäre das premature optimization :)), wie man bei einer Retro-Darstellung möglichst viel Platz (auch auf mobilen Endgeräten) für unterschiedlichste humanoide Sprites inkl. Animationen rausholen kann (mindestens die traditionellen Egoshooter Richtungen der 90er ⬆⬇↘↗➡, aber schräg von oben hätte ich vielleicht auch gerne). Andere Ideen sind noch Paletten um dann weniger Bits pro Spritesheet zu brauchen...

An pre-rendern habe ich auch schon gedacht. Ich stelle mir nur die Verwaltung Horror vor (also dynamisch je nach Kleidung der NPCs irgendwas zur Laufzeit nachrendern etc.). Irgendwann habe ich mal so eine Art 3D-zu-2D-Mesh-Converter gebaut. Sowas könnte man dann vielleicht auch machen, wenn die Original-3D-Modelle zu heftig fürs nebenläufige Rendern auf dem Smartphone sind... Auf der anderen Seite sind Morph-Targets, Bones usw. natürlich auch ziemlich chic und man hat sofort mehr Vielfalt...

Eigentlich habe ich vor, mal zu versuchen Tools wie DazCentral, MakeHuman oder Poser zu benutzen, um einen Großteil der NPC-Grafiken für wenig Arbeit zu bekommen...
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: Sanity check: "Skin-fähige" Retro-Sprites

Beitrag von xq »

Chromanoid hat geschrieben: 28.09.2020, 23:33 Coole Ideen, Danke für die Darstellung!
You're welcome! Hat auch echt Spaß gemacht, das kurz zusammenzufrickeln
Chromanoid hat geschrieben: 28.09.2020, 23:33 Was ist das für ein cooles Tool? Auch haben will. Ich glaube ich lebe hinter dem Mond :D
Das ist meine CG Workbench, ein Multifunktionstool um genau solche Fragen schnell beantworten zu können. Du kannst Shader, Resourcen und anderen Kram zusammenknoten und daraus kurz einen Prototyp für einen Effekt schaffen. Wurde ursprünglich als Demotool entwickelt, ist aber mittlerweile mehr ein Allzweck-Tool für solche Prototypen. Wenn ich die nächsten Tage etwas Zeit finde, richte ich auch endlich mal das Github CI dafür ein, dann gibts dafür endlich mal wieder Linux- und Windows-Builds zum Download
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
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: Sanity check: "Skin-fähige" Retro-Sprites

Beitrag von Schrompf »

Vielleicht einfach in nen Texturatlas minigroß rendern und dann ohne ohne Filter groß auf den Screen pappen? Dann kriegst Du Riesenpixel, aber pro Pixel die volle Wucht "ausgerenderter" Features wie früher. Oder groß ausrendern, 1:X kleinzoomen, und das dann wieder ungefiltert großzoomen. Dann kriegst Du auch noch smoothe Alphablend-Ränder
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4254
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Sanity check: "Skin-fähige" Retro-Sprites

Beitrag von Chromanoid »

xq hat geschrieben: 29.09.2020, 11:59 You're welcome! Hat auch echt Spaß gemacht, das kurz zusammenzufrickeln
Kannst Du mir Dein Experiment zur Verfügung stellen, wenn ich mir das Tool installiere?
xq hat geschrieben: 29.09.2020, 11:59Wenn ich die nächsten Tage etwas Zeit finde, richte ich auch endlich mal das Github CI dafür ein, dann gibts dafür endlich mal wieder Linux- und Windows-Builds zum Download
Apropos Build des Tools: gibt es für Zig einen Wrapper zum automatischen Installieren der Zig-Build-Umgebung, wenn man das Ding noch nicht installiert hat? Das kenne ich von Gradle (https://docs.gradle.org/current/usergui ... apper.html) und für Maven gibt's das jetzt glaube ich auch. Und bestimmt auch noch bei ein paar anderen Build-Systemen. Wenn ja, wäre es cool, wenn Du den committen kannst :D

Wenn Du Dich mit der Distribution beschäftigst, fände ich ein chocolatey-Package sehr schön :) Keine Ahnung wie's mit winget steht...Das habe ich noch nie benutzt.
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: Sanity check: "Skin-fähige" Retro-Sprites

Beitrag von xq »

Chromanoid hat geschrieben: 30.09.2020, 15:50 Kannst Du mir Dein Experiment zur Verfügung stellen, wenn ich mir das Tool installiere?
Jo, kann ich machen. Wirst halt erst mal Pfade anpassen müssen, das nutzt grade überall absolute Pfade. Oder ich fixe das endlich und sorge dafür, dass die Daten in dem Projektfile einfach embedded werden (also die Bild- und Modelldaten)
Chromanoid hat geschrieben: 30.09.2020, 15:50 Apropos Build des Tools: gibt es für Zig einen Wrapper zum automatischen Installieren der Zig-Build-Umgebung, wenn man das Ding noch nicht installiert hat? Das kenne ich von Gradle (https://docs.gradle.org/current/usergui ... apper.html) und für Maven gibt's das jetzt glaube ich auch. Und bestimmt auch noch bei ein paar anderen Build-Systemen. Wenn ja, wäre es cool, wenn Du den committen kannst :D
Zig kannste hier https://ziglang.org/download/ als master-Build Download runterladen, und damit hat sich das eigentlich schon. Nen Update wäre "alten ordner löschen, neue zip entpacken". Ich selber nutz dafür nen kleines Script, was das tut, aber das läuft halt auch nur auf meinem System. Gibt aber afaik Leute, die sich schon darum gekümmert haben (https://github.com/marler8997/zigup, https://github.com/yamirui/zup)
Chromanoid hat geschrieben: 30.09.2020, 15:50 Wenn Du Dich mit der Distribution beschäftigst, fände ich ein chocolatey-Package sehr schön :) Keine Ahnung wie's mit winget steht...Das habe ich noch nie benutzt.
Örm, für was jetzt? Mein Tool oder Zig? :D KÖnnen das auch gerne in nen eigenen Thread abspalten, hat ja mit dem eigentlichen Thema nix mehr zu tun
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Antworten