PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Warum sind "weiche" Schatten so Schwierig? (idee inside)


Thanatos
2004-12-01, 20:34:41
Guten Abend.

ich hab jetzt schön öfters in magazinen gelesen das dieses und jenes Spiel nun weiche schatten hat, die richtig echt anzuschauen sind, und ncht so rack abgegrenzt sind wie normal.

Ich finde weiche schatten auch sehr schön, denn die jetzigen so abgehackten schatten stoßen mir immer so auf das ich sie deaktiviere.

Aber waum sind die so schwer zu machen???


Obwohl ich ja davon überhaupt keine Ahnung von programmieren und diesem ganzen zeugs was da in der graka abläuft aber.........



Hier meine Idee:

Warum Blurt man denn ned einfach die schattentextur???das müsste doch auf jedenfall deutlich schöner aussehen wie bis her, oder??


Hier mal ein kleiner Homemade versuch meinerseits :ugly:


"Normaler" Schatten:

http://img7.exs.cx/img7/7328/Bild201.jpg



Und hier jetzt meine stark geblurte version:

http://img7.exs.cx/img7/1948/Blur.jpg



Die geblurte version (über den stärke grad kann man natürlich noch streiten) sieht für mich viel eher nach nem Schatten aus.






da ih mit meinen ideen wahrscheinlich total realitätsfern bin...........Also berichtigt und belehrt mich o ihr 3d Gurus :D




Mfg Thanatos

Trap
2004-12-01, 22:25:02
Blur ist aufwändig, du brauchst für jeden Pixel den der Schatten weich auslaufen soll (n+1)(n+1) Pixel die du irgendwie verrechnest. Bei 10 Pixeln Breite kommt man schon auf 121 Quellpixel pro Ergebnisspixel.

Monger
2004-12-01, 22:31:04
Ist Blur denn Richtungsgebunden? Wenn nicht, gäbe das einen ziemlich hässlichen Effekt...

Und wie schon gesagt wäre die Performance für starkes Blurren zum kotzen.

Aber mit Unreal3 wird ja sowieso alles besser :D

marco42
2004-12-02, 00:10:39
Es gibt im Moment zwei Schatten verfahren, einmal mit Shadow maps, einmal mit Shadowvolumns. Bei beiden sind mittlerweile verfahren bekannt fuer weiche Schatten. Das dauert halt erstmal bis die Spieleentwickler das uebernommen haben(die saugen sich das ja so gut wie nie selbst aus den fingern). Shadow maps habennoch den Nachteil diskret zu sein, sie erzeugen gern Artefakte und selbst mit einigen neueren Verfahren, bekommst du die in bestimmten Situtationen nicht weg. Shadowvolumns(Doom benutzt die) fressen hingegen sehr viel fullrate. Sie haben noch die einen oder anderen Nachteile, mal schauen, vielleicht gibt es demnaechst das Ueber-Shadow-Paper. :-)

aths
2004-12-02, 12:31:31
Warum Blurt man denn ned einfach die schattentextur???das müsste doch auf jedenfall deutlich schöner aussehen wie bis her, oder??Blur ist aufwändig. Man erzeugt die Schattentextur manchmal in niedriger Auflösung und vergrößert sie dann bilinear, damit hat man auch weiche Ränder.

Aber die Weichheit (und überhaupt die Schattenintensität) sind von einigen Parametern abhängig, die bei solchen Verfahren nicht berücksichtigt werden. Einfach jeden Schatten stur gleichermaßen weich zu machen ist auch keine gute Lösung.

Thanatos
2004-12-02, 16:49:43
Blur ist aufwändig. Man erzeugt die Schattentextur manchmal in niedriger Auflösung und vergrößert sie dann bilinear, damit hat man auch weiche Ränder.

Aber die Weichheit (und überhaupt die Schattenintensität) sind von einigen Parametern abhängig, die bei solchen Verfahren nicht berücksichtigt werden. Einfach jeden Schatten stur gleichermaßen weich zu machen ist auch keine gute Lösung.

Hmmmm, aber braucht denn wirklich son Blur Filter sooo viel leistung :O 2xQ hat doch auch die Kanten schön geglättet (naja eher geblurt), und aber fast keine leistung gekostet :)


Ich hätte jetzt aber eher gedacht das ein Blur filter zu den recht einfachen Operationen einer Grafikkarte gehört.


