2 using System.Diagnostics;
4 using System.Threading.Tasks;
6 using SiliconStudio.Paradox.DataModel;
7 using SiliconStudio.Paradox.Effects.Modules;
9 using Paradox.Effects.Yebis;
11 using SiliconStudio.Paradox.Games;
12 using SiliconStudio.Paradox;
13 using SiliconStudio.Paradox.Effects;
14 using SiliconStudio.Paradox.Graphics;
15 using SiliconStudio.Paradox.Graphics.Data;
16 using SiliconStudio.Paradox.Games.MicroThreading;
17 using SiliconStudio.Paradox.Games.Mathematics;
18 using Paradox.Framework.Shaders;
32 public EffectMesh
Mesh;
63 var renderContext = engineContext.RenderContext;
64 var rootRenderPass = renderContext.RootRenderPass;
66 var linearColorPass =
new RenderPass(
"LinearColor");
67 var reinhardColorPass =
new RenderPass(
"ReinhardColor");
69 var filmicColorPass =
new RenderPass(
"FilmicColor");
70 var composeColorPass =
new RenderPass(
"ComposeColor");
72 rootRenderPass.AddPass(linearColorPass);
73 rootRenderPass.AddPass(reinhardColorPass);
74 rootRenderPass.AddPass(yebisPass);
75 rootRenderPass.AddPass(filmicColorPass);
76 rootRenderPass.AddPass(composeColorPass);
137 public static async
Task Run(EngineContext engineContext)
140 renderingSetup.Initialize(engineContext);
141 var device = engineContext.RenderContext.GraphicsDevice;
143 var effectMeshGroup =
new RenderPassListEnumerator();
144 engineContext.RenderContext.RenderPassEnumerators.Add(effectMeshGroup);
147 EffectOld linearEffect = engineContext.RenderContext.BuildEffect(
"LinearColor")
149 .Using(
new BasicShaderPlugin(
new ShaderClassSource(
"ComputeToneMap",
"0")));
150 var linearMesh =
new EffectMesh(linearEffect);
151 renderingSetup.LinearColorPlugin.RenderPass.AddPass(linearMesh.EffectMeshPasses[0].EffectPass);
152 var linearTexture = Texture2D.New(engineContext.RenderContext.GraphicsDevice, 512, 512, PixelFormat.R16G16B16A16_Float, TextureFlags.RenderTarget);
153 linearMesh.Parameters.Set(RenderTargetKeys.RenderTarget, linearTexture.ToRenderTarget());
154 effectMeshGroup.AddMesh(linearMesh);
156 EffectOld reinhardColor = engineContext.RenderContext.BuildEffect(
"ReinhardColor")
158 .Using(
new BasicShaderPlugin(
new ShaderClassSource(
"ComputeToneMap",
"1")));
159 var reinhardMesh =
new EffectMesh(reinhardColor);
160 renderingSetup.ReinhardColorPlugin.RenderPass.AddPass(reinhardMesh.EffectMeshPasses[0].EffectPass);
161 var reinhardTexture = Texture2D.New(engineContext.RenderContext.GraphicsDevice, 512, 512, PixelFormat.R16G16B16A16_Float, TextureFlags.RenderTarget);
162 reinhardMesh.Parameters.Set(RenderTargetKeys.RenderTarget, reinhardTexture.ToRenderTarget());
163 effectMeshGroup.AddMesh(reinhardMesh);
165 var yebisTexture = Texture2D.New(engineContext.RenderContext.GraphicsDevice, 512, 512, PixelFormat.R8G8B8A8_UNorm, TextureFlags.RenderTarget);
167 var yebisPlugin = renderingSetup.YebisPlugin;
169 yebisPlugin.RenderSource = reinhardTexture;
170 yebisPlugin.RenderTarget = yebisTexture.ToRenderTarget();
172 yebisPlugin.Glare.Enable =
false;
173 yebisPlugin.Lens.Vignette.Enable =
false;
174 yebisPlugin.Lens.Distortion.Enable =
false;
176 yebisPlugin.ToneMap.Exposure = 1.0f;
177 yebisPlugin.ToneMap.Gamma = 2.2f;
178 yebisPlugin.ToneMap.Type = ToneMapType.Reinhard;
179 engineContext.RenderContext.Register(yebisPlugin);
182 EffectOld filmicEffect = engineContext.RenderContext.BuildEffect(
"FilmicColor")
184 .Using(
new BasicShaderPlugin(
new ShaderClassSource(
"ComputeToneMap",
"2")));
185 var filmicMesh =
new EffectMesh(filmicEffect);
186 renderingSetup.FilmicColorPlugin.RenderPass.AddPass(filmicMesh.EffectMeshPasses[0].EffectPass);
187 var filmicTexture = Texture2D.New(engineContext.RenderContext.GraphicsDevice, 512, 512, PixelFormat.R16G16B16A16_Float, TextureFlags.ShaderResource | TextureFlags.RenderTarget);
188 filmicTexture.Name =
"FilmicTexture";
189 filmicMesh.Parameters.Set(RenderTargetKeys.RenderTarget, filmicTexture.ToRenderTarget());
190 effectMeshGroup.AddMesh(filmicMesh);
192 EffectOld mainEffect = engineContext.RenderContext.BuildEffect(
"ComposeToneMap")
194 .Using(
new BasicShaderPlugin(
new ShaderClassSource(
"ComposeToneMap")));
195 var mainMesh =
new EffectMesh(mainEffect);
196 renderingSetup.MainPlugin.RenderPass.AddPass(mainMesh.EffectMeshPasses[0].EffectPass);
198 mainMesh.Parameters.Set(TexturingKeys.Texture0, linearTexture);
199 mainMesh.Parameters.Set(TexturingKeys.Texture2, yebisTexture);
200 mainMesh.Parameters.Set(TexturingKeys.Texture3, filmicTexture);
201 mainMesh.Parameters.Set(RenderTargetKeys.RenderTarget, engineContext.RenderContext.RenderTarget);
202 effectMeshGroup.AddMesh(mainMesh);
static readonly RenderingSetup Singleton
void Initialize(EngineContext engineContext)
PostEffectPlugin ReinhardColorPlugin
Plugin used for the main rendering view.
PostEffectPlugin FilmicColorPlugin
RenderPass is a hierarchy that defines how to collect and render meshes.
PostEffectPlugin LinearColorPlugin
static async Task Run(EngineContext engineContext)