コード例 #1
0
        public HDRenderPipelineInstance(HDRenderPipeline owner)
        {
            m_Owner = owner;

            m_CameraColorBuffer        = Shader.PropertyToID("_CameraColorTexture");
            m_CameraSubsurfaceBuffer   = Shader.PropertyToID("_CameraSubsurfaceTexture");
            m_CameraFilteringBuffer    = Shader.PropertyToID("_CameraFilteringBuffer");
            m_CameraDepthStencilBuffer = Shader.PropertyToID("_CameraDepthTexture");
            m_CameraStencilBuffer      = Shader.PropertyToID("_CameraStencilTexture");

            m_CameraColorBufferRT        = new RenderTargetIdentifier(m_CameraColorBuffer);
            m_CameraSubsurfaceBufferRT   = new RenderTargetIdentifier(m_CameraSubsurfaceBuffer);
            m_CameraFilteringBufferRT    = new RenderTargetIdentifier(m_CameraFilteringBuffer);
            m_CameraDepthStencilBufferRT = new RenderTargetIdentifier(m_CameraDepthStencilBuffer);
            m_CameraStencilBufferRT      = new RenderTargetIdentifier(m_CameraStencilBuffer);

            m_DebugViewMaterialGBuffer = Utilities.CreateEngineMaterial("Hidden/HDRenderPipeline/DebugViewMaterialGBuffer");

            m_CombineSubsurfaceScattering = Utilities.CreateEngineMaterial("Hidden/HDRenderPipeline/CombineSubsurfaceScattering");
            m_DebugDisplayShadowMap       = Utilities.CreateEngineMaterial("Hidden/HDRenderPipeline/DebugDisplayShadowMap");

            m_ShadowPass = new ShadowRenderPass(owner.shadowSettings);

            // Init Gbuffer description
            m_gbufferManager.gbufferCount = m_LitRenderLoop.GetMaterialGBufferCount();
            RenderTextureFormat[]    RTFormat;
            RenderTextureReadWrite[] RTReadWrite;
            m_LitRenderLoop.GetMaterialGBufferDescription(out RTFormat, out RTReadWrite);

            for (int gbufferIndex = 0; gbufferIndex < m_gbufferManager.gbufferCount; ++gbufferIndex)
            {
                m_gbufferManager.SetBufferDescription(gbufferIndex, "_GBufferTexture" + gbufferIndex, RTFormat[gbufferIndex], RTReadWrite[gbufferIndex]);
            }

            m_VelocityBuffer = Shader.PropertyToID("_VelocityTexture");
            if (ShaderConfig.s_VelocityInGbuffer == 1)
            {
                // If velocity is in GBuffer then it is in the last RT. Assign a different name to it.
                m_gbufferManager.SetBufferDescription(m_gbufferManager.gbufferCount, "_VelocityTexture", Builtin.RenderLoop.GetVelocityBufferFormat(), Builtin.RenderLoop.GetVelocityBufferReadWrite());
                m_gbufferManager.gbufferCount++;
            }
            m_VelocityBufferRT = new RenderTargetIdentifier(m_VelocityBuffer);

            m_DistortionBuffer   = Shader.PropertyToID("_DistortionTexture");
            m_DistortionBufferRT = new RenderTargetIdentifier(m_DistortionBuffer);

            m_LitRenderLoop.Build();

            if (owner.lightLoopProducer)
            {
                m_LightLoop = owner.lightLoopProducer.CreateLightLoop();
            }

            if (m_LightLoop != null)
            {
                m_LightLoop.Build(owner.textureSettings);
            }

            m_SkyManager.skyParameters = owner.skyParametersToUse;
        }
