Deferred Shading & Uber Shaders (CryEngine 3)

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Deferred Shading & Uber Shaders (CryEngine 3)

Beitrag 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?
Zuletzt geändert von CodingCat am 27.03.2009, 14:22, insgesamt 1-mal geändert.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Benutzeravatar
Krishty
Establishment
Beiträge: 8245
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Deffered Shading & Uber Shaders (CryEngine 3)

Beitrag 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.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: Deferred Shading & Uber Shaders (CryEngine 3)

Beitrag 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?
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Benutzeravatar
Krishty
Establishment
Beiträge: 8245
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Deferred Shading & Uber Shaders (CryEngine 3)

Beitrag 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.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: Deferred Shading & Uber Shaders (CryEngine 3)

Beitrag 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.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Benutzeravatar
Schrompf
Moderator
Beiträge: 4858
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Deferred Shading & Uber Shaders (CryEngine 3)

Beitrag 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.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: Deferred Shading & Uber Shaders (CryEngine 3)

Beitrag 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.
Zuletzt geändert von CodingCat am 27.03.2009, 15:23, insgesamt 5-mal geändert.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Benutzeravatar
Richard Schubert
Moderator
Beiträge: 106
Registriert: 27.02.2009, 08:44
Wohnort: Hohen Neuendorf (b. Berlin)
Kontaktdaten:

Re: Deferred Shading & Uber Shaders (CryEngine 3)

Beitrag 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.
Produktivität über Performance - XNA Creators Club
Benutzeravatar
eXile
Establishment
Beiträge: 1136
Registriert: 28.02.2009, 13:27

Re: Deferred Shading & Uber Shaders (CryEngine 3)

Beitrag 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).
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: Deferred Shading & Uber Shaders (CryEngine 3)

Beitrag 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 :-)
Antworten