Stimmt schon dass, es dann wiederum etwas komischer aussieht wenn alle schatten gleich geblurt sind, aber dennoch bestimmt besser wie diese "harten" schatten (Persönliche Meinung).

Gast
2004-12-02, 17:38:57
Ich würde es gut finden wennn der Schatten so ist wie er sein sollte, von der/den Lichtquelle/n und Untergrund/Material abhängig, da sollte man sich mal was einfalllen lassen, die derzeitigen Lösungen hauen keinen vom Hocker.

Gast 2004
2004-12-02, 18:56:48
Also mit der Stencil-Technik halte ich weiche Schatten in der Praxis für so gut wie unmöglich. Manche Leute wollen zwar jede Szene 4x oder öfter rendern (mit leicht verschobenen Lichtpositionen) und dann interpolieren, allerdings dürfte das in einem Spiel völlig unpraktikabel sein.

Mit Shadow Maps sind weiche Schatten im Prinzip möglich:
Wenn man mehrere Samples der Shadowmap pro Pixel nimmt, kann man bestimmen, "wie Tief" ein Punkt der Welt im Schatten ist. So kann man den Schatten weich machen.
Die UnrealEngine 3 nimmt zum Beispiel für Character Shadows 16fach gesampelte ShadowMaps, was die Schatten sehr weich macht.
Allerdings dürfte man selbst bei so vielen Samples die Pixel-Abstufungen der ShadowMap noch erkennen, was den Schatten auch nicht schöner macht.

Mit Rasterizern dürften wirklich gute Schatten aber sowieso kaum zu erreichen sein, da sind RayTracer einfach überlegen.

eXistence
2004-12-03, 08:15:13
Naja, müsste man bei stencil-schatten das shadow-volume nicht einfach zweimal berechnen?
Einmal für den harten Kern des Schatten und einmal den äußersten rand (wo der Schatten ganz weg ist) und dazwischen müsste man dann die Helligkeit entsprechend interpolieren.
Ist zwar auch nicht 100%ig korrekt, würde dem aber IMO schon recht nahe kommen...

Gast
2004-12-03, 10:25:30
[QUOTE=eXistence]Naja, müsste man bei stencil-schatten das shadow-volume nicht einfach zweimal berechnen?

[QUOTE]

aber woher nimmst du die Daten zur zweimaligen berechnung? mit einer lichtquelle kannst du halt nur ein schattenvolumen berechnen.

eXistence
2004-12-03, 10:48:09
Wäre der Größenunterschied zwischen den Shadow-Volumes nicht einfach abhängig von der Entfernung des Objectes zur Lichtquelle...

Vielleicht stell ich mir das ja (noch) wirklich zu einfach vor... =)

aths
2004-12-03, 12:29:40
Hmmmm, aber braucht denn wirklich son Blur Filter sooo viel leistung :O 2xQ hat doch auch die Kanten schön geglättet (naja eher geblurt), und aber fast keine leistung gekostet :)(Großflächiger) Blur einer Textur ist was anderes als (lokal recht begrenzter) Blur beim RAMDAC-Readout.

Stimmt schon dass, es dann wiederum etwas komischer aussieht wenn alle schatten gleich geblurt sind, aber dennoch bestimmt besser wie diese "harten" schatten (Persönliche Meinung).Ich hätte es gerne möglichst korrekt – und wenn ich mich an Unreal 3 richtig erinnere, ist das durchaus möglich.

Coda
2004-12-03, 12:51:14
Genereller Blur ist vor allem eine sehr schlechte Lösung, weil je näher man zur Lichtquelle kommt der Schatten eigentlich schärfer wird.

Es gibt die Lösung mit dem Blur, dabei wird aber noch die Silhouette betrachtet, und das ganze ist wieder nicht so einfach. Leider hab ich das Paper gerade nicht zur Hand.

marco42
2004-12-03, 16:13:36
Also mit der Stencil-Technik halte ich weiche Schatten in der Praxis für so gut wie unmöglich. Manche Leute wollen zwar jede Szene 4x oder öfter rendern (mit leicht verschobenen Lichtpositionen) und dann interpolieren, allerdings dürfte das in einem Spiel völlig unpraktikabel sein.


schau mal auf http://graphics.cs.lth.se/research/shadows/. die werden auch nicht ueber Multisampling erzeugt, der algorithmus ist schon etwas komplizierter. Das war sogar ein SIGGRAPH paper, sollte also jedem bekannt sein, dersich mit der materie beschaeftigt.

pancho
2004-12-03, 16:15:25
Genereller Blur ist vor allem eine sehr schlechte Lösung, weil je näher man zur Lichtquelle kommt der Schatten eigentlich schärfer wird.


ist es nicht so, dass der schatten schärfer wird, je näher das schattenwerfende objekt an der beschatteten fläche ist? zumindest funktioniert das hier mit meinem finger und der schreibtischlampe ganz gut ;)

außerdem kommt die weichheit des schattens ja dadurch zustande, dass reale lichtquellen nunmal eine gewisse größe besitzen. die weichheit des schattens ist ja nicht überall gleich. man stelle sich folgendes vor (oder probiere es aus): ein stift (oder finger) steht senkrecht auf dem schreibtisch, die schreibtischlampe (hier bei mir eine leuchtstoffröhre) leuchtet ihn irgendwie an, von schrägoben. deutlich kann man einen kernschatten (dreieckig) und einen sehr weichen übergang in den teilschatten beobachten. legt man den stift hin, so ist der schatten sehr hart und in der form identisch mit dem stift. das lässt sich durch einen einfachen blur-filter nicht realisieren. bei shadow-volumes könnte es gehen, dann muss man reale lichtquellen mit mehreren virtuellen simulieren (eigentlich deren physikalische ausdehnung, denn die punktförmige lichtquelle gibt es nicht) und auch deren shadow-volumes berechnen.

RLZ
2004-12-03, 17:40:50
Ich hätte es gerne möglichst korrekt – und wenn ich mich an Unreal 3 richtig erinnere, ist das durchaus möglich.
Unreal 3 und korrekte Schatten?
Die haben 2 Texturen. Eine mit scharfem Schatten und eine mit geblurrtem.
Dazwischen wird dann nach Abstand interpoliert.
Von korrekt ist das noch weit weg...

Gast
2004-12-03, 17:44:01
schau mal auf http://graphics.cs.lth.se/research/shadows/. die werden auch nicht ueber Multisampling erzeugt, der algorithmus ist schon etwas komplizierter. Das war sogar ein SIGGRAPH paper, sollte also jedem bekannt sein, dersich mit der materie beschaeftigt.
Danke für den Link. Das werde ich mir mal durchlesen, sobald ich Zeit habe.

aths
2004-12-03, 22:39:28
Unreal 3 und korrekte Schatten?
Die haben 2 Texturen. Eine mit scharfem Schatten und eine mit geblurrtem.
Dazwischen wird dann nach Abstand interpoliert.
Von korrekt ist das noch weit weg...Ist eine clevere Idee, finde ich.

Coda
2004-12-04, 17:50:54
Unreal 3 und korrekte Schatten?
Die haben 2 Texturen. Eine mit scharfem Schatten und eine mit geblurrtem.
Dazwischen wird dann nach Abstand interpoliert.
Von korrekt ist das noch weit weg...
Hm so falsch ist das gar nicht. Wenn halt irgendwann mehr blur nötig wäre als vorhanden ist, ist es falsch.

Xmas
2004-12-04, 21:46:33
Es gibt ja grundsätzlich zwei Gründe, warum Schatten weich sind, zum einen die räumliche Ausdehnung von Lichtquellen, und zum anderen die diffuse Streuung von Licht an anderen Objekten bzw. in der Luft.

Die aufwändigste, aber wohl auch genaueste Methode zur Berechnung von Schatten wäre wohl, für jeden gerenderten Pixel die Hemisphäre über diesen Punkt zu rendern, und dann die Lichtmenge aufzusummieren, die von jedem Punkt dieser Hemisphäre in Augenrichtung reflektiert würde. Dummerweise müsste man die Hemisphäre selbst vereinfacht rendern, sonst hätte man ja unendliche Rekursion.

Selle
2004-12-06, 17:44:24
Wie wird denn der Schatten von UT2k3/2k4 erzeugt? Sieht für mich auch recht gut aus, kann man via ini ja auch Stencil nutzen (UseStencil=True), sieht allerdings genauso aus wie ohne.

Ist halt nur nicht wirklich real da zu verwaschen. (Aber auch nicht pixelig :biggrin: )