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

  • »Wümpftlbrümpftl« ist der Autor dieses Themas

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

1

02.01.2007, 12:03

PerPixel-Specular-Lighting mit PS1.x möglich?

Ich wollte meine Shader mal ein bischen Pöbelfreundlicher machen. Daher hab ich auf Shader 1.1 umgeschrieben soweit möglich. Nur beim Specularlighting scheitere ich.

Denn ich hab bisher die Anweisung pow (hlsl) im Pixelshader gebraucht um die Specularfarbe auszurechnen. Die gibts aber dort erst ab 2.0.
Die Specularfarbe im VS auszurechnen und den Rest im PS erscheint mir nicht gut, da ich bei der Specular berechnung ja auch schon die Lichtintensität brauche. Und die berechne ich ja normal im Pixelshader ... eben damit das ganze PerPixel wird.

Ich hoffe das ich nicht zuviel schmarrn erzählt hab :)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

02.01.2007, 12:25

Hi,

ja, pow gibt es nicht.
Du musst die Potenz per Hand ausrechnen, z.B. für

C-/C++-Quelltext

1
y = pow(x, 8);


einfach schreiben:

C-/C++-Quelltext

1
2
3
y = x * x; // y = x^2

y *= y;    // y = x^4

y *= y;    // y = x^8


Natürlich bist du dann auf einen bestimmten Exponenten festgelegt, aber es geht. Habe ich auch mal so gemacht.

Vielleicht könntest du auch eine Textur als LookUp-Tabelle benutzen. Da bin ich aber nicht sicher, ob das mit PS 1.1 geht, weil die Texturadressierung da sehr beschränkt ist.

Da du insgesamt aber höchstwahrscheinlich zu viele Instruktionen für ein PS 1.1-Programm hast, musst du den Specular-Pass separat rendern (mit Alpha-Blending ONE, ONE hinzuaddieren).

  • »Wümpftlbrümpftl« ist der Autor dieses Themas

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

3

02.01.2007, 21:09

ohhh :(

Dann werd ich lieber PerVertex als Alternative anbieten, weil ich den Exponent, also die "Reflexionsstärke" variabel halten will.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

03.01.2007, 10:56

Du könntest auch mehrere Shader machen, z.B. einen für Exponent 1, einen für 2, 3, 4, ...

Und wenn du auf PS 1.2 umsteigst, könntest du vielleicht die Instruktion texdp3tex nutzen, um eine Lookup-Textur anzusprechen.

Werbeanzeige