コード例 #2
0
        public override void Build(RenderPipelineResources renderPipelineResources)
        {
            m_InitPreFGD = Utilities.CreateEngineMaterial("Hidden/HDRenderPipeline/PreIntegratedFGD");

            // For DisneyDiffuse integration values goes from (0.5 to 1.53125). GGX need 0 to 1. Use float format.
            m_PreIntegratedFGD            = new RenderTexture(128, 128, 0, RenderTextureFormat.RGB111110Float, RenderTextureReadWrite.Linear);
            m_PreIntegratedFGD.filterMode = FilterMode.Bilinear;
            m_PreIntegratedFGD.wrapMode   = TextureWrapMode.Clamp;
            m_PreIntegratedFGD.hideFlags  = HideFlags.DontSave;
            m_PreIntegratedFGD.Create();

            m_LtcData = new Texture2DArray(k_LtcLUTResolution, k_LtcLUTResolution, 3, TextureFormat.RGBAHalf, false /*mipmap*/, true /* linear */)
            {
                hideFlags  = HideFlags.HideAndDontSave,
                wrapMode   = TextureWrapMode.Clamp,
                filterMode = FilterMode.Bilinear
            };

            LoadLUT(m_LtcData, 0, TextureFormat.RGBAHalf, s_LtcGGXMatrixData);
            LoadLUT(m_LtcData, 1, TextureFormat.RGBAHalf, s_LtcDisneyDiffuseMatrixData);
            // TODO: switch to RGBA64 when it becomes available.
            LoadLUT(m_LtcData, 2, TextureFormat.RGBAHalf, s_LtcGGXMagnitudeData, s_LtcGGXFresnelData, s_LtcDisneyDiffuseMagnitudeData);

            m_LtcData.Apply();

            m_isInit = false;
        }
コード例 #3
0
        public void Build()
        {
            // Create unititialized. Lazy initialization is performed later.
            m_iblFilterGgx = new IBLFilterGGX();

            // TODO: We need to have an API to send our sky information to Enlighten. For now use a workaround through skybox/cubemap material...
            m_StandardSkyboxMaterial = Utilities.CreateEngineMaterial("Skybox/Cubemap");

            m_CurrentUpdateTime = 0.0f;
        }
コード例 #4
0
        void InitializeSSS()
        {
            m_ProfileMaterial       = Utilities.CreateEngineMaterial("Hidden/HDRenderPipeline/DrawGaussianProfile");
            m_TransmittanceMaterial = Utilities.CreateEngineMaterial("Hidden/HDRenderPipeline/DrawTransmittanceGraph");
            m_ProfileImages         = new RenderTexture[SubsurfaceScatteringSettings.maxNumProfiles];
            m_TransmittanceImages   = new RenderTexture[SubsurfaceScatteringSettings.maxNumProfiles];

            for (int i = 0; i < SubsurfaceScatteringSettings.maxNumProfiles; i++)
            {
                m_ProfileImages[i]       = new RenderTexture(256, 256, 0, RenderTextureFormat.DefaultHDR);
                m_TransmittanceImages[i] = new RenderTexture(16, 256, 0, RenderTextureFormat.DefaultHDR);
            }
        }
コード例 #5
0
        void OnEnable()
        {
            m_FinalPassMaterial     = Utilities.CreateEngineMaterial("Hidden/HDRenderPipeline/FinalPass");
            m_EyeAdaptationMaterial = Utilities.CreateEngineMaterial("Hidden/HDRenderPipeline/EyeAdaptation");

            m_EyeCompute      = Resources.Load <ComputeShader>("EyeHistogram");
            m_HistogramBuffer = new ComputeBuffer(k_HistogramBins, sizeof(uint));

            m_AutoExposurePool[0] = new RenderTexture(1, 1, 0, RenderTextureFormat.RFloat);
            m_AutoExposurePool[1] = new RenderTexture(1, 1, 0, RenderTextureFormat.RFloat);

            m_FirstFrame = true;
        }
コード例 #6
0
        void OnEnable()
        {
            m_StdDev1        = serializedObject.FindProperty("stdDev1");
            m_StdDev2        = serializedObject.FindProperty("stdDev2");
            m_LerpWeight     = serializedObject.FindProperty("lerpWeight");
            m_TexturingMode  = serializedObject.FindProperty("texturingMode");
            m_Transmission   = serializedObject.FindProperty("enableTransmission");
            m_ThicknessRemap = serializedObject.FindProperty("thicknessRemap");

            m_ProfileMaterial       = Utilities.CreateEngineMaterial("Hidden/HDRenderPipeline/DrawGaussianProfile");
            m_TransmittanceMaterial = Utilities.CreateEngineMaterial("Hidden/HDRenderPipeline/DrawTransmittanceGraph");

            m_ProfileImage       = new RenderTexture(256, 256, 0, RenderTextureFormat.DefaultHDR);
            m_TransmittanceImage = new RenderTexture(16, 256, 0, RenderTextureFormat.DefaultHDR);
        }
