i'm working on a small techdemo and i implemented the deferred renderer by cansin. Everything is working well so far. So i decided to modify it. I added a skysphere which is rendering onto a separate RenderTarget.
The final compositing shader overlays every drawn element on to the SkyMap.
float4 Color = tex2D(Diffuse, input.UV); //gets DiffuseMap float alpha = 1; //calculate alpha if (Color.a < 1) alpha = 0; float4 Lighting = tex2D(LightMap, input.UV); //gets LightMap float4 Sky = tex2D(SkyMap, input.UV); //gets SkyMap //float4 output = float4(Color.xyz * Lighting.xyz + Lighting.w, 1); float4 output = float4(Color.xyz * Lighting.xyz + Lighting.w, 1) * (1 - alpha) + tex2D(SkyMap, input.UV) * alpha; output = float4(Color.xyz, 1) * (1-alpha) + tex2D(SkyMap, input.UV) * alpha; return output;
As you can see i dont allow smooth alphavalues. They just can be 0 or 1. This kind of masking produces some outlines around every drawn object. I dont want that. You can see this behaviour on the attached screenshot. I know from blender, that this could be a problem with premultiplied values. But i dont know how i can do that in HLSL. So please give me some advices. Thats disturbing me..