stage
Linkt den View auf einen folgenden View-Stage, der den View zum Hinzufügen
weiterer Effekte nachbearbeitet. Auf diese Weise läßt sich eine View-Render-Kette
für komplexe Effekte wie etwa Shadow-Mapping definieren.
Typ:
VIEW*
Bemerkungen:
- Hat die nachfolgende Stufe keinen PROCESS_SCREEN-Flag
gesetzt, rendert der View in eine Zielbitmap und nicht auf den Bildschirm.
Hat der View keinen bmap-Parameter,
wird automatisch eine Render-Ziel-Bitmap von der Größe des gegenwärtigen
Views generiert. Nach dem Rendern wird der globale render_target-Pointer
auf die Zielbitmap gesetzt und macht sie durch den Texturparameter TargetMap für
die folgende Stufe verfügbar.
- Die folgende Stufe erbt sämtliche ihrer Parameter mit
Ausnahme von flags, material, bmap,
und stage vom View. Ist dies nicht erwünscht, verwenden Sie
zum Stetzen anderer Parameter vor dem Rendern, den ENABLE_RENDER-Event
des Materials.
- Die folgende Stufe braucht den SHOW-Flag
nicht zum Rendern. Um eine Postprocessing-Stufe außerstand zu setzen,
genügt es, stage auf NULL zu setzen.
- Die folgende Stufe rendert entweder die ganze Szene von neuem (PROCESS_TARGET nicht
gesetzt) oder, für 2D Postprocessing-Effekte, nur die TargetMap (PROCESS_TARGET gesetzt).
Sie können für 2D Postprocessing-Effekte Pixelshader verwenden,
nicht aber Vertex-Shader.
- Für eine View-Renderkette lassen sich beliebig viele Stufen
miteinander verknüpfen. Shadow-Mapping z.B. erfordert ein View-Rendering
von einer Lichtquelle in eine Tiefenmap, gefolgt von einem View,
welcher die Shadow-Map unter Verwendung der Tiefenmap als Quellmap
rendert, dem folgen ein oder zwei Postprocessing-Stufen zum Verwischen
und
schließlich noch ein View, der die Szene in Kombination mit der
verwischten Shadow-Map rendert.
- Je nach Komplexität des Stufen-Shaders und der Größe des Views
kann Postprocessing die Framerate merklich verringern. Trotzdem läßt
sich Postprocessing in einigen Fällen sogar zum Erhöhen der Framerate
verwenden, besonders dann, wenn komplexe Effekte und Shaders
benutzt werden. Dazu rendert der erste View nur in den Z-Buffer und
der Stufen-View rendert dann die gesamte Szene mit Shadern und reduziert
so die Anzahl der geshadeten Pixel durch frühes Z-Buffer-Clipping.
- View-Entities werden nach allen Views gerendert und sind daher von den Postprocessing-Stufen nicht betroffen.
Edition:
A7.07C
LC
Beispiel (lite-C):
MATERIAL* mtlEmboss = // a postprocessing material
{
effect = "
Texture TargetMap;
sampler2D smpSource = sampler_state { texture = <TargetMap>; };
float4 vecViewPort; // contains viewport pixel size in zw components
float4 embossPS( float2 Tex : TEXCOORD0 ) : COLOR0
{
float4 Color = float4( 1.0, 0.5, 0.5, 0.5 );
Color -= tex2D( smpSource, Tex.xy-vecViewPort.zw)*2.0;
Color += tex2D( smpSource, Tex.xy+vecViewPort.zw)*2.0;
Color.rgb = (Color.r+Color.g+Color.b)*0.333;
return Color;
}
technique emboss { pass one { PixelShader = compile ps_2_0 embossPS(); } }
technique fallback { pass one { } }
";
}
VIEW* viewEmboss = { material = mtlEmboss; flags = CHILD | PROCESS_TARGET; } // a postprocessing view
...
camera.stage = viewEmboss; // enable postprocessing for the camera view
Siehe auch:
VIEW, view.material, view.bmap, PROCESS_SCREEN / PROCESS_TARGET, render_target, render_stencil
► latest
version online