Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Schorsch

Supermoderator

  • »Schorsch« ist der Autor dieses Themas

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

1

02.01.2011, 15:53

SNES Shader

Hey,
ich hatte mal drüber nachgedacht einen Super Nintendo Shader zu schreiben. war im Zuge eines Zelda Remakes mit einem Bekannten gedacht. Die Farbpalette vom Snes bekommt man ja bei Google. Habe nur keine gute Methode gefunden die Farben sinnvoll zu mappen. Die Werte liegen nicht so schön beieinander, als dass ich eine schöne Einteilung gefunden hätte. Vielleicht hat ja hier Jemand ne sinnvolle Idee zu dem Thema.
Also Ergebnis soll sein, dass ein Spiel einfach die Farben der Snes Farbpalette benutzt. der Rest bleibt gleich.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

2

02.01.2011, 16:47

du hast also eine ausgangsfarbe und willst die SNES-farbe haben? ein bisschen genauer beschreiben bitte^^

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

02.01.2011, 18:19

Du willst 24 Bit auf SNES mappen? Das könnte in der Tat kniffelig werden, denn du bräuchtest dafür eine Tabelle mit 256³ Keys, die auf 256 Values mapped. Dass das technisch zu viel ist ist offensichtlich. Mal ganz davon abgesehen, dass so eine Tabelle irgendwie erstellt werden müsste. Mit reiner Rechen-Vorschrift wird es jedenfalls vermutlich nicht gehen.
Vielleicht habe ich auch falsch verstanden, was genau du vor hast?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

02.01.2011, 22:58

Wo genau liegt das Problem einfach die Grafiken nur in den entsprechenden Farben zu machen!?
Ansonsten werfe ich mal die Idee in den Raum deine Farben z.B. in den HSV Farbraum zu transformieren. Dort kann man vielleich einfacher die nächstgelegene Tabellenfarbe bestimmen, evtl. kann man sogar einfach eine LUT definieren...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (02.01.2011, 23:03)


Schorsch

Supermoderator

  • »Schorsch« ist der Autor dieses Themas

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

5

04.01.2011, 10:11

Nochmal zur Idee:
Ich habe irgendeine Anwendung und jeder Pixel soll Postscreen bearbeitet werden und eine Farbe aus der Snes Farbpalette bekommen.

Naja mein erster Ansatz war halt mir die Farbwerte der Snes Farbtabelle mal irgendwie zu sortieren. Einfach nach RGB-Werten. Habe mehrmals versucht neu einzuteilen und bin am Ende dann mit dieser Idee gescheitert. Habe halt überlegt ob man nicht irgendwelche Schwellenwerte finden kann, zwischen denen alle Werte auf eine bestimmte Farbe gemapt werden. Aber wie gesagt mit der Idee bin ich nicht sehr weit gekommen.
Naja von einer LUT hat BlueCobold ja auch schon gesprochen, aber wie auch er schon sagte werden das einfach zu viele Keys. Wie mir der HSV Farbraum weiterhelfen könnte weiß ich nicht. Bin aber auch kein Farb- oder Grafikprofi. Vielleicht fällt ja jemandem noch was ein. Ansonsten ists wohl ein Problem ohne praktikable Lösung;)
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

04.01.2011, 10:50

Naja von einer LUT hat BlueCobold ja auch schon gesprochen, aber wie auch er schon sagte werden das einfach zu viele Keys.

Naja, so wie ich dich verstanden habe fällt es in RGB schwer die Farben klar zu trennen. Was du willst ist im Prinzip jede beliebige RGB Farbe auf die "näheste" Farbe aus der Palette zu mappen. Das kannst du z.B. machen indem du einfach den euklidischen Abstand deiner Farbe zu allen Palettenfarben berechnest und dann die näheste Palettenfarbe nimmst. Natürlich ist das sehr einfach aber nicht wirklich die unbedingt beste Lösung. Wenn du für alle möglichen inputs einen Eintrag in einer LUT willst dann wird das natürlich ziemlich groß (64MB nur für die LUT) aber wenn man bedenkt dass aktuelle Grafikkarten über 512MB VRAM und mehr verfügen ist dieser einfachste evtl. sogar auch ein gangbarer Weg. Abgesehen davon kannst du den Lookup aufspalten in Farbe->Palettenindex + Palettenindex->Farbe und brauchst dann nurmehr 16MB + 1KB. Mein Vorschlag basiert jedenfalls auf der Vermutung dass du in einem anderen Farbraum (z.B. HSV oder CIE L*a*b) genau das evtl. gerade nicht machen musst. Vielleicht kannst du z.B. in HSV die Farben klarer trennen und dann z.B. eine 3D Texture mit weitaus geringerer Größe als 256³ (bereits 128³ braucht schon nurmehr 8MB bzw. 2MB + 1KB und wäre damit wohl schon sehr praktikabel) und Nearest Neighbour Filtering verwenden um ganze quaderförmige Bereiche des Input Farbraumes auf eine Farbe zu mappen. Ist wie gesagt eben nurmal eine Idee, ka inwiefern das wirklich was bringt. Wenn du dann z.B. auch noch Dithering willst wirds natürlich nochmal um einiges komplexer. Aber machbar ist es sicher.

Dieser Beitrag wurde bereits 10 mal editiert, zuletzt von »dot« (04.01.2011, 11:15)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

04.01.2011, 11:20

Wenn du für alle möglichen inputs einen Eintrag in einer LUT willst dann wird das natürlich ziemlich groß (64MB nur für die LUT) .

Wie kommst du denn auf 64MB?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

04.01.2011, 11:24

256*256*256*4 Bytes = 64MB wenn ich mich nicht verrechnet hab. Das ist natürlich schon sehr groß aber technisch machbar ist es definitiv ;)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

04.01.2011, 11:27

Und wieso *4?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

04.01.2011, 11:31

Weil wir ein RGB Triplet auf einen RGBA Wert mappen wollen!? Natürlich könnte man ein nur RGB Format für die LUT wählen nur wär ich mir nicht so sicher ob die Grafikkarte wegen Alignment etc. nicht so oder so 4 Bytes pro Voxel macht wie bei 2D Texturen normalerweise auch...

Werbeanzeige