コード例 #7
0
ファイル: RuntimeFilterIBL.cs プロジェクト: sjb8100/SRP
        public void Initialize(ScriptableRenderContext context)
        {
            if (!m_ComputeGgxIblSampleDataCS)
            {
                m_ComputeGgxIblSampleDataCS     = Resources.Load <ComputeShader>("ComputeGgxIblSampleData");
                m_ComputeGgxIblSampleDataKernel = m_ComputeGgxIblSampleDataCS.FindKernel("ComputeGgxIblSampleData");
            }

            if (!m_BuildProbabilityTablesCS && SupportMIS)
            {
                m_BuildProbabilityTablesCS   = Resources.Load <ComputeShader>("BuildProbabilityTables");
                m_ConditionalDensitiesKernel = m_BuildProbabilityTablesCS.FindKernel("ComputeConditionalDensities");
                m_MarginalRowDensitiesKernel = m_BuildProbabilityTablesCS.FindKernel("ComputeMarginalRowDensities");
            }

            if (!m_GgxConvolveMaterial)
            {
                m_GgxConvolveMaterial = Utilities.CreateEngineMaterial("Hidden/HDRenderPipeline/GGXConvolve");
            }

            if (!m_GgxIblSampleData)
            {
                m_GgxIblSampleData                   = new RenderTexture(k_GgxIblMaxSampleCount, k_GgxIblMipCountMinusOne, 0, RenderTextureFormat.ARGBFloat, RenderTextureReadWrite.Linear);
                m_GgxIblSampleData.useMipMap         = false;
                m_GgxIblSampleData.autoGenerateMips  = false;
                m_GgxIblSampleData.enableRandomWrite = true;
                m_GgxIblSampleData.filterMode        = FilterMode.Point;
                m_GgxIblSampleData.Create();

                m_ComputeGgxIblSampleDataCS.SetTexture(m_ComputeGgxIblSampleDataKernel, "output", m_GgxIblSampleData);

                var cmd = new CommandBuffer()
                {
                    name = "Compute GGX IBL Sample Data"
                };
                cmd.DispatchCompute(m_ComputeGgxIblSampleDataCS, m_ComputeGgxIblSampleDataKernel, 1, 1, 1);
                context.ExecuteCommandBuffer(cmd);
                cmd.Dispose();
            }
        }
        // <<< Old SSS Model

        void OnEnable()
        {
            m_ScatteringDistance = serializedObject.FindProperty("scatteringDistance");
            m_MaxRadius          = serializedObject.FindProperty("m_MaxRadius");
            m_ShapeParam         = serializedObject.FindProperty("m_ShapeParam");
            m_TransmissionTint   = serializedObject.FindProperty("transmissionTint");
            m_TexturingMode      = serializedObject.FindProperty("texturingMode");
            m_TransmissionMode   = serializedObject.FindProperty("transmissionMode");
            m_ThicknessRemap     = serializedObject.FindProperty("thicknessRemap");
            m_WorldScale         = serializedObject.FindProperty("worldScale");
            // Old SSS Model >>>
            m_ScatterDistance1 = serializedObject.FindProperty("scatterDistance1");
            m_ScatterDistance2 = serializedObject.FindProperty("scatterDistance2");
            m_LerpWeight       = serializedObject.FindProperty("lerpWeight");
            // <<< Old SSS Model

            // These shaders don't need to be reference by RenderPipelineResource as they are not use at runtime
            m_ProfileMaterial       = Utilities.CreateEngineMaterial("Hidden/HDRenderPipeline/DrawSssProfile");
            m_TransmittanceMaterial = Utilities.CreateEngineMaterial("Hidden/HDRenderPipeline/DrawTransmittanceGraph");

            m_ProfileImage       = new RenderTexture(256, 256, 0, RenderTextureFormat.DefaultHDR);
            m_TransmittanceImage = new RenderTexture(16, 256, 0, RenderTextureFormat.DefaultHDR);
        }
コード例 #9
0
        void OnEnable()
        {
            m_EyeAdaptationMaterial = Utilities.CreateEngineMaterial("Hidden/HDRenderPipeline/EyeAdaptation");
            m_FinalPassMaterial     = Utilities.CreateEngineMaterial("Hidden/HDRenderPipeline/FinalPass");

            m_EyeCompute      = Resources.Load <ComputeShader>("EyeHistogram");
            m_HistogramBuffer = new ComputeBuffer(k_HistogramBins, sizeof(uint));

            m_AutoExposurePool[0] = new RenderTexture(1, 1, 0, RenderTextureFormat.RFloat);
            m_AutoExposurePool[1] = new RenderTexture(1, 1, 0, RenderTextureFormat.RFloat);

            m_BlueNoiseTextures = new Texture2D[k_BlueNoiseTextureCount];
            for (int i = 0; i < k_BlueNoiseTextureCount; i++)
            {
                m_BlueNoiseTextures[i] = Resources.Load <Texture2D>("Textures/LDR_LLL1_" + i);
            }

            m_TempRt = Shader.PropertyToID("_Source");

            m_DefaultSpectralLut = Resources.Load <Texture2D>("Textures/SpectralLut_GreenPurple");

            m_FirstFrame = true;
        }
コード例 #10
0
        public void Initialize(CommandBuffer cmd)
        {
            if (!m_ComputeGgxIblSampleDataCS)
            {
                m_ComputeGgxIblSampleDataCS     = m_RenderPipelinesResources.computeGgxIblSampleData;
                m_ComputeGgxIblSampleDataKernel = m_ComputeGgxIblSampleDataCS.FindKernel("ComputeGgxIblSampleData");
            }

            if (!m_BuildProbabilityTablesCS && SupportMIS)
            {
                m_BuildProbabilityTablesCS   = m_RenderPipelinesResources.buildProbabilityTables;
                m_ConditionalDensitiesKernel = m_BuildProbabilityTablesCS.FindKernel("ComputeConditionalDensities");
                m_MarginalRowDensitiesKernel = m_BuildProbabilityTablesCS.FindKernel("ComputeMarginalRowDensities");
            }

            if (!m_GgxConvolveMaterial)
            {
                m_GgxConvolveMaterial = Utilities.CreateEngineMaterial(m_RenderPipelinesResources.GGXConvolve);
            }

            if (!m_GgxIblSampleData)
            {
                m_GgxIblSampleData                   = new RenderTexture(k_GgxIblMaxSampleCount, k_GgxIblMipCountMinusOne, 0, RenderTextureFormat.ARGBFloat, RenderTextureReadWrite.Linear);
                m_GgxIblSampleData.useMipMap         = false;
                m_GgxIblSampleData.autoGenerateMips  = false;
                m_GgxIblSampleData.enableRandomWrite = true;
                m_GgxIblSampleData.filterMode        = FilterMode.Point;
                m_GgxIblSampleData.Create();

                m_ComputeGgxIblSampleDataCS.SetTexture(m_ComputeGgxIblSampleDataKernel, "output", m_GgxIblSampleData);

                using (new Utilities.ProfilingSample("Compute GGX IBL Sample Data", cmd))
                {
                    cmd.DispatchCompute(m_ComputeGgxIblSampleDataCS, m_ComputeGgxIblSampleDataKernel, 1, 1, 1);
                }
            }
        }
コード例 #11
0
 public override void Build()
 {
     m_SkyHDRIMaterial = Utilities.CreateEngineMaterial("Hidden/HDRenderPipeline/Sky/SkyHDRI");
 }
コード例 #12
0
 public void Build(RenderPipelineResources renderPipelineResources)
 {
     m_Material           = Utilities.CreateEngineMaterial(renderPipelineResources.screenSpaceAmbientOcclusionShader);
     m_Material.hideFlags = HideFlags.DontSave;
 }
コード例 #13
0
 public override void Build()
 {
     m_ProceduralSkyMaterial = Utilities.CreateEngineMaterial("Hidden/HDRenderPipeline/Sky/SkyProcedural");
 }