12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- using System;
- namespace UnityEngine.PostProcessing
- {
- public sealed class GrainComponent : PostProcessingComponentRenderTexture<GrainModel>
- {
- public override bool active
- {
- get
- {
- return base.model.enabled && base.model.settings.intensity > 0f && SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.ARGBHalf) && !this.context.interrupted;
- }
- }
- public override void OnDisable()
- {
- GraphicsUtils.Destroy(this.m_GrainLookupRT);
- this.m_GrainLookupRT = null;
- }
- public override void Prepare(Material uberMaterial)
- {
- GrainModel.Settings settings = base.model.settings;
- uberMaterial.EnableKeyword("GRAIN");
- float realtimeSinceStartup = Time.realtimeSinceStartup;
- float value = Random.value;
- float value2 = Random.value;
- if (this.m_GrainLookupRT == null || !this.m_GrainLookupRT.IsCreated())
- {
- GraphicsUtils.Destroy(this.m_GrainLookupRT);
- this.m_GrainLookupRT = new RenderTexture(192, 192, 0, RenderTextureFormat.ARGBHalf)
- {
- filterMode = FilterMode.Bilinear,
- wrapMode = TextureWrapMode.Repeat,
- anisoLevel = 0,
- name = "Grain Lookup Texture"
- };
- this.m_GrainLookupRT.Create();
- }
- Material material = this.context.materialFactory.Get("Hidden/Post FX/Grain Generator");
- material.SetFloat(GrainComponent.Uniforms._Phase, realtimeSinceStartup / 20f);
- Graphics.Blit(null, this.m_GrainLookupRT, material, (!settings.colored) ? 0 : 1);
- uberMaterial.SetTexture(GrainComponent.Uniforms._GrainTex, this.m_GrainLookupRT);
- uberMaterial.SetVector(GrainComponent.Uniforms._Grain_Params1, new Vector2(settings.luminanceContribution, settings.intensity * 20f));
- uberMaterial.SetVector(GrainComponent.Uniforms._Grain_Params2, new Vector4((float)this.context.width / (float)this.m_GrainLookupRT.width / settings.size, (float)this.context.height / (float)this.m_GrainLookupRT.height / settings.size, value, value2));
- }
- private RenderTexture m_GrainLookupRT;
- private 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");
- }
- }
- }
|