was ist der unterschied zwischen shader und ray tracing?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Shader sämtliche Effekte die von der Grafikkarte auf ein Bild angewand werden. Also Spiegelungen, Bloom, lens flare, Welleneffekte.... Manchmal sind sogar Dinge wie Haare nur ein Shader(Nvidia hair works zum Beispiel). Shader Einheiten auf Grafikkarten machen sehr viel mehr außer nur Schatten.

Der entsprechende shader Mod kann sganz unterschiedliche shadereffekte beinhalten.

Ray tracing ist eine Methode um Beleuchtung und Schatten (oder andere Dinge) zu berechnen. Nähmlich dadurch dass man den Pfad des Lichtes (oder eines ähnlichen Pfades) verfolgt, ggf auch über mehrere Reflektionen.

guten Abend,

Raytracing - Raytracing steht für eine Grafik-Technologie, die sichtbare und nicht sichtbare Lichtstrahlen realistisch berechnet. Sie ermöglicht eine lebensechte Beleuchtung in Computerspielen und animierten 3D-Grafiken und kommt zunehmend als hardwareseitiges Feature in Form von Echtzeit-Raytracing zum Einsatz. - klick hier für mehr Infos

Nein, Raytracing berechnet realistisch, wie der Schatten ausfällt auf den Pixel genau. Shader sagt eben von dort nach dort, meine ich.

Shader ist in vielen Aspekten vielfältiger. Der Shader ist ungenauer, aber ist ein detailgenauer Shader wichtig? Was mir bei Shadern gut gefällt ist der Schatten des Charakters, das Atmen der Bäume und Wiesen, Sonnenstrahlen die in jedem Winkel einfallen, ein glasklares Wasser mit Unterwassereffekten und schöne runde wattige Wolken.

Woher ich das weiß:Hobby – Spiele seit 8 Jahren gemoddet Minecraft
Kelec  27.10.2022, 00:28

Ich finde die Namensgebung bei MC hier aber etwas unglücklich, denn das würde ja implizieren, dass Raytracing "den" Shader ersetzt, was ja nicht der Fall ist.

Das Licht wird eben in dem Fall nur mit Raytracing berechnet und es wird dafür kein Shader verwendet, aber die Shader sind natürlich auch mit Raytracing weiterhin aktiv, sie kümmern sich eben nur nicht mehr um die Beleuchtung.

0
Tyldu  27.10.2022, 01:04
@Kelec

es wird normalerweise schon ein shader benutzt um raytracing zu berechnen. normalerweise ein compute shader oder extra dafür ausgelegte shader-typen wenn die grafikkarte hardware-raytracing unterstützt.

0
Kelec  27.10.2022, 08:09
@Tyldu

Ja das Raytracing ist wieder ein eigener Shadertyp, daher ist die Namensgebung ja auch unglücklich. Aber selbst wenn man Raytracing nicht als Shader in dem Sinne bezeichnen würde, werden die ja auch noch benutzt.

0
Tyldu  27.10.2022, 08:15
@Kelec

erstmal sollte man das nicht tun weils schlichtweg falsch ist. abgesehen davon ist es durchaus möglich nur raytracing für die darstellung zu nutzen.

0
Kelec  27.10.2022, 08:18
@Tyldu
erstmal sollte man das nicht tun weils schlichtweg falsch ist

Das meine ich auch.

ist es durchaus möglich nur raytracing für die darstellung zu nutzen.

Die Shader berechnen ja auch die Vertices usw und da hat meines wissens nach Raytracing ja noch nichts damit zu tun. Das kümmert sich ja nur um das Licht nicht um das restliche Rendering.

0
Tyldu  27.10.2022, 08:28
@Kelec

naja, die vertices liegen eigentlich einfach iwo im vram. man kann theoretisch auch ganz auf vertices verzichten und einfach zb in ein SVO raytracen. ist aber vermutlich nicht in minecraft + optifine so ohne weiteres möglich.

aber an sich kümmert sich raytracing schon um die gesamte darstellung. wenn man denn vertices hat dann muss man die halt im computeshader verarbeiten für das finale bild.

das einzige wo man mit opengl wohl nicht um vertex und fragment shader kommt ist die textur die sich durch das raytracing ergibt auf den bildschirm zu rendern. das sind aber mehr oder weniger einfach zwei fast leere shader.

0
Kelec  27.10.2022, 08:59
@Tyldu

Werden aber nicht die Finalen Vertices bereits durch die Shader erzeugt?

Also die Tesselation Shader und Geometrie Shader modifizieren ja eben die Vertices selbst und danach sind sie quasi final.

Was SVO betrifft verwendet die GPU für die keinen einzigen Shader Core außer die Raytracing Cores (Hardware Raytracing voreausgesetzt)?

0
Tyldu  27.10.2022, 09:17
@Kelec

die vertices werden normal einfach von der HDD in den VRAM geladen (einfach als modelle). Im vertex shader werden sie dann gegebenenfalls noch transformiert, so dass sie an einer bestimmten stelle im bild sind und dann werden diese transformierten vertices an den fragment shader weiter gegeben.

das ist aber alles nicht umbedingt nöting. wenn man software raytracing nutzt dann kann man die vertices von den modellen auch einfach aus dem VRAM auslesen und gegen diese in einem compute shader raytracen.

tesselation und geometrie shader sind die zwei shader typen die tatsächlich neue vertices erstellen können. das passiert dann aber glaub ich wirklich jeden pipeline durchlauf also da ändert sich im VRAM dann nichts (da bin ich mir jetzt aber selber nicht zu 100% sicher)

was hardware raytracing angeht bin ich kein experte aber ich wüsste ehrlich gesagt nicht wofür man dann noch einen gewöhnlichen shader brauchen sollte. was für eine art von core benutzt wird hängt wohl sehr stark von der architektur des chips ab. wenn du da mehr wissen willst kannst du dir zb mal das hier durchlesen

1
Kelec  27.10.2022, 09:25
@Tyldu

Danke für die Erklärung.

Aber auch wenn die tesselation und geometrie shader jeden Pipelinedurchlauf laufen braucht man deren Ergebnisse ja entweder fürs Raytracing weil der Compute Shader dafür ja alle Vertices benötigt, also auch die neu erzeugten.

Selbst wenn tesselation und geometrie Shader nach dem Raytracing kommen würden sie ja dennoch noch verwendung finden.

Oder wird die Funktion dieser Shader durch Raytracing obsolet.

0
Kelec  27.10.2022, 09:31
@Kelec

Hab mir gerade den Link durchgelesen und in der Raytracing Pipeline kommen zumindest keine Vertex und Fragment Shader mehr vor ob die anderen Shader Typen da dann darunter fallen ergibt sich für mich jetzt direkt nicht.

Es entfällt eben die Rasterisierung beim Raytracing.

Ob alle möglichen Operationen der Shader Cores dadurch obsolet werden ist natürlich eine andere Frage, aber an sich auch egal.

Hat mit aufjedenfall mehr einblick verschafft, da ich dachte, dass das Raytracing an sich nur Licht berechnet nicht aber sonstige Transformationen vornimmt welche ja von Shadercores gemacht werden.

0
Tyldu  27.10.2022, 09:48
@Kelec

also tesselation und geometrie shader gehören zu der rasterization pipeline (genauso wie vertex und fragment shader)

wenn man software raytracing macht dann nutzt man normalerweise die compute pipeline und speichert vertices einfach in einem shader storage buffer (SSBO) oder nutzt direkt etwas anderes zb SVO anstelle von vertices.

also im normalfall nutzt/braucht man dann tesselation bzw geometrie shader auch gar nicht.

aber software raytracing ist sowieso nicht allzu verbreitet weil es nicht so effizient ist für echtzeit berechnungen. wirklich verwendung findet sowas dann eher in renderen wie bei blender zb.

bei hardware raytracing hingegen gibt es tesselation und geometrie shader gar nicht in der pipeline.

hier wäre nochmal ne übersicht über compute und rasterization pipline in vulkan beispielsweise falls das etwas klarheit schafft.

1
Kelec  27.10.2022, 10:40
@Tyldu

Aber sind die Shader Cores dann nur fürs Rastern da ich dachte die verwendet man auch für andere GPU unterstütze Aufgaben. Ich glaube bei OpenCV kann man die ja für Edgedetection usw auch verwenden, bzw für Hardware unterstützte Transformationen in einem Dreidimensionalen Raum zB für Berechnungen oder sind das andere Cores.

Ich hatte da eben nur immer im Hinterkopf, dass so etwas durchaus auch mit den Shader Units gemacht wird und nicht nur reines Rendering.

0
Tyldu  27.10.2022, 10:50
@Kelec

naja, da gehts jetzt schon sehr weit in die GPU architektur rein, das kann sich von chip zu chip schon stark unterscheiden.

da müsste man dann speziell für jede karte ggf nachschauen was für eine art von cores vorhanden ist und welche für was verwendet werden.

0
Narrativium  27.10.2022, 11:26
@Tyldu

Wahnsinn! Da schreibt man eine simple Antwort und dann wird darunter heiß fachgesimpelt mit Wörtern die ich nicht verstehe...

1

ein shader ist mehr oder weniger ein programm das auf der grafikkarte läuft.

raytracing bezeichnet eine rendering technik in der (anders als bei der gängigen rasterisieung) die lichtstrahlen für jeden pixel auf deinem monitor realistisch berechnet wird.

raytracing kann beispielsweise in einem shader implementiert werden.