Fragen zum Rendern des Zugriffs in UDK

7

Ich habe auch in den UDK-Foren danach gefragt , hatte aber nicht viel Glück, Antworten zu erhalten. Grundsätzlich habe ich einige Erfahrungen mit UT3-Modding, aber ich fange gerade erst mit dem UDK an und habe ein paar Fragen zum Grad der Kontrolle über das Rendering, das Sie haben.

  1. Ich stelle fest, dass es trotz des Vorhandenseins mehrerer HLSL-Shader-Dateien in der UDK-Distribution (mit der Erweiterung .usf) keine Möglichkeit gibt, eigene Shader außerhalb des Material-Editors zu implementieren. ist das richtig? (Ich kenne den benutzerdefinierten Knoten im Materialeditor, aber er ist sehr begrenzt und für alle außer der einfachsten Logik unhandlich.)

  2. Ich verstehe, dass UE3 verzögertes Rendern verwendet. Ich weiß, dass Sie in einem Nachprozess auf die Farbe und Tiefe des aktuellen Pixels zugreifen können. Gibt es jedoch eine Möglichkeit, allgemeiner auf diese oder andere G-Puffer-Attribute zuzugreifen? (Normalen, Position, Werte an benachbarten Pixeln ...)

  3. Werden Renderziele allgemein unterstützt? Wäre es aus Gründen der Argumentation möglich, eine Kamera so einzurichten, dass die Tiefe aus einem alternativen POV gerendert wird, und dann beim Rendern der Hauptansicht Tiefenvergleiche im Stil einer Schattenkarte durchzuführen?

  4. Ist es möglich, alle Materialien auf dem Client (en masse) zu überschreiben, z. B. diejenigen, die in der aktuellen Ebene für das Gelände oder die BSP-Geometrie verwendet werden? (Zur Implementierung alternativer Bildverarbeitungsmodi und ähnlicher Dinge.)

Die mit dem UDK gelieferten Tools sind natürlich sehr ausgefeilt, und es ist schwer, Free Scaleform und SpeedTree zu übertreffen, aber ich fange an zu denken, dass die Plattform für jeden, der über Drag & Drop hinausgehen möchte, schrecklich geeignet ist Materialbearbeitung in Bezug auf Grafiken. Ich habe das Gefühl, dass ich zum Beispiel viel mehr Kontrolle über das Rendern in einem Source Engine Mod habe.

Neverender
quelle
Ich würde gerne von jemandem hören, der Erfahrung in UDK zu diesen Themen hat
jcurrie33

Antworten:

4
  1. Ich sehe ernsthaft nicht viel, was mit MaterialEditor nicht möglich wäre. Sie können fast alles tun, was Sie brauchen. Man könnte argumentieren, dass der Material-Editor keinen optimalen Shader-Code generiert, aber der Shader-Compiler leistet hier hervorragende Arbeit bei der Optimierung des automatisch generierten Codes. Also probieren Sie es einfach aus. Viele AAA-Spiele wurden mit dieser Toolchain entwickelt und viele davon funktionierten nur vollständig mit Materialien, die mit diesem Editor erstellt wurden. Aber um Ihre Frage zu beantworten: Nein, das ist mit dem einfachen UDK nicht möglich.

  2. UE3 verwendet kein verzögertes Rendern. Das Shadowing-System verwendet eine Art verzögerte Technik über dem Forward-Renderer. Die Renderpipeline wird jedoch überhaupt nicht zurückgestellt, sodass kein G-Buffer oder ähnliches verfügbar ist. Weitere Informationen hierzu: http://www.unrealtechnology.com/Downloads/Slides/xfest-gfx.ppt Leider konnte ich mit einer schnellen Suche keine andere öffentlich verfügbare Dokumentation der Interna von UE3 finden, daher hoffe ich auf diese Präsentation gibt Ihnen einen guten Überblick. Der Zugriff auf benachbarte Pixel ist sofort möglich. Schauen Sie sich den DOF- oder Bloom-Posteffekt an. Ich bin nicht sicher, ob dies im Code oder über den Material-Editor implementiert ist, aber wenn es im MaterialEditor ist, sollten Sie in der Lage sein, ein funktionierendes Beispiel dafür zu finden.

  3. Sie sollten sich die SceneCaptureActors ansehen. Diese können für das Rendern von Texturen verwendet werden, aber ich bin mir nicht sicher, wie viele Optimierungsmöglichkeiten Sie für die sofort einsatzbereiten UDK-Schauspieler haben. Sie können diese gerenderte Textur dann in einem Material verwenden. Leider wird Ihr spezieller Fall (Rendern der Tiefe) im UDK nicht sofort unterstützt.

  4. Nein, dies ist nicht möglich, aber Sie können eine Problemumgehung durchführen, indem Sie Materialparameter verwenden, die im Material behandelt werden (ein Material würde also den Shader für beide Modi enthalten). Sie können dann die Materialparameter über Kismet ändern, sodass Sie genau das tun können, was Sie benötigen.

Meiner Meinung nach gibt es nicht viel, was man mit dem UE3-Rendering nicht machen kann. Die Drag-and-Drop-Materialbearbeitung und das Level-Editor-zentrierte Design sind möglicherweise nicht das, was ein Programmierer erwartet, aber genau das, was Content-Leute brauchen. Dies hat sich am Ende des Tages als wirklich gute Lösung erwiesen. Dies setzt natürlich voraus, dass die Inhaltsersteller das System und seine Einschränkungen kennen.

Probieren Sie es einfach aus und versuchen Sie, mit den von der UDK bereitgestellten Tools das zu erstellen, was Sie benötigen. Ich bin sehr sicher, dass Sie bekommen können, was Sie wollen.

DarthCoder
quelle
Danke für die Antwort. re: # 1 - Dies beantwortet meine Frage überhaupt nicht. Betreff: # 2 - Haben Sie Zitate oder weitere Informationen? Betreff: # 3 - Ich kenne die SceneCapture * -Schauspielerklassen, aber es scheint, als ob sie sich darauf beschränken, eine "normale" Ansicht der Szene zu erfassen. Ich habe speziell gefragt, ob ich einen projektiven Tiefenvergleich durchführen kann. Ich habe auf jeden Fall versucht, aus den im UDK verfügbaren Tools das herauszuholen, was ich will, und genau so habe ich diese Liste von Fragen formuliert.
Neverender
Ja, du hast recht ... Ich wurde weggeschleppt und fing an zu streifen :), Entschuldigung ... Ich habe meine Antwort so bearbeitet, dass sie dir hoffentlich weiterhelfen kann.
DarthCoder
Danke für die zusätzlichen Infos. Ich verstehe, woher Sie kommen, wenn Sie sagen, dass der Materialeditor für die meisten Dinge vielseitig genug ist. Es ist bedauerlich, dass ich diese Idee mit dem UDK nicht umsetzen kann. Das Einspritzen von Sonderfällen in jedes einzelne Material ist kein praktikabler Ansatz.
Neverender
1

Mir wurde klar, dass ich dies wahrscheinlich aktualisieren sollte, falls jemand, der dies liest, es versäumt hat, sich durch den Thread in den UDK-Foren zu klicken. Ein Moderator sagte mir, dass alles, was ich tun möchte, ohne Modifikationen des Motors nicht möglich ist.

1) Leider ist der benutzerdefinierte Knoten die einzige Möglichkeit, HLSL in UDK-Materialien zu integrieren.

2) UE3 wird nicht vollständig zurückgestellt, sodass bei Nachbearbeitungseffekten nur Farbe und Tiefe verfügbar sind. Derzeit gibt es keinen Knoten, über den Sie auf die Position am aktuellen Pixel zugreifen können. Dies wäre jedoch sehr nützlich (und diese Berechnung wird in vielen Shadern wie der Schattenfilterung durchgeführt).

3) Das Rendern von alternativen POVs wird durch Szenenaufnahmen unterstützt, aber das einzige Attribut, das erfasst werden kann, ist die Farbe.

4) Dies ist nur bei Änderungen des Motorcodes möglich.

Grundsätzlich erfordern alle Dinge, nach denen Sie fragen, vollen Zugriff auf die UE3-Quelle.

Zitat: http://forums.epicgames.com/showthread.php?p=27609556#post27609556

Neverender
quelle
0

Für das, was Sie fragen, würde ich die UDK nicht vorschlagen. Sie haben keinen nativen Zugriff.

Selbst wenn UDK Ihnen Skriptzugriff auf das bietet, wonach Sie fragen, wäre dies wahnsinnig träge, da UnrealScript nicht die schnellste Sprache ist.

Unreal verwendet kein verzögertes Rendern. Wo hast du das gehört? Einige Lizenznehmer haben das verzögerte Rendern implementiert. aber nativ wird es nicht mitgeliefert.

Davon abgesehen bin ich kein Grafiker :)

AA Grapsas
quelle
Sie haben keinen Zugriff auf die UE3-Quell- oder native Klassen, wie dies bei "richtigen" Lizenznehmern der Fall ist, sodass Sie die Engine per se nicht gründlich hacken können. Mit DLLBind ( udn.epicgames.com/Three/DLLBind.html ) können Sie jedoch nativen Code schreiben und aus UnrealScript aufrufen, was für Optimierungszwecke ausreichen sollte.
Danke für die Antwort; Ich bin mir jedoch ziemlich sicher, dass das meiste, was ich erreichen möchte, hypothetisch vom Leistungsstandpunkt aus problemlos in UnrealScript implementiert werden kann. Die Leistung der ersten beiden Dinge, nach denen ich gefragt habe, hängt hauptsächlich von den verwendeten Shadern ab, nicht von UnrealScript. Für den dritten und vierten Teil könnte ich idealerweise verlangen, dass die Szene in ein bestimmtes Renderziel mit einem bestimmten Material gerendert wird, das alle Standardmaterialien in der Szene überschreibt. Keiner der Teile wäre besonders skriptintensiv. Die Arbeitsbelastung würde immer noch auf den Motor fallen.
Neverender