Seite 1 von 1

Deferred Shading & Uber Shaders (CryEngine 3)

Verfasst: 27.03.2009, 14:17
von CodingCat
Hi,

bin beim Surfen durch die aktuelle GDC Newsflut auf folgendes gestoßen:
Crytek hat geschrieben:Deferred Lighting
The CryENGINE® 3 unique deferred lighting solution allows the rendering of a vast amount of light sources with per pixel shading efficiently; and simplifies engine performance tuning across multiple platforms.

Uber Shader Technology
CryENGINE® 3 shaders are written once in a high level language, then compiled automatically to each platform. The shader output is optimized based on the artists’ settings and the 3D environment in which the shader is used. This creates high performance unique effects, such as: “cloaking”, wet, muddy, and frozen surfaces, which can be layered together and combined with other shaders, such as: metal, glass and other visual effects. CryENGINE® 3 supports real time per-pixel lighting, bumpy reflections, refractions, volumetric glow effects and animated textures to simulate windows, bullet holes, shiny surfaces and many other effects. CryENGINE® 3 also takes advantage of the unified shader architecture of current and next-gen hardware. The combination of deferred lighting and this technology allows CryENGINE® 3 to avoid the traditional shortcomings of Uber Shaders alone.
Nun frage ich mich, auf welche traditionellen Nachteile von Uber Shaders könnte das bezogen sein? AFAIK braucht man ja immer noch pro Lichttyp (+ evtl. pro Anzahl, auch wenn das bei Deferred Shading wegfallen kann, wenn man nur 1 Licht / Post-Processing Pass rendert) eine andere Permutation des Shaders, auch die Permutationen des Uber Shaders für verschiedene Materialeigenschaften dürften erhalten bleiben. Der Shader sollte also nach wie vor sehr komplex und umfangreich sein.

Unter Umständen lassen sich die Shader beim Rendern mit Deferred Shading besser sortieren und sich so überflüssige Wechsel einsparen, möglicherweise lässt sich bei Deferred Shading auch mit early Pixel Clipping was reißen, aber das hat alles recht wenig mit den Nachteilen von Uber Shaders zu tun. Was habt ihr dazu für Ideen?

Re: Deffered Shading & Uber Shaders (CryEngine 3)

Verfasst: 27.03.2009, 14:22
von Krishty
Ich interpretiere das so, dass von Dynamic Linkage Gebrauch gemacht wird. Welche Teile der Über-Shader beim Rendern gelinkt und welche gleich ganz weggelassen werden, wird dabei dadurch bestimmt, welche Materialien beim Rendern vorgekommen sind.

Re: Deferred Shading & Uber Shaders (CryEngine 3)

Verfasst: 27.03.2009, 14:26
von CodingCat
Hm, Dynamic Linkage wäre ein Ansatz, nur wie würde man sowas in DirectX 9 realisieren? Static Branching ab Pixel Shader 3? Wäre natürlich interessant zu wissen, ob das in Pixel-Shadern bedeutende Performance-Vorteile bringt. Bei DX10 hab ich noch nicht den Überblick, ist da DL integriert?

Re: Deferred Shading & Uber Shaders (CryEngine 3)

Verfasst: 27.03.2009, 14:31
von Krishty
Ganz vergessen, auf welchen Systemen wird die CE3 überhaupt laufen? Soll sie immernoch D3D9-kompatibel sein? DL gibt es nur in D3D11, getestet habe ich sie noch nicht.

Re: Deferred Shading & Uber Shaders (CryEngine 3)

Verfasst: 27.03.2009, 14:32
von CodingCat
Sorry, das ist natürlich durchaus bedeutend für die Diskussion:
Crytek hat geschrieben:CryENGINE® 3 is the first Xbox 360™, PlayStation® 3, MMO, DX9 and DX10 all-in-one game development solution that is next-gen ready – with scalable computation and graphics technologies.
Müsste also auch auf DX9 optimiert laufen, weil das im Moment für alle XP-User Oberkante ist. Dynamic Linkage wäre insofern wohl nur auf Umwegen machbar, und das müsste schneller laufen als der Wechsel vorkompilierter Shader.

Re: Deferred Shading & Uber Shaders (CryEngine 3)

