16 Bit, bzw. float Texturen
-
Hi!
Hat jemand schon Erfahrungen mit 16 Bit (jeder Farbe besetht aus 2 Byte statt
einem) und/oder float-Texturen gemacht.
Mir geht es da im wesentlichen um bessere Qualität beim Einsatz von
Fragment Programs (aka Pixel Shader und Dx).
-
jo, das läuft nur bei ATI, NV hat da wohl probleme, soll in hardware drinne sein aber die treiber geben sowas nicht frei... jedenfalls ist das bei dem float so.
Imagequality bekommst du nicht wenn du diese formate nur als quelltextur nutzt, da reichen eigentlich auch 32bit RGBA, nutzen hast du ein wenig wenn du z.B. eine shadowmap machen möchtest die nicht auf einen bereich 0.f-1.f begrenzt sein muss sondern (wie float so ist) sich gut anpasst und du somit weder z-fighting noch outofrange befürchten mußt.. wobei auch das möglich ist ;).wenn du viel RenderToTexture nutzt, dann ist das bei extremen multipass vielleicht nützlich aber wirklich spührbar wird das eher durch performance einbussen, zudem gibt es auf grakas keine interpolatoren auf solchen texturen (wären für floats zu teuer) also hast du grundsätzlich erstmal nur PointerFiltering.
was man damit aber gut machen kann ist ein radiosity renderer, du setzt auf eine lichtquelle eine textur deren farbwert weit über 1.f liegt und kannst dann bis in die feinsten naouncen die ausleuchtung iterieren. früher mit dx8 karten hab ich da immer sehr einbussen gehabt, selbst wenn ich nur fürs rendering die texturen in die graka schob und ne float kopie im sys-ram hatte...
man kann mit pixelshadern und float-texturen auch sehr schöne particle bzw fluidsimulationen durchrechnen lassen, hab ich mal ausprobiert in mehreren weisen, optimiert auf cpu hatte ich weniger als 10fps und auf graka lief das mit ~60fps... very impressive.
NVidia macht mit float texturen meines wissens nach auch die dx9 displacementmapping implementation, die rendern erst das tesselieren in die textur und nutzen die dann als vertexbuffer... somit ist schonmal klar dass die texturen wirklich genau sind... blos im treiber haben die das noch net freigegeben *seufz*
es gibt auf der ati seite ein paar demos dazu z.B. die mit shadowmapping, da nutzen die die volle anzahl an möglichen instructions für deren shader.. der liegt im source bei.
rapso->greets();
-
Mein Einsatzgebiet wäre Per Pixel Lighting. Hatte nur die Idee,
dass wenn ich genauere Inputdaten (Normalmap) habe, die
Qualitätseinbußen durch die "Rechenpräzision" der Shader etwas gedämpft werden.Wie dumm das ich keine Ati-Karte habe...
-
eigentlich merkt man das nicht dass eine normalmap nur 32bit RGB(A) ist, weil 1. das filtering noch dazu kommt und 2. das normalisieren. am ende sind die vectoren wirklich qualitativ gut fürs beleuchten. (finde ich) nur wenn du vielleicht 20 passes machst um lichtquellen draufzuaddieren und jede hat nur 0.05f maximalintensität, dann könntest du artefakte sehen... aber das hat ja dann mit dem buffer zu tun in den du renderst und nicht den bumpmaps.
rapso->greets();