private PoolCollector() { s_ModelPool = new ModelPool(); s_ShaderPool = new ShaderPool(); s_RenderTargetPool = new RenderTargetPool(); s_TexturePool = new TexturePool(); s_AnimationPool = new AnimationPool(); }
public override void Render(ScriptableRenderContext context, ref RenderingData renderingData) { var camera = renderingData.camera; var cmd = CommandBufferPool.Get("Velocity Pass"); using (new ProfilingSample(cmd, "Velocity Pass")) { cmd.SetGlobalMatrix("_PreviousGPUViewProjection", previousGPUVPMatrix); cmd.SetGlobalTexture("_CameraDepthTex", renderingData.DepthTarget); cmd.SetGlobalVector("_PreviousJitterOffset", previousJitterOffset); var jitterOffset = renderingData.ProjectionJitter - new Vector2(.5f, .5f); cmd.SetGlobalVector("_CurrentJutterOffset", jitterOffset); cmd.SetCameraParams(renderingData.camera, false); cmd.SetViewProjectionMatrices(renderingData.ViewMatrix, renderingData.JitteredProjectionMatrix); cmd.SetRenderTarget(velocityBuffer, velocityBuffer); var jitterVelocity = Vector2.Scale(jitterOffset - previousJitterOffset, new Vector2(1f / renderingData.ResolutionX, 1f / renderingData.ResolutionY)); cmd.ClearRenderTarget(true, true, Color.black); //cmd.BlitFullScreen(BuiltinRenderTextureType.None, velocityBuffer, ShaderPool.Get("SarRP/VelocityBuffer"), (int)ShaderPass.VelocityBuffer); cmd.BlitFullScreen(BuiltinRenderTextureType.None, velocityBuffer, ShaderPool.Get(ShaderName), (int)ShaderPass.StaticVelocity); context.ExecuteCommandBuffer(cmd); cmd.Clear(); FilteringSettings filteringSettings = new FilteringSettings(RenderQueueRange.opaque); SortingSettings sortingSettings = new SortingSettings(renderingData.camera) { criteria = SortingCriteria.CommonOpaque }; var mat = ShaderPool.Get("SarRP/ForwardDefault"); mat.SetShaderPassEnabled("MotionVectors", false); sortingSettings.criteria = SortingCriteria.CommonOpaque; DrawingSettings drawingSettings = new DrawingSettings(new ShaderTagId("MotionVectors"), sortingSettings) { // overrideMaterial = ShaderPool.Get(ShaderName), // overrideMaterialPassIndex = (int)ShaderPass.OpaqueVelocity, enableDynamicBatching = true, enableInstancing = true, perObjectData = PerObjectData.MotionVectors, }; drawingSettings.SetShaderPassName(0, new ShaderTagId("MotionVectors")); RenderStateBlock stateBlock = new RenderStateBlock(RenderStateMask.Nothing); context.DrawRenderers(renderingData.cullResults, ref drawingSettings, ref filteringSettings, ref stateBlock); } previousGPUVPMatrix = SaveGPUViewProjection(renderingData); previousJitterOffset = renderingData.ProjectionJitter - new Vector2(.5f, .5f); context.ExecuteCommandBuffer(cmd); cmd.Clear(); CommandBufferPool.Release(cmd); }
public override void Render(ScriptableRenderContext context, ref MyRenderingData renderingData) { var camera = renderingData.camera; var cmd = CommandBufferPool.Get("Velocity Pass"); using (new ProfilingSample(cmd, "Velocity Pass")) { cmd.SetGlobalMatrix("_PreviousGPUViewProjection", previousGPUVPMatrix); cmd.SetGlobalTexture("_CameraDepthTex", renderingData.depthTarget); cmd.SetGlobalVector("_PreviousJitterOffset", previousJitterOffset); var jitterOffset = renderingData.projectionJitter - new Vector2(0.5f, 0.5f); cmd.SetGlobalVector("_CurrentJitterOffset", jitterOffset); cmd.SetCameraParams(renderingData.camera, false); cmd.SetViewProjectionMatrices(renderingData.viewMatrix, renderingData.jitteredProjectionMatrix); cmd.SetRenderTarget(velocityBuffer); cmd.ClearRenderTarget(true, true, Color.black); cmd.BlitFullScreen(BuiltinRenderTextureType.None, velocityBuffer, ShaderPool.Get(ShaderName), (int)ShaderPass.StaticVelocity); context.ExecuteCommandBuffer(cmd); cmd.Clear(); FilteringSettings filteringSettings = new FilteringSettings(RenderQueueRange.opaque); SortingSettings sortingSettings = new SortingSettings(renderingData.camera) { criteria = SortingCriteria.CommonOpaque }; DrawingSettings drawingSettings = new DrawingSettings(VelocityPassName, sortingSettings) { enableDynamicBatching = false, enableInstancing = true, perObjectData = PerObjectData.MotionVectors, }; RenderStateBlock stateBlock = new RenderStateBlock(RenderStateMask.Nothing); context.DrawRenderers(renderingData.cullResults, ref drawingSettings, ref filteringSettings, ref stateBlock); } previousGPUVPMatrix = SaveGPUViewProjection(renderingData); previousJitterOffset = renderingData.projectionJitter - new Vector2(.5f, .5f); context.ExecuteCommandBuffer(cmd); cmd.Clear(); CommandBufferPool.Release(cmd); }
public static Tileset GetTileset(SettingsFile settings, bool isAreaTS) { Tileset tileset = new Tileset(); try { // Select Tileset Info if (isAreaTS) { //if (settings.DeadRacer) tileset.AreaType = "glitch"; if (settings.RandomizeAreaType) { tileset.AreaType = AreaTypes[RNG.random.Next(0, 5)]; } else { tileset.AreaType = settings.AreaType; } } tileset.Tile = ($" tile_graphics { TileGraphicsPool[RNG.random.Next(0, TileGraphicsPool.Count())] }\n"); tileset.Overlay = ($" overlay_graphics { OverlayGraphicsPool[RNG.random.Next(0, OverlayGraphicsPool.Count())] }\n"); tileset.Palette = ($" palette { RNG.random.Next(1, NumPalettes) }\n"); tileset.Music = ($" music { MusicPool[RNG.random.Next(0, MusicPool.Count())] }\n"); if (RNG.random.Next(0, 2) == 0) // set shader { tileset.Shader = ($" { ShaderPool[RNG.random.Next(0, ShaderPool.Count())] }\n"); } tileset.Shader += "shader_param " + ((float)RNG.random.Next(0, 101) / 100); // set particles if (settings.DoParticles) { var loop = RNG.random.Next(1, settings.MaxParticleEffects); if (settings.GenerateCustomParticles) { for (int i = 0; i < loop; i++) { tileset.Particles += (" global_particle_" + (i + 1).ToString() + $" { ParticleGenerator.GetParticle(settings) }\n"); } } else { for (int i = 0; i < loop; i++) { tileset.Particles += (" global_particle_" + (i + 1).ToString() + $" { ParticlePool[RNG.random.Next(0, ParticlePool.Count())] }\n"); } } } // bgsolid for auto-refresh //if (settings.AutoRefresh || settings.LevelMerge) // Extras += "background_graphics bgsolid\n"; if (settings.LevelMerge) { tileset.Extras += "global_particle_1 None\nglobal_particle_2 None\nglobal_particle_3 None tile_particle_1 None tile_particle_2 None tile_particle_3 None tile_particle_4 None tile_particle_5 None\n"; } // generate Art Alts if (settings.AltLevel != "None") { tileset.ArtAlts = GetArtAlts(settings); } // extras and physics if (settings.UseAreaTileset == isAreaTS) { if (settings.DoNevermoreTilt && RNG.random.Next(0, 6) == 0 /*!(isAreaTS && !settings.UseAreaTileset)*/) { tileset.DoTilt = ($" do_tilt true\n"); } if (settings.DoExodusWobble && RNG.random.Next(0, 6) == 0 /*!(isAreaTS && !settings.UseAreaTileset)*/) { tileset.DoWobble = ($" do_wobble true\n"); } if (settings.DoPhysics) { if (settings.PlatformPhysics) { tileset.Extras += " platform_physics " + Physics.PlatformPhysics() + "\n"; } if (settings.WaterPhysics) { tileset.Extras += " water_physics " + Physics.WaterPhysics() + "\n"; } if (settings.PlayerPhysics) { tileset.Extras += " player_physics " + Physics.PlayerPhysics() + "\n"; } if (settings.LowGravPhysics) { tileset.Extras += " lowgrav_physics " + Physics.LowGravPhysics() + "\n"; } } } // create "all", which is just the entire tileset in one string tileset.All = $"area_type {tileset.AreaType}\n" + tileset.Tile + "\n" + tileset.Overlay + "\n" + tileset.Particles + "\n" + tileset.Shader + "\n" + tileset.Palette + "\n" + tileset.Music + "\n" + tileset.Extras; } catch (Exception ex) { MessageBox.Show($"Error creating tileset. Exception {ex}", "Error", MessageBoxButton.OK, MessageBoxImage.Error); throw; } return(tileset); }