PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie macht Crysis seine Gesichter


ollix
2006-09-05, 16:18:08
Hi,

gibt es Theorien, Papers, etc. wie Crysis seine tollen Gesichter hinbekommt? Bei der ganzen tollen Vegetation, den großartigen Schatten finde ich das eigentlich am Beindruckensten. Ich habe vor kurzem probiert, wie ATi es mit Ruby gemacht hat. Das ist aber eine große Stufe besser:
http://img443.imageshack.us/img443/5669/morecrysismediaandinfo20060329015240184at5.th.jpg (http://img443.imageshack.us/my.php?image=morecrysismediaandinfo20060329015240184at5.jpg)

Der entscheidenste Effekt bei der Hautdarstellung ist wohl das SSS (Sub Surface Scattering); ist das wirklich alles, was bei Crysis den Unterschied macht? Ich habe dazu dieses Bild gefunden:
http://img443.imageshack.us/img443/1159/morecrysismediaandinfo20060329015245247dn2.th.jpg (http://img443.imageshack.us/my.php?image=morecrysismediaandinfo20060329015245247dn2.jpg)
Hat jemand eine Idee, wie diese SSS Komponente in Echtzeit umgesetzt wird? Worauf kommt es an, was macht das Verfahren? Ich weiß das damit die Streuung des Lichts unter der Haut simuliert wird, aber wie funktioniert das hier? Wenn jemand irgendwelche Ideen dazu hat - theoretisch wie praktisch würde ich das hochinteressant finden. Andere vielleicht ja auch? :)

http://img443.imageshack.us/img443/7064/1138029366qq9.th.jpg (http://img443.imageshack.us/my.php?image=1138029366qq9.jpg)

Sven77
2006-09-05, 16:31:34
ich denke das SSS wird einfach auf die textur gebaked, realtime SSS duerfte etwas heavy sein..

ollix
2006-09-05, 17:14:15
In wie fern? Wenn der SSS-Effekt einmalig gerendert ist, dann würde es ja für Crysis nicht so viel bringen wenn es fest an den Lichtquellen hängt. Da es bestimmt mit dynamischen Lichtern funktioniert, würde ich es nicht als Einschränkung ansehen, wenn bestimmte belechtungsrelevante Parameter von der Haut in Texturen vorliegen. Solange das eben mit dynamischen Lichtumgebungen funktioniert. Cevat sagte auch in irgendeinem Interview was von "dynamic subsurface scattering".

Mr Power
2006-09-05, 18:40:33
ich denke das SSS wird einfach auf die textur gebaked, realtime SSS duerfte etwas heavy sein..


Realtime-SSS gab es doch afaik schon als Demo auf der Radeon 9700. Also seit wieviel Jahren? Vier oder fünf? Sollte doch dann auch irgendwann mal in Spiele eingebaut werden können.

HajottV
2006-09-05, 20:13:39
Das Zauberwort hier heißt "Spherical Harmonics", einfach mal danach yahoon (ich hätte ja g**glen gesagt, aber das ist ja verboten :rolleyes: ).

Gruß

Jörg

Avalox
2006-09-05, 20:34:33
Na ich weiss nicht. Mit gefällt die gemalte Rachel (http://www2.ati.com/misc/demos/ATI-8500-Rachel-Demo-v1.1.exe) aus der Radeon 8500 Demo immer noch am besten. Allein die Haare sind etwas unschön. Aber bei den Haaren bekleckert sich Crysis ja auch nicht grade. Irgendwann hat man von glatzköpfigen, streng zurück gekämmten, Pferdeschwänzigen, Stirnglatzigen, Kopftuch oder Stirnband tragenden Figuren einfach genug.
Nach dem Plastik- kommt nun der Glatzenstyle.

3d
2006-09-05, 21:54:45
ich hätte ja g**glen gesagt, aber das ist ja verboten ).
nein, das ist nicht verboten. da hast du wohl was falsch verstanden.
Nach dem Plastik- kommt nun der Glatzenstyle.
lieber an den haaren etwas sparen und die leistung für bessere sachen verwenden. oder willst du eckige figuren mit schönen haaren?

Gast
2006-09-05, 22:20:36
Aber bei den Haaren bekleckert sich Crysis ja auch nicht grade. Irgendwann hat man von glatzköpfigen, streng zurück gekämmten, Pferdeschwänzigen, Stirnglatzigen, Kopftuch oder Stirnband tragenden Figuren einfach genug.
Nach dem Plastik- kommt nun der Glatzenstyle.

auch wenn du natürlich recht hast und die haare nicht mit dem rest vom gesicht mithalten können, sieh doch mal genau hin:

http://img443.imageshack.us/img443/5669/morecrysismediaandinfo20060329015240184at5.jpg