Verfasst: 27.03.2009, 14:44
von Schrompf
Wenn die Jungs sowieso eine eigene HighLevel-Shadersprache erfunden haben und die nach Bedarf für die verschiedenen Zielplattformen in Plattform-Shadercode übersetzen, können sie bei der Übersetzung doch beliebige Code-Pfade generieren. Ich stelle mir das als eine Datenfluss-Modellierung vor, in der Du verschiedene fertige oder eigene Beleuchtungsmodelle als Funktionsblöcke einsetzen kannst. Der Rest ist dann nur noch eine geschickte Schnittstellendefinition (so dass sich die Shader wirklich stressfrei aufeinanderschichten lassen) und ein ordentlicher Übersetzer, dem Du Parameter wie den Lichtquellentyp zuschieben kannst.

Ich verstehe das als eine Art JIT-Compiler für Shader - von der jeweiligen Grafik-API ist da gar keine Linker-Funktionalität gefordert.

Re: Deferred Shading & Uber Shaders (CryEngine 3)

Verfasst: 27.03.2009, 15:03
von CodingCat
OK, das würde die Shader einfacher zu schreiben bzw. zu warten machen, nur das Rendering würde nicht davon profitieren. Muss es allerdings auch nicht, Crytek sagt ja nicht, wo genau die Verbesserungen in dieser Richtung liegen.

Nachtrag:
Ich habe gerade nochmal über das Dynamic Linking nachgedacht und festgestellt, dass Deferred Lighting tatsächlich eine Art Dynamic Linking darstellt. Die nachträgliche Beleuchtung erzeugt dann eine Gelenkstelle, durch die Permutationen für Geometrieoperationen und Permutationen für Beleuchtung voneinander abgekoppelt werden und sich somit drastisch reduzieren. Keine wirklich neue Erkenntnis, aber eine, die den Satz erklären könnte. Die Optimierung der Uber-Shader läge dann nicht bei der Komplexität der Beleuchtung, sondern bei geometriebasierten Operationen wie Charakteranimation, Physik oder Displacement-Mapping.

Re: Deferred Shading & Uber Shaders (CryEngine 3)

Verfasst: 27.03.2009, 15:11
von Richard Schubert
Die Sache ist vermutlich viel einfacher.

Die Unreal Engine hätte genau die gleiche Möglichkeit echtes Deferred Rendering zu unterstützen und dennoch Über Shaders zu ermöglich.
Alle Outputs in Rendertargets rendern und anschließend beim Lighting Pass (X Lichter) verwenden. Fertig.

Es soll Lizenznehmer von der Unreal Engine geben, die den Renderer der UE3 umgeschrieben haben, um das zu erreichen. Natürlich mit dem Nachteil Unmengen von Speicher für die Rendertargets zu verbauchen.

Re: Deferred Shading & Uber Shaders (CryEngine 3)

Verfasst: 27.03.2009, 15:20
von eXile
Schon einmal dran gedacht, dass das einfach Buzzword-Bingo für Nicht-Grafikentwickler ist? Meiner Meinung nach hört sich das einfach danach an, dass sie ein System entworfen haben (ich werde jetzt nicht das meistgehasste Wort "Plugin-System" nennen), welches auf DirectX 11 DL einsetzt, und für DirectX 9 und 10 ist es ein "abgespeckter" Uber-Shader, welcher nur z.B. die im aktuellen Level, etc., vorhandenen Materialen enthält.

Der rot markierte Satz hört sich nach Marketing-Blabla an. Edit: CodingCat hat eine mögliche Erklärung gefunden (trotzdem sehr merkwürdig formuliert von der Presseabteilung).

Re: Deferred Shading & Uber Shaders (CryEngine 3)

Verfasst: 27.03.2009, 17:01
von Aramis
Ich sehe das auch so wie Schrompf ..

Die neue CryEngine setzt einfach den Trend Shader noch weiter zu abstrahieren fort. Um so viele Plattformen zu unterstützen ist das ja eigentlich auch zwingend erforderlich. Der Rest ist Marketing-Blabla. Man hat halt eine neue Engine, die eigentlich auch nichts anderes macht als die alte, nur noch mehr dynamische Lichtquellen, noch feiner aufgelöste Schatten, noch schönere Brechungen ... und dann braucht man einen Text um das alles zu beschreiben. Heraus kommt so etwas :-)
This creates high performance unique effects, such as: “cloaking”, wet, muddy, and frozen surfaces, which can be layered together and combined with other shaders, such as: metal, glass and other visual effects.
Wenn die 'frozen' surfaces immer noch so 'high performance' sind wie bei Crysis, na dann gute Nacht :-)