ein problem bei shadow volume rendering
-
otze schrieb:
4. isn ganz einfacher test:Es wird einfach eine linie zwischen Objekt und licht benutzt(was bedeuted, dass die linie im fall des directional lights unendlich lang ist). Dann wird einfach an der Länge der linie getestet ob die linie länger als die maximale aufhellungsweite des Lichts ist.
Im falle des spotlights wird danach noch getestet, ob der lichtkegel in richtung des Objekts zeigt.
Das war alles.spricht: entfernungstest
otze schrieb:
5. achne, soweit bin ich auch schon, dass ich sone kollision hinbekomme:
octree anschalten testen ob linie den octree trifft,dann rekursiv weiter durchtesten,bis man dann testen kann, ob die linie ein Dreieck trifft.6. dasselbe wie 5,nur deutlich mehr tests,wenns zu langsam ist, kommts unter den menüpunkt"realistische Schatten"
und weil das zu langsam ist, nimmt man eben shadowvolumes.
zu 7.im endeffekt ergibt das trotzdem eine geschlossene Siluette,denn wenn du immer eine edge extrudest, kommst du im endeffekt immer an eine siluette.
ja genau, der algorithmus ist nur trivialer, sehr effektiv und kann sogar pure im vertexshader implementiert werden.
btw: shadow volumes sind nicht dafür da herauszufinden, ob ein Objekt einen schatten auf ein andres Objekt wirft,Shadow volumes sind nur dafür da,um Schatten zu zeichnen.
doch, schadowvolumes sind dafür da, um herauszufinden welches objekte bzw welche pixel jedes objektes innerhalb oder außerhalb eines schattens sind. dann beleuchtet man einfach alles außerhalb der schattenvolumes und so ganz nebenbei siehst du die schatten.
rapso->greets();
-
*schulterzuck* ich wollte eigentlich die shadow volumes zum schluss in den stencil buffer rendern(dh also sie hinterlassen nirgendwo sonst ihre spur) und diese spur dann in den zbuffer über einen weiteren rendervorgang übertragen.
wie würde das denn mit shadern gemacht werden? gibts deutsche links dazu? oder auch generell deutsche links als einführung in die shader?Ich hab bei google nichts gutes gefunden, und als einstieg in ein neues thema trau ich mich nicht ans englische ran,aus verständnisgründen etc.
-
du kannst ein flag setzen für den stencilbuffer, z.b. dass durt wo der gesetzt ist (also im schatten), dass dort kein pixel gesetzt wird. so kannst du die beleuchteten dinge leicht in den colorbuffer zeichnen. (so ist das auch eigentlich gedacht mit dem stencilbuffer, übertragungen in den zbuffer gibt es da eigentlich nicht)
rapso->greets();
-
damit sind doch aber nur komplett schwarze schatten möglich oder?
gibts auch einfach die möglichkeit an der stelle nur den stencil buffer zu erhöhen? dann wären sogar schattierungen beim überlappen von Schatten möglich
-
ja, wären so schwarz wie da: http://www.doom3.com/images/screenshots/04.jpg
das ist ja auch erstmal realistisch. du mußt pro lichtquelle eh das ganze durchgehen und so verschiedene beleuchtungen von lichtquellen aufeinander addieren.
falls du nicht möchtest dass etwas komplett schwarz ist, dann mußt du als allererstes alles ohne lichtquelle (nur mit ambient) zeichnen.beim stencilbufferzeichnen wird meißtens +1 oder -1 gerechnet. aber in einem durchgang bekommt man nicht mehrere lichtquellen hin.
rapso->greets();
-
hm hab mich den ganzen gestrigen abend mit vertice shadern beschäftigt(juhu meiner kann jetzt das was das standard T&L kann...naja fast^^)
auf jedenfall frag ich mich nun, wie das mit shadern überhaupt gehen soll, immerhin hat man mit dem vertice shader immer nur zugriff auf einen vertice, eine edge brauch aber...lass mich ma kurz rechnen...2 und um zu errechnen, ob eine edge sichtbar ist, brauch man noch 2 weitere vertices...hmmmm
-
wenn du hier im forum ein paar seiten zurück gehst, wirst du ne lange diskusion über schatten finden, da hatten wir das besprochen.
ansonsten sind auf der nvidia seite gute paper dazu. (die es dir fehlerfreier sagen könnten als ich)
rapso->greets();
-
meins du die hier
da macht derjenige am ende es genauso wie ichs machen wollte^^
-
da steht auch etwas weiter hinten von stefan zerbst beschrieben wie man die volumes mit den vertexshadern extrudet.
rapso->greets();
-
sicher, aber er sagte selber, dass er es doch lieber über software macht, da es mit der animation doch en bissl hakt~~
ansonsten besteht doch die theorie darin, dass man mithilfe von degenerierten quads, die man nach hinten verschiebt, wenn sie vom licht wegzeigen, das modell an sich verzieht wie ein shadow volume, aber da gibts ein kleines problem: wie kann man denn teste, ob der vertex den man grad testet, ein teil eines degenerierten quads ist oder nicht?
und nochwas:so wies aussieht wird jedes quad nach hinten verschoben wenn es wegzeigt, egal ob es teil der siluette ist oder nicht,ist das so im sinne des erfinders?
-
otze schrieb:
sicher, aber er sagte selber, dass er es doch lieber über software macht
Ein VS ist doch auch nur eine Software.
Bye, TGGC \-/
-
nagut, er macht es nich über die gpu sondern über die cpu