
My idea was to render everything into a texture and draw RGB channels separately using addition as blending mode. This actually works perfectly, but only where there are some pixels (the rest has Alpha 0). For example in this case I'd expect the background to be blue (since the RenderTarget has blue as the ClearColor) but it ends up black. I'm not sure I'm explaining it properly but this should show it clearly enough:
Code: Select all
<?xml version="1.0" encoding="iso-8859-1" ?>
<ZApplication Name="App" Caption="ZGameEditor application" ClearColor="0.502 0.502 1 1" ScreenMode="0" Camera="cam_Ortho" LightPosition="0 10 5" ViewportRatio="3" FileVersion="2">
<OnLoaded>
<ZExpression>
<Expression>
<![CDATA[float TilesPerY = 12;
float TilesPerX = 21;
cam_Ortho.OrthoZoom = TilesPerY;
float CameraRatio = 16/9;
ProjectionRender.Scale.X = TilesPerY*CameraRatio;
ProjectionRender.Scale.Y = TilesPerY;]]>
</Expression>
</ZExpression>
</OnLoaded>
<OnUpdate>
<ZExpression>
<Expression>
<![CDATA[transf_Box.Rotate.X = noise2(App.Time*0.0234,sin(App.Time*0.054));
transf_Box.Rotate.Y = noise2(App.Time*0.0235,cos(App.Time*0.034));
transf_Box.Rotate.Z = noise2(sin(App.Time*0.07+0.5), App.Time*0.07);]]>
</Expression>
</ZExpression>
</OnUpdate>
<OnBeginRenderPass>
<SetRenderTarget RenderTarget="rendTarg_CamFeedDouble"/>
</OnBeginRenderPass>
<OnRender>
<RenderTransformGroup Name="transf_Box" Scale="3 3 3" Rotate="0.1015 0.1675 0.139">
<Children>
<UseMaterial Material="mat_Lit"/>
<RenderMesh Mesh="mesh_Box"/>
<UseMaterial Material="mat_Wireframe"/>
<RenderTransform Scale="2 2 2"/>
<RenderMesh Mesh="mesh_Crystal"/>
</Children>
</RenderTransformGroup>
<RenderTransformGroup Name="ProjectionRender" Comment="Used at the end of the rendering pass" Scale="21.3333 12 1">
<Children>
<Group>
<Children>
<SetRenderTarget RenderTarget="rendTarg_CamFeed"/>
<UseMaterial Material="mat_CamFeedDouble"/>
<RenderMesh Mesh="mesh_Rectangle"/>
<SetRenderTarget Comment="Free"/>
</Children>
</Group>
<Group Comment="Base">
<Children>
<UseMaterial Material="mat_ColorMondrian"/>
<RenderSetColor Color="0 0 0 1"/>
<RenderMesh Mesh="mesh_Rectangle"/>
</Children>
</Group>
<Group Comment="Separate RGB">
<Children>
<UseMaterial Material="mat_CamFeed"/>
<RenderSetColor Comment="Red" Color="1 0 0 1"/>
<RenderMesh Mesh="mesh_Rectangle"/>
<RenderSetColor Comment="Green" Color="0 1 0 1"/>
<RenderTransform Name="transf_G" Rotate="0 0 -0.0007"/>
<RenderMesh Mesh="mesh_Rectangle"/>
<RenderSetColor Comment="Blue" Color="0 0 1 1"/>
<RenderTransform Name="transf_B" Rotate="0 0 -0.0021"/>
<RenderMesh Mesh="mesh_Rectangle"/>
</Children>
</Group>
</Children>
</RenderTransformGroup>
</OnRender>
<Content>
<Material Name="mat_ColorMondrian" Shading="1" Light="0"/>
<RenderTarget Name="rendTarg_CamFeedDouble" Comment="512 * 288" CustomWidth="512" CustomHeight="288" ClearColor="0.5333 0.7725 0.9294 1"/>
<RenderTarget Name="rendTarg_CamFeed" Comment="256 * 144" CustomWidth="256" CustomHeight="144" ClearColor="0.5333 0.7725 0.9294 1" Filter="1"/>
<Material Name="mat_CamFeedDouble" Shading="1" Light="0" ZBuffer="0">
<Textures>
<MaterialTexture Name="matTex_CamFeedDouble" RenderTarget="rendTarg_CamFeedDouble" TextureWrapMode="2" TexCoords="1"/>
</Textures>
</Material>
<Material Name="mat_CamFeed" Shading="1" Light="0" Blend="2" ZBuffer="0">
<Textures>
<MaterialTexture RenderTarget="rendTarg_CamFeed" TextureWrapMode="2" TexCoords="1"/>
</Textures>
</Material>
<Camera Name="cam_Ortho" Kind="1" Position="0 0 15" OrthoZoom="12"/>
<Camera Name="cam_Perspective" Position="0 -3.8 30" Rotation="-0.02 0 0"/>
<Mesh Name="mesh_Rectangle">
<Producers>
<MeshBox Grid2DOnly="255"/>
</Producers>
</Mesh>
<Material Name="mat_Lit"/>
<Mesh Name="mesh_Box">
<Producers>
<MeshBox/>
</Producers>
</Mesh>
<Material Name="mat_Wireframe" Shading="2" Light="0"/>
<Mesh Name="mesh_Crystal">
<Producers>
<MeshSphere ZSamples="19"/>
<MeshNoise Scale="3 3 3" NoiseSpeed="3.5 2.44 1.03" NoiseScale="2.3 1.9 2.49"/>
<MeshTransform Scale="0.5 0.5 0.5"/>
</Producers>
</Mesh>
</Content>
</ZApplication>