man kann sogar einzelne haarstränchen erkennen, klar gibt es immer noch verbesserungsmöglichkeiten, aber besssere haare gab es noch in keinem spiel.

3d
2006-09-05, 22:38:01
was steckt denn jetzt alles hinter den gesichtern?
nur SSS und viele polygone oder sonst noch was besonderes?

warum kann man der engine nicht einfach sagen:
"die gesichter reflektieren anders und glänzen nicht" ? :biggrin:
SSS ist doch nur für die beleuchtung oder?

hat man bei HL2 doch auch gut hinbekommen ohne SSS.

Gast
2006-09-05, 22:44:00
hat man bei HL2 doch auch gut hinbekommen ohne SSS.

auch wenn die HL2-gesichter sehr gut sind, vor allem was die animationen betrifft (vielleicht sogar die besten derzeit in einem spiel erhältlichen gesichter), so können diese doch nicht mal ansatzweise mit dem mithalten was uns crytek hier präsentiert.

3d
2006-09-05, 23:06:35
ist doch logisch. HL2 ist ja schon gute 3 jahre alt und crysis noch gar nicht draußen. kann man also nicht vergleichen.

ich wollt damit nur sagen, daß die gesichter ohne SSS wohl nicht viel schlechter hätten ausgesehen.

del_4901
2006-09-05, 23:14:42
Dann löse ich es hiermit mal auf:
http://graphics.ucsd.edu/papers/layered/

Gast
2006-09-05, 23:35:34
5 min Renderzeit. Klingt kaum nach der Methode von Crytek...

del_4901
2006-09-05, 23:58:39
5 min Renderzeit. Klingt kaum nach der Methode von Crytek...

Lief ja auch nur auf ner CPU.
Mit ein bissel Gehrinschmalz und ein bischen triksen läuft der Algorithmus auch auf einer GPU! Wo ich mir nur nicht ganz sicher bin, ist wie es mit dynamisch transformierbaren Objekten aussieht. Aber da die Dipolberechnung recht flott von der Hand geht, wird es wohl für eine begrenzte Anzahl an translucenten Objekten möglich sein, das auf der CPU zu machen.

Gast
2006-09-06, 00:12:24
Lief ja auch nur auf ner CPU.
Tolle Begründung.
Mal angenommen, die GPU hätte die 300-fache Rechenleistung. Dann würde es immer noch eine Sekunde dauern.
:up:
Wieviel echtzeitfähige (mit Vorberechnung) Methoden für SSS gibt es denn?
50? 100?
Möglicherweise ists ja auch nur ein PRT-Verschnitt.
An den Bildern von Crytek kann ich nichts erkennen, was an die Qualität des von dir verlinkten Papers rankommen würde.

del_4901
2006-09-06, 00:16:50
Tolle Begründung.
Mal angenommen, die GPU hätte die 300-fache Rechenleistung. Dann würde es immer noch eine Sekunde dauern.
:up:
Wieviel echtzeitfähige (mit Vorberechnung) Methoden für SSS gibt es denn?
50? 100?
Möglicherweise ists ja auch nur ein PRT-Verschnitt.
An den Bildern von Crytek kann ich nichts erkennen, was an die Qualität des von dir verlinkten Papers rankommen würde.

Das sind auch sehr viele Layer ... ist halt der aktuelle Stand der Technik in dem Bereich. Vllt hat Crytek gar nur ein oder zwei Layer, das würde den Rechenaufwand sehr klein halten. Dazu steht auch was in meinem Paper.
Auch mit dem Verweis auf:
http://graphics.ucsd.edu/~henrik/papers/fast_bssrdf/
(Ist aber nicht auf dem aktuellen Stand der möglichen Optimierungen)

BTW: Das Ohr sieht geil aus! ^^

mhm für nen PhotonTracer brauch ich noch die Photonmaps, ich hab da zwar auch ein Paper für Echtzeitanwendungen auf der GPU (leider nicht hier.. ist auf meinem Hauptrechner).
Da musste man auch die Photonmaps auf der CPU berechnen, ich glaube die Dipolberechnung geht in dem Fall schneller von der Hand. Und bei einer Handvoll Layern kann ich mir gut vorstellen das es echtzeitfähig wird.
Wenn mir einer nen Kopf modelliert probier ich das mal bei Gelegenheit aus. Also sobald mein Board aus der RMA kommt. ^^

Spasstiger
2006-09-06, 00:18:41
Half-Life 2 Episode 1 verwendet auch eine Art Subsurface-Scattering bei den Gesichtern. War eine der geringfügigeren Neuerungen an der Grafikengine.
Kann ja mal versuchen, den Effekt auf Screenshots festzuhalten.

/EDIT: Rim Lighting kommt bei HL2 Ep.1 zum Einsatz, fällt mir gerade ein. Das hat mit Subsurface Scattering zunächst gar nichts zu tun. Aber es verbessert auch die Darstellungsqualität der Gesichter.

Gast
2006-09-06, 00:55:42
mhm für nen PhotonTracer brauch ich noch die Photonmaps, ich hab da zwar auch ein Paper für Echtzeitanwendungen auf der GPU (leider nicht hier.. ist auf meinem Hauptrechner).
Da musste man auch die Photonmaps auf der CPU berechnen, ich glaube die Dipolberechnung geht in dem Fall schneller von der Hand. Und bei einer Handvoll Layern kann ich mir gut vorstellen das es echtzeitfähig wird.
Möglich. Aber Nutzen/Kosten für Spiele?
Ich vermute sehr stark, dass Crytek Ruby2-like den Radiance Transfer minus direkte Beleuchtung vorberechnet. Bei Gesichtsanimation gibt das zwar kleine Fehler, die aber wahrscheinlich kaum auffallen.
Wenn mir einer nen Kopf modelliert probier ich das mal bei Gelegenheit aus.
Oblivionarchiv entpacken und die Gamebyrodateien in .obj umwandeln.
Musst dir halt noch ein paar Ohren zum Kopf auswählen. ;)

Rim Lighting kommt bei HL2 Ep.1 zum Einsatz, fällt mir gerade ein. Das hat mit Subsurface Scattering zunächst gar nichts zu tun. Aber es verbessert auch die Darstellungsqualität der Gesichter.
http://img490.imageshack.us/img490/846/clipboard01ow3.th.jpg (http://img490.imageshack.us/my.php?image=clipboard01ow3.jpg)
Bei Epsiode 1 wurde der untere Zweig hinzugefügt...

Gast
2006-09-06, 13:27:11
Half-Life 2 Episode 1 verwendet auch eine Art Subsurface-Scattering bei den Gesichtern. War eine der geringfügigeren Neuerungen an der Grafikengine.
Kann ja mal versuchen, den Effekt auf Screenshots festzuhalten.

/EDIT: Rim Lighting kommt bei HL2 Ep.1 zum Einsatz, fällt mir gerade ein. Das hat mit Subsurface Scattering zunächst gar nichts zu tun. Aber es verbessert auch die Darstellungsqualität der Gesichter.

find ich nicht gerade, episode1 kommt imo dem "babyöl-look" schon sehr nahe, HL2 war da besser.

Spasstiger
2006-09-07, 17:21:42
find ich nicht gerade, episode1 kommt imo dem "babyöl-look" schon sehr nahe, HL2 war da besser.
Ich finde nicht, dass die Charaktere in Episode One in irgendeiner Weise ölig aussehen. Vielleicht meinst du das teilweise starke Strahlen von hellen Stellen, was aber vom HDR-Rendering herruft.
Das Rim Lighting sorgt imo für einen realistischeren Look.

ollix
2006-09-07, 19:24:22
Erstmal vielen Dank für die Antworten.

Ich habe jetzt so viel gelesen wie noch nie, und so wenig verstanden wie immer :)

Es fielen u.a. die Stichworte Spherical Harmonics und PRT/Precomputed Radiance Transfer. Insbesondere zu Ersterem habe ich viel gefunden, wo ich aber nicht sicher bin, wo es mich hinführt.

Mit fehlt da ein bißchen ein etwas sanfterer Einstieg. :) Ich habe damit angefangen ATis Ruby zu implementieren, was auch von der Technik gut funktioniert hat, aber leider nicht so gut aussieht. Dort wurde das SSS so simuliert, daß das Ambient+Diffuse Rendering in einen ersten Pass gerendert wurde. Dazu wurde eine ScatteringMap verwendet, die den Streuungsfaktor von verschiedenen Gesichtsregionen enthält. Im 2ten Pass wird dann die Beleuchtung aus Pass1 mit den Streuungswerten aus der Map für jeden Pixel geblurrt; darauf dann der Specular Anteil aufgetragen. Man finde schöne Erklärungen dafür, aber es sieht lange nicht so schön aus wie obere Beispiele ;(

So wie ich das Problem beim SSS generell verstanden habe, ist das Hauptproblem eben, daß man mit unseren Grafikkarten nicht ohne weiteres mit dem Rendern eines Pixel einen anderen verändern kann (außer mit einem weiteren RenderPass) - das ist beim SSS aber Grundvoraussetzung.

Gibt es einen gemeinsamen Hintergrund bei den Ansätzen, wie wenn ich einen Pixel/Fragment rendere Beleuchtungsinformationen von diesem weitertransportiert werden bzw. welche Rolle nehmen die "Spherical Harmonics" darin ein? Ich habe jetzt auch nicht den Anspruch dem Cevat seine Gesichter zu kopieren, suche aber wie ich wenigstens etwas von diesem Effekt, der für diese schöne Lichtverteilung auf den Gesichtern sorgt, bei mir implementieren kann.