no that’s intended, the environment probe is right next to very very bright spots, so everthing gets bright.
The environment probe is the thing with the tree/landscape icon. Move it around to see what fits well. You can also lower the specular/diffuse strength of the probe
It was encoded in the material type, it’s not an extra rendering step. Instead during the compose step the rendering would change depending on mat type.
For holograms I rendered basic 3d meshes with simple lighting to another rendertarget and then, for the pixels with materialid ==3 (hologram material) I loaded these pixels and applied some processing, like Gaussian blur etc.
It should be noted that I removed the specific “hologram” functionality 1 week ago, different material shaders are still possible though.
The hologram look is really nice, made me also curious when it was first posted
Reminds me of the material id bug in my renderer I didn’t solve until now… Argh.
at the beginning of Game1(), so the main game file in the EngineTest directory you can set
_graphics.SynchronizeWithVerticalRetrace = true;
(it is commented out)
Or you can update to the newest version and change the console settings to g_vsync = true (or g_fixFPS = 60)
Both of these only work if your PC can produce more than 60 fps obviously. If you cannot consistently produce more than 60 Vsync will settle with 30 fps
i had read ur approached on point light shadow. You r using 2d texture instead of cubemap, can i know which 1 is better? how about capture environment map in 2d texture is better thn cubemap?
well I pretty much covered that in the article. Both are the same 6 textures, either as an array (cubemap) or on one large canvas. With them being combined I can do custom filtering, so it’s better for me.
i am working on your code and like to share how i shorten the shaders.cs file in your code.
I would like to upload but i see that only image files are uploadable. I also dont know how to set the text as code. Sorry
The following text seems like a mess, but in vs2015 it was well formatet. If you want write a comment and i send the original perfectly formated file to you.
As you see i dont like to reference each shader parameter twice.
make it a member of the static class
set the value in the load routine
With the following code you simply define the static class members an directly pass the value to it in one step
If you like it yout cope and past. Nothing else has to be changed then the following:
make a static class:
public static class Globals
{
public static ContentManager content;
}
in the ScreenManager.load method just before calling the Shaders.Load method you set the content to the Globals member
Globals.content = content;
Shaders.Load(content);
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using DeferredEngine.Logic;
namespace DeferredEngine.Recources
{
public static class Shaders
{
//A static file which contains all shaders
//Born out of need for quick thoughtless shader building
//I am working on making seperate shading modules instead and will slowly shorten this one.
//Depth Reconstruction
public static Effect ReconstructDepth = Globals.content.Load<Effect>("Shaders/ScreenSpace/ReconstructDepth");
public static EffectParameter ReconstructDepthParameter_DepthMap = ReconstructDepth.Parameters["DepthMap"];
public static EffectParameter ReconstructDepthParameter_Projection = ReconstructDepth.Parameters["Projection"];
public static EffectParameter ReconstructDepthParameter_FarClip = ReconstructDepth.Parameters["FarClip"];
public static EffectParameter ReconstructDepthParameter_FrustumCorners = ReconstructDepth.Parameters["FrustumCorners"];
//Id Generator
public static Effect IdRenderEffect = Globals.content.Load<Effect>("Shaders/Editor/IdRender");
public static EffectParameter IdRenderEffectParameterWorldViewProj = IdRenderEffect.Parameters["WorldViewProj"];
public static EffectParameter IdRenderEffectParameterColorId = IdRenderEffect.Parameters["ColorId"];
public static EffectParameter IdRenderEffectParameterOutlineSize = IdRenderEffect.Parameters["OutlineSize"];
public static EffectParameter IdRenderEffectParameterWorld = IdRenderEffect.Parameters["World"];
public static EffectPass IdRenderEffectDrawId = IdRenderEffect.Techniques["DrawId"].Passes[0];
public static EffectPass IdRenderEffectDrawOutline = IdRenderEffect.Techniques["DrawOutline"].Passes[0];
//Billboard Renderer
public static Effect BillboardEffect = Globals.content.Load<Effect>("Shaders/Editor/BillboardEffect");
public static EffectParameter BillboardEffectParameter_WorldViewProj = BillboardEffect.Parameters["WorldViewProj"];
public static EffectParameter BillboardEffectParameter_WorldView = BillboardEffect.Parameters["WorldView"];
public static EffectParameter BillboardEffectParameter_AspectRatio = BillboardEffect.Parameters["AspectRatio"];
public static EffectParameter BillboardEffectParameter_FarClip = BillboardEffect.Parameters["FarClip"];
public static EffectParameter BillboardEffectParameter_Texture = BillboardEffect.Parameters["Texture"];
public static EffectParameter BillboardEffectParameter_DepthMap = BillboardEffect.Parameters["DepthMap"];
public static EffectParameter BillboardEffectParameter_IdColor = BillboardEffect.Parameters["IdColor"];
public static EffectTechnique BillboardEffectTechnique_Billboard = BillboardEffect.Techniques["Billboard"];
public static EffectTechnique BillboardEffectTechnique_Id = BillboardEffect.Techniques["Id"];
//Lines
public static Effect LineEffect = Globals.content.Load<Effect>("Shaders/Editor/LineEffect");
public static EffectParameter LineEffectParameter_WorldViewProj = LineEffect.Parameters["WorldViewProj"];
//Temporal AntiAliasing
//Vignette and CA
public static Effect PostProcessing = Globals.content.Load<Effect>("shaders/postprocessing/postprocessing");
public static EffectParameter PostProcessingParameter_ScreenTexture = PostProcessing.Parameters["ScreenTexture"];
public static EffectParameter PostProcessingParameter_ChromaticAbberationStrength = PostProcessing.Parameters["ChromaticAbberationStrength"];
public static EffectParameter PostProcessingParameter_SCurveStrength = PostProcessing.Parameters["SCurveStrength"];
public static EffectParameter PostProcessingParameter_WhitePoint = PostProcessing.Parameters["WhitePoint"];
public static EffectParameter PostProcessingParameter_PowExposure = PostProcessing.Parameters["PowExposure"];
public static EffectTechnique PostProcessingTechnique_VignetteChroma = PostProcessing.Techniques["VignetteChroma"];
public static EffectTechnique PostProcessingTechnique_Base = PostProcessing.Techniques["Base"];
//Hologram Effect
public static Effect HologramEffect = Globals.content.Load<Effect>("Shaders/Hologram/HologramEffect");
public static EffectParameter HologramEffectParameter_World = HologramEffect.Parameters["World"];
public static EffectParameter HologramEffectParameter_WorldViewProj = HologramEffect.Parameters["WorldViewProj"];
//Emissive Effect
public static Effect EmissiveEffect = Globals.content.Load<Effect>("Shaders/Emissive/EmissiveDraw");
public static EffectParameter EmissiveEffectParameter_World = EmissiveEffect.Parameters["World"];
public static EffectParameter EmissiveEffectParameter_ViewProj = EmissiveEffect.Parameters["ViewProjection"];
public static EffectParameter EmissiveEffectParameter_WorldViewProj = EmissiveEffect.Parameters["WorldViewProj"];
public static EffectParameter EmissiveEffectParameter_InvertViewProj = EmissiveEffect.Parameters["InvertViewProjection"];
public static EffectParameter EmissiveEffectParameter_Origin = EmissiveEffect.Parameters["Origin"];
public static EffectParameter EmissiveEffectParameter_CameraPosition = EmissiveEffect.Parameters["CameraPosition"];
public static EffectParameter EmissiveEffectParameter_Size = EmissiveEffect.Parameters["Size"];
public static EffectParameter EmissiveEffectParameter_NormalMap = EmissiveEffect.Parameters["NormalMap"];
public static EffectParameter EmissiveEffectParameter_DepthMap = EmissiveEffect.Parameters["DepthMap"];
public static EffectParameter EmissiveEffectParameter_EmissiveMap = EmissiveEffect.Parameters["EmissiveMap"];
public static EffectParameter EmissiveEffectParameter_Resolution = EmissiveEffect.Parameters["Resolution"];
public static EffectParameter EmissiveEffectParameter_EmissiveColor = EmissiveEffect.Parameters["EmissiveColor"];
public static EffectParameter EmissiveEffectParameter_EmissiveStrength = EmissiveEffect.Parameters["EmissiveStrength"];
public static EffectParameter EmissiveEffectParameter_Time = EmissiveEffect.Parameters["Time"];
public static EffectTechnique EmissiveEffectTechnique_DrawEmissiveBuffer = EmissiveEffect.Techniques["DrawEmissiveBuffer"];
public static EffectTechnique EmissiveEffectTechnique_DrawEmissiveSpecularEffect = EmissiveEffect.Techniques["DrawEmissiveSpecularEffect"];
public static EffectTechnique EmissiveEffectTechnique_DrawEmissiveDiffuseEffect = EmissiveEffect.Techniques["DrawEmissiveDiffuseEffect"];
//ScreenSpaceReflection Effect
public static Effect ScreenSpaceReflectionEffect = Globals.content.Load<Effect>("Shaders/ScreenSpace/ScreenSpaceReflections");
public static EffectParameter ScreenSpaceReflectionParameter_DepthMap = ScreenSpaceReflectionEffect.Parameters["DepthMap"];
public static EffectParameter ScreenSpaceReflectionParameter_NormalMap = ScreenSpaceReflectionEffect.Parameters["NormalMap"];
public static EffectParameter ScreenSpaceReflectionParameter_TargetMap = ScreenSpaceReflectionEffect.Parameters["TargetMap"];
public static EffectParameter ScreenSpaceReflectionParameter_Resolution = ScreenSpaceReflectionEffect.Parameters["resolution"];
public static EffectParameter ScreenSpaceReflectionParameter_Projection = ScreenSpaceReflectionEffect.Parameters["Projection"];
public static EffectParameter ScreenSpaceReflectionParameter_Time = ScreenSpaceReflectionEffect.Parameters["Time"];
public static EffectParameter ScreenSpaceReflectionParameter_FrustumCorners = ScreenSpaceReflectionEffect.Parameters["FrustumCorners"];
public static EffectParameter ScreenSpaceReflectionParameter_FarClip = ScreenSpaceReflectionEffect.Parameters["FarClip"];
public static EffectParameter ScreenSpaceReflectionParameter_NoiseMap = ScreenSpaceReflectionEffect.Parameters["NoiseMap"];
public static EffectTechnique ScreenSpaceReflectionTechnique_Default = ScreenSpaceReflectionEffect.Techniques["Default"];
public static EffectTechnique ScreenSpaceReflectionTechnique_Taa = ScreenSpaceReflectionEffect.Techniques["TAA"];
//Screen Space Ambient Occlusion Effect
public static Effect ScreenSpaceEffect = Globals.content.Load<Effect>("Shaders/ScreenSpace/ScreenSpaceAO");
public static EffectParameter ScreenSpaceEffectParameter_SSAOMap = ScreenSpaceEffect.Parameters["SSAOMap"];
public static EffectParameter ScreenSpaceEffectParameter_NormalMap = ScreenSpaceEffect.Parameters["NormalMap"];
public static EffectParameter ScreenSpaceEffectParameter_DepthMap = ScreenSpaceEffect.Parameters["DepthMap"];
public static EffectParameter ScreenSpaceEffectParameter_CameraPosition = ScreenSpaceEffect.Parameters["CameraPosition"];
public static EffectParameter ScreenSpaceEffectParameter_InverseViewProjection = ScreenSpaceEffect.Parameters["InverseViewProjection"];
public static EffectParameter ScreenSpaceEffectParameter_Projection = ScreenSpaceEffect.Parameters["Projection"];
public static EffectParameter ScreenSpaceEffectParameter_ViewProjection = ScreenSpaceEffect.Parameters["ViewProjection"];
public static EffectParameter ScreenSpaceEffect_FalloffMin = ScreenSpaceEffect.Parameters["FalloffMin"];
public static EffectParameter ScreenSpaceEffect_FalloffMax = ScreenSpaceEffect.Parameters["FalloffMax"];
public static EffectParameter ScreenSpaceEffect_Samples = ScreenSpaceEffect.Parameters["Samples"];
public static EffectParameter ScreenSpaceEffect_Strength = ScreenSpaceEffect.Parameters["Strength"];
public static EffectParameter ScreenSpaceEffect_SampleRadius = ScreenSpaceEffect.Parameters["SampleRadius"];
public static EffectParameter ScreenSpaceEffectParameter_InverseResolution = ScreenSpaceEffect.Parameters["InverseResolution"];
public static EffectParameter ScreenSpaceEffectParameter_FrustumCorners = ScreenSpaceEffect.Parameters["FrustumCorners"];
public static EffectTechnique ScreenSpaceEffectTechnique_SSAO = ScreenSpaceEffect.Techniques["SSAO"];
public static EffectTechnique ScreenSpaceEffectTechnique_BlurHorizontal = ScreenSpaceEffect.Techniques["BilateralHorizontal"];
public static EffectTechnique ScreenSpaceEffectTechnique_BlurVertical = ScreenSpaceEffect.Techniques["BilateralVertical"];
//Gaussian Blur
public static Effect GaussianBlurEffect = Globals.content.Load<Effect>("Shaders/ScreenSpace/GaussianBlur");
public static EffectParameter GaussianBlurEffectParameter_InverseResolution = GaussianBlurEffect.Parameters["InverseResolution"];
public static EffectParameter GaussianBlurEffectParameter_TargetMap = GaussianBlurEffect.Parameters["TargetMap"];
//DeferredCompose
public static Effect DeferredCompose = Globals.content.Load<Effect>("Shaders/Deferred/DeferredCompose");
public static EffectParameter DeferredComposeEffectParameter_ColorMap = DeferredCompose.Parameters["colorMap"];
public static EffectParameter DeferredComposeEffectParameter_diffuseLightMap = DeferredCompose.Parameters["diffuseLightMap"];
public static EffectParameter DeferredComposeEffectParameter_specularLightMap = DeferredCompose.Parameters["specularLightMap"];
public static EffectParameter DeferredComposeEffectParameter_volumeLightMap = DeferredCompose.Parameters["volumeLightMap"];
public static EffectParameter DeferredComposeEffectParameter_HologramMap = DeferredCompose.Parameters["HologramMap"];
public static EffectParameter DeferredComposeEffectParameter_SSAOMap = DeferredCompose.Parameters["SSAOMap"];
public static EffectParameter DeferredComposeEffectParameter_LinearMap = DeferredCompose.Parameters["LinearMap"];
public static EffectParameter DeferredComposeEffectParameter_SSRMap = DeferredCompose.Parameters["SSRMap"];
public static EffectParameter DeferredComposeEffectParameter_UseSSAO = DeferredCompose.Parameters["useSSAO"];
public static EffectTechnique DeferredComposeTechnique_NonLinear = DeferredCompose.Techniques["TechniqueNonLinear"];
public static EffectTechnique DeferredComposeTechnique_Linear = DeferredCompose.Techniques["TechniqueLinear"];
//DeferredClear
public static Effect DeferredClear = Globals.content.Load<Effect>("Shaders/Deferred/DeferredClear");
//Directional light
public static Effect deferredDirectionalLight = Globals.content.Load<Effect>("Shaders/Deferred/DeferredDirectionalLight");
public static EffectTechnique deferredDirectionalLightUnshadowed = deferredDirectionalLight.Techniques["Unshadowed"];
public static EffectTechnique deferredDirectionalLightSSShadowed = deferredDirectionalLight.Techniques["SSShadowed"];
public static EffectTechnique deferredDirectionalLightShadowed = deferredDirectionalLight.Techniques["Shadowed"];
public static EffectTechnique deferredDirectionalLightShadowOnly = deferredDirectionalLight.Techniques["ShadowOnly"];
public static EffectParameter deferredDirectionalLightParameterViewProjection = deferredDirectionalLight.Parameters["ViewProjection"];
public static EffectParameter deferredDirectionalLightParameterFrustumCorners = deferredDirectionalLight.Parameters["FrustumCorners"];
public static EffectParameter deferredDirectionalLightParameterCameraPosition = deferredDirectionalLight.Parameters["cameraPosition"];
public static EffectParameter deferredDirectionalLightParameterInverseViewProjection = deferredDirectionalLight.Parameters["InvertViewProjection"];
public static EffectParameter deferredDirectionalLightParameterLightViewProjection = deferredDirectionalLight.Parameters["LightViewProjection"];
public static EffectParameter deferredDirectionalLightParameterLightView = deferredDirectionalLight.Parameters["LightView"];
public static EffectParameter deferredDirectionalLightParameterLightFarClip = deferredDirectionalLight.Parameters["LightFarClip"];
public static EffectParameter deferredDirectionalLightParameter_LightColor = deferredDirectionalLight.Parameters["lightColor"];
public static EffectParameter deferredDirectionalLightParameter_LightIntensity = deferredDirectionalLight.Parameters["lightIntensity"];
public static EffectParameter deferredDirectionalLightParameter_LightDirection = deferredDirectionalLight.Parameters["LightVector"];
public static EffectParameter deferredDirectionalLightParameter_ShadowFiltering = deferredDirectionalLight.Parameters["ShadowFiltering"];
public static EffectParameter deferredDirectionalLightParameter_ShadowMapSize = deferredDirectionalLight.Parameters["ShadowMapSize"];
public static EffectParameter deferredDirectionalLightParameter_AlbedoMap = deferredDirectionalLight.Parameters["AlbedoMap"];
public static EffectParameter deferredDirectionalLightParameter_NormalMap = deferredDirectionalLight.Parameters["NormalMap"];
public static EffectParameter deferredDirectionalLightParameter_DepthMap = deferredDirectionalLight.Parameters["DepthMap"];
public static EffectParameter deferredDirectionalLightParameter_ShadowMap = deferredDirectionalLight.Parameters["ShadowMap"];
public static EffectParameter deferredDirectionalLightParameter_SSShadowMap = deferredDirectionalLight.Parameters["SSShadowMap"];
//Point Light
public static Effect deferredPointLight = Globals.content.Load<Effect>("Shaders/Deferred/DeferredPointLight");
public static EffectTechnique deferredPointLightUnshadowed = deferredPointLight.Techniques["Unshadowed"];
public static EffectTechnique deferredPointLightUnshadowedVolumetric = deferredPointLight.Techniques["UnshadowedVolume"];
public static EffectTechnique deferredPointLightShadowed = deferredPointLight.Techniques["Shadowed"];
public static EffectTechnique deferredPointLightShadowedVolumetric = deferredPointLight.Techniques["ShadowedVolume"];
public static EffectTechnique deferredPointLightWriteStencil = deferredPointLight.Techniques["WriteStencilMask"];
public static EffectParameter deferredPointLightParameterShadowMap = deferredPointLight.Parameters["ShadowMap"];
public static EffectParameter deferredPointLightParameterResolution = deferredPointLight.Parameters["Resolution"];
public static EffectParameter deferredPointLightParameter_WorldView = deferredPointLight.Parameters["WorldView"];
public static EffectParameter deferredPointLightParameter_WorldViewProjection = deferredPointLight.Parameters["WorldViewProj"];
public static EffectParameter deferredPointLightParameter_InverseView = deferredPointLight.Parameters["InverseView"];
public static EffectParameter deferredPointLightParameter_LightPosition = deferredPointLight.Parameters["lightPosition"];
public static EffectParameter deferredPointLightParameter_LightColor = deferredPointLight.Parameters["lightColor"];
public static EffectParameter deferredPointLightParameter_LightRadius = deferredPointLight.Parameters["lightRadius"];
public static EffectParameter deferredPointLightParameter_LightIntensity = deferredPointLight.Parameters["lightIntensity"];
public static EffectParameter deferredPointLightParameter_ShadowMapSize = deferredPointLight.Parameters["ShadowMapSize"];
public static EffectParameter deferredPointLightParameter_ShadowMapRadius = deferredPointLight.Parameters["ShadowMapRadius"];
public static EffectParameter deferredPointLightParameter_Inside = deferredPointLight.Parameters["inside"];
public static EffectParameter deferredPointLightParameter_Time = deferredPointLight.Parameters["Time"];
public static EffectParameter deferredPointLightParameter_FarClip = deferredPointLight.Parameters["FarClip"];
public static EffectParameter deferredPointLightParameter_LightVolumeDensity = deferredPointLight.Parameters["lightVolumeDensity"];
public static EffectParameter deferredPointLightParameter_NoiseMap = deferredPointLight.Parameters["NoiseMap"];
public static EffectParameter deferredPointLightParameter_AlbedoMap = deferredPointLight.Parameters["AlbedoMap"];
public static EffectParameter deferredPointLightParameter_NormalMap = deferredPointLight.Parameters["NormalMap"];
public static EffectParameter deferredPointLightParameter_DepthMap = deferredPointLight.Parameters["DepthMap"];
public static void Load(ContentManager content)
{
}
}
I don’t actually use shaders.cs any more for new things, and I am working on outsourcing the shader files into separate classes, I have done that for a few things now, but there is still lots to go.
It’s just something that was useful when it was a really simple program to have all the shaders accessible as globals.
however, thanks for the headsup, I think this is a great improvement in general and it makes stuff a lot easier if you only access this once.
I have taken your code and pushed it to the live version, should be much easier to use now.
I wasn’t aware that static class members are loaded only after the static class is accessed the first time. Interesting.
I guess the whole Load / Initialize separation should probably also be removed, it’s something I got used to from xna… but in most cases both want to be executed at the same time. Often times even as a constructor.
can we turn the cubemap of point light shadow into this form rather thn 2d texture strip. if possible, how it work? and how to calculate reflection vector?
Sure it’s just another form of storing the cubemaps.
I don’t remember the exact name of this projection but you can google different projections and find it. There is lots of info on conversion on the net, you should be able to implement that