//namespace UnityEngine.PostProcessing //{ // public sealed class GrainComponent : PostProcessingComponentRenderTexture // { // static class Uniforms // { // internal static readonly int _Grain_Params1 = Shader.PropertyToID("_Grain_Params1"); // internal static readonly int _Grain_Params2 = Shader.PropertyToID("_Grain_Params2"); // internal static readonly int _GrainTex = Shader.PropertyToID("_GrainTex"); // internal static readonly int _Phase = Shader.PropertyToID("_Phase"); // } // public override bool active // { // get // { // return model.enabled // && model.settings.intensity > 0f // && SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.ARGBHalf) // && !context.interrupted; // } // } // RenderTexture m_GrainLookupRT; // public override void OnDisable() // { // GraphicsUtils.Destroy(m_GrainLookupRT); // m_GrainLookupRT = null; // } // public override void Prepare(Material uberMaterial) // { // var settings = model.settings; // uberMaterial.EnableKeyword("GRAIN"); // float rndOffsetX; // float rndOffsetY; //#if POSTFX_DEBUG_STATIC_GRAIN // // Chosen by a fair dice roll // float time = 4f; // rndOffsetX = 0f; // rndOffsetY = 0f; //#else // float time = Time.realtimeSinceStartup; // rndOffsetX = Random.value; // rndOffsetY = Random.value; //#endif // // Generate the grain lut for the current frame first // if (m_GrainLookupRT == null || !m_GrainLookupRT.IsCreated()) // { // GraphicsUtils.Destroy(m_GrainLookupRT); // m_GrainLookupRT = new RenderTexture(192, 192, 0, RenderTextureFormat.ARGBHalf) // { // filterMode = FilterMode.Bilinear, // wrapMode = TextureWrapMode.Repeat, // anisoLevel = 0, // name = "Grain Lookup Texture" // }; // m_GrainLookupRT.Create(); // } // var grainMaterial = context.materialFactory.Get("Hidden/Post FX/Grain Generator"); // grainMaterial.SetFloat(Uniforms._Phase, time / 20f); // Graphics.Blit((Texture)null, m_GrainLookupRT, grainMaterial, settings.colored ? 1 : 0); // // Send everything to the uber shader // uberMaterial.SetTexture(Uniforms._GrainTex, m_GrainLookupRT); // uberMaterial.SetVector(Uniforms._Grain_Params1, new Vector2(settings.luminanceContribution, settings.intensity * 20f)); // uberMaterial.SetVector(Uniforms._Grain_Params2, new Vector4((float)context.width / (float)m_GrainLookupRT.width / settings.size, (float)context.height / (float)m_GrainLookupRT.height / settings.size, rndOffsetX, rndOffsetY)); // } // } //}