WikiDer > Pixelshader
EIN Pixelshader ist ein Code, der erweiterte Farbgebung in Rasterizern ermöglicht (einschließlich aktueller Grafikkarten) ermöglicht. Dieser Code wird für jedes gezeichnete Pixel ausgeführt und seine Aufgabe besteht darin, die Farbe dieses Pixels zu berechnen. Es hängt mit dem zusammen Vertex-Shader, das ist ein Stück Programmcode, der für jeden Scheitelpunkt ausgeführt wird.
Pixel-Shader werden seit langem beim Nicht-Echtzeit-Rendering verwendet und sind normalerweise ein Plugin für 3D-Pakete wie Maya und 3D Studio MAX, die einfach in C oder C geschrieben werden kann. Immerhin laufen sie auf dem normalen Prozessor, sodass die gesamte Funktionalität des Prozessors zur Verfügung steht.
Seit den Grafikkarten der DirectX-8-Generation stehen auch Pixel-Shader für das Echtzeit-Rendering zur Verfügung. Die Grafikkarte ist mit einem speziellen programmierbaren Prozessor ausgestattet, der den Pixel-Shader ausführt. Dieser Prozessor hat jedoch weit weniger Fähigkeiten als ein normaler Prozessor. Es ist speziell auf die Berechnung der Farbe eines Pixels ausgerichtet und verfügt über Funktionen wie das Lesen von Texturen, das Berechnen des Einfallswinkels eines Lichtstrahls (dp3) und die üblichen Rechenanweisungen wie Addition, Subtraktion, Multiplikation usw. Die neueren Versionen, Shading Model 2.0 und Shading Model 3.0 haben immer mehr Funktionen hinzugefügt, wie z Programmschleifen erlaubt) und das Lesen von Texturen mit beliebigen Koordinaten.
Pixelshader können in a . programmiert werden Assemblersprache, eine Sprache, die der Implementierung in der Hardware sehr ähnlich ist. Schwierig zu programmieren, aber am effizientesten, wenn man die Leistung bedenkt. Ein Beispiel für eine Pixel-Shader-Baugruppe:
ps_2_0dcl_2d s0dcl t0.xytexld r1, t0, s0mov oC0, r1
Pixelshader können auch in einer höheren Sprache programmiert werden, was bedeutet, dass Sie weniger mit der Funktionsweise der Hardware zu tun haben und die für die Leute oft leichter zu lesen ist. Ein Beispiel für eine solche Sprache ist NVIDIAsCg, (C für Grafiken). Ein Stück CG:
float4 brightLightMapDecal(float4 color : COLOR, float4 decalCoord : TEXCOORD0, float4 lightMapCoord : TEXCOORD1, Uniform Sampler2D Abziehbild, Uniform Sampler2D LightMap) : COLOR{ float4 d = tex2Dproj(decal, decalCoord); float4 lm = tex2Dproj(lightMap, lightMapCoord); Rückgabe 2.0 * Farbe * d * lm; }