[DX9] Cubemap Koordinaten in 2D umrechnen

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
Zudomon
Establishment
Beiträge: 2254
Registriert: 25.03.2009, 07:20
Kontaktdaten:

[DX9] Cubemap Koordinaten in 2D umrechnen

Beitrag von Zudomon »

Um mein "Sternen-Objekt" zu optimieren, würde ich gerne schon beim generieren schauen, ob in der Cubemap, die ich verwende und welche auf GPU erzeugt wird, Nebel vorhanden ist um dann die Sterne entsprechend dicht zu erzeugen.
Da ich ziemlich viel Speicher verbrauche und nun auf Suche gegangen bin, hab ich gesehen, dass vor allem die Sterne ziemlich viel brauchen, weil ich diese sehr dicht erzeuge und dann im Shader da weg blende, wo kein Nebel ist (zumindest so, dass sie da weniger Dicht erscheinen).

Nun hab ich mir gedacht, ich lade die Cubemap auf CPU runter, soweit bin ich auch schon. Nun müsste ich aus den 6 x 2D Texturen die Richtige Stelle sampeln. Also müsste ich die Richtung, die der Stern hat und die eigentlich direkt aus der Cubemap gelesen würde, auf die 6 Texturen ungemappt werden. Weiß jemand wie das geht? Ich meine vor vielleicht 2 Wochen oder so mal was in der Richtung gesehen zu haben und da war es wohl ganz einfach. Aber ich kann mich nicht mehr erinnern und würde mir da Mathematisch ganz schön einen abbrechen.
Benutzeravatar
Krishty
Establishment
Beiträge: 8237
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [DX9] Cubemap Koordinaten in 2D umrechnen

Beitrag von Krishty »

Eigentlich sehr einfach:

Du findest zuerst die Komponente mit dem größten Betrag, also max(abs(x), abs(y), abs(z)). Diese Komponente gibt die Würfelfläche vor, also bei D3D AFAIK die erste Fläche für +X, dann -X, usw.

Um auf dieser Fläche die 2D-Koordinaten zu berechnen teilst du die anderen beiden Koordinaten durch diese größte Koordinate. Dann erhälst du was von -1 bis +1, und das mappst du auf die Texel. Wie die einzelnen Flächen jetzt rotiert sind, (ob auf der Y-Fläche die Hochachse X oder Z bedeutet) musst du in der MSDN nachforschen.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Zudomon
Establishment
Beiträge: 2254
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [DX9] Cubemap Koordinaten in 2D umrechnen

Beitrag von Zudomon »

Wow! Das hört sich wirklich einfach an. Ja letzteres denke ich dann, lässt sich durch try&error schnell raus bekommen. Danke! :D
Benutzeravatar
Zudomon
Establishment
Beiträge: 2254
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [DX9] Cubemap Koordinaten in 2D umrechnen

Beitrag von Zudomon »

:o
Ich habe mich gerade dran gesetzt und es hat ALLES auf Anhieb geklappt... das ist erschreckend unheimlich!
Also wie du sagst, absolute größte Koordinate, finden. Damit hat man schon mal X, Y und Z. Am einfachsten geht dies, wenn man X, Y, Z schon mit 0, 1, 2 als Vektor nummeriert hat. Dann einfach für die Seite mal 2 rechnen und falls die Koordinate negativ ist noch 1 addieren für die Würfelseite. Für die Texturkoordinate alle Werte teilen, das ganze *0.5+0.5 und bei X: ZY, Y: XZ und Z: XY benutzen. Ich dachte, da müsste man dann noch was spiegeln oder so, man muss ja immer ein bisschen fuckeln, bis das bei den Cubemap passt. Aber hier war es das schon. Krass.

Jetzt muss ich das nur noch umbiegen, damit das bei der Objekterstellung mit einfließt. Ich hoffe mal, dass das auch so Reibungslos klappt.

Testweise hatte ich nun die Cubemap in einzelne 2D-Texturen geschrieben, die dann ausgelesen und Zufallssterne generiert als 3D Vektoren. Diese werden dann auf die Texturen umgemappt. Da wird dann die Helligkeit ermittelt und dann mit einem Zufallswert verglichen. Ist der Test positiv, wird dann der Stern in die Textur geschrieben. Damit das nicht so übersteuert und ich noch was vom Nebel sehen kann, nur mit schwacher Helligkeit. Hier noch ein Bild von dem Ergebnis... eine Seite als repräsentatives Beispiel:
space0.jpg
Benutzeravatar
Zudomon
Establishment
Beiträge: 2254
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [DX9] Cubemap Koordinaten in 2D umrechnen

Beitrag von Zudomon »

Das ganze für die Sternenkugel klappt irgendwie noch nicht... wahrscheinlich muss ich da jetzt doch irgendwo was vertauschen. Also doch fuckeln... :D

Bei einem Standbild sieht man schlecht, dass die Sterne nicht bündig sind. Aber am Himmel sieht man auch, dass die Sterne nicht zum Nebel passen.
20151029_2.jpg
Benutzeravatar
Zudomon
Establishment
Beiträge: 2254
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [DX9] Cubemap Koordinaten in 2D umrechnen

Beitrag von Zudomon »

Gut, nun klappt es... aber ich musste seltsamerweise wirklich ein paar Koordinaten flippen...

Überall wo die "1-" vor steht.

Code: Alles auswählen

  case _f of
    0: begin sx:=1-(_dir.z*cm+0.5); sy:=1-(_dir.y*cm+0.5); end;
    1: begin sx:=1-(_dir.z*cm+0.5); sy:=  (_dir.y*cm+0.5); end;   
    2: begin sx:=  (_dir.x*cm+0.5); sy:=  (_dir.z*cm+0.5); end;
    3: begin sx:=1-(_dir.x*cm+0.5); sy:=  (_dir.z*cm+0.5); end;
    4: begin sx:=  (_dir.x*cm+0.5); sy:=1-(_dir.y*cm+0.5); end;  
    5: begin sx:=  (_dir.x*cm+0.5); sy:=  (_dir.y*cm+0.5); end;
  end;
20151029_4.jpg
Danke nochmal Krishty für die schnelle Antwort zu Anfang! :D
Antworten