public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
            {
                if (renderingData.cameraData.camera != Camera.main)
                {
                    return;
                }

                VolumeStack         stack      = VolumeManager.instance.stack;
                PUnderwaterOverride underwater = stack.GetComponent <PUnderwaterOverride>();
                PWetLensOverride    wetLens    = stack.GetComponent <PWetLensOverride>();

                bool willRenderUnderwater = underwater.intensity.value > 0;
                bool willRenderWetLens    = wetLens.strength.value * wetLens.intensity.value > 0;

                if (!willRenderUnderwater && !willRenderWetLens)
                {
                    return;
                }

                ConfigureMaterial(ref renderingData, underwater, wetLens);

                CommandBuffer           cmd = CommandBufferPool.Get(PROFILER_TAG);
                RenderTextureDescriptor cameraTargetDescriptor = renderingData.cameraData.cameraTargetDescriptor;

                cameraTargetDescriptor.depthBufferBits = 0;
                cmd.GetTemporaryRT(temporaryRenderTexture.id, cameraTargetDescriptor);

                Material material = willRenderUnderwater ? underwaterMaterial : wetLensMaterial;

                Blit(cmd, cameraTarget, temporaryRenderTexture.Identifier(), material, 0);
                Blit(cmd, temporaryRenderTexture.Identifier(), cameraTarget);

                context.ExecuteCommandBuffer(cmd);
                CommandBufferPool.Release(cmd);
            }
        private void LateUpdate()
        {
            VolumeManager.instance.Update(null, 1);
            stack = VolumeManager.instance.stack;

            Volume[] volumes   = FindObjectsOfType <Volume>();
            bool     sunVolume = false;

            foreach (Volume volume in volumes)
            {
                if (volume.sharedProfile != null)
                {
                    sunVolume = volume.sharedProfile.Has <SunlightProperties>() ? true : sunVolume;
                }
            }

            if (sunVolume)
            {
                GatherOverrides();
            }
            else
            {
                ApplyDefaults();
            }
            SetSunlightTransform();
            SetLightSettings();
            ApplyShowFlags(showEntities);
        }
Example #3
0
        public void Build(HDRenderPipelineAsset hdAsset, IBLFilterGGX iblFilterGGX)
        {
            m_BakingSkyRenderingContext = new SkyRenderingContext(iblFilterGGX, (int)hdAsset.renderPipelineSettings.lightLoopSettings.skyReflectionSize, false);
            m_SkyRenderingContext       = new SkyRenderingContext(iblFilterGGX, (int)hdAsset.renderPipelineSettings.lightLoopSettings.skyReflectionSize, true);

            m_StandardSkyboxMaterial      = CoreUtils.CreateEngineMaterial(hdAsset.renderPipelineResources.shaders.skyboxCubemapPS);
            m_BlitCubemapMaterial         = CoreUtils.CreateEngineMaterial(hdAsset.renderPipelineResources.shaders.blitCubemapPS);
            m_OpaqueAtmScatteringMaterial = CoreUtils.CreateEngineMaterial(hdAsset.renderPipelineResources.shaders.opaqueAtmosphericScatteringPS);

            m_LightingOverrideVolumeStack = VolumeManager.instance.CreateStack();
            m_LightingOverrideLayerMask   = hdAsset.renderPipelineSettings.lightLoopSettings.skyLightingOverrideLayerMask;
        }
        private void OnEnable()
        {
            CreateLightYAxis();
            CreateLightLattitude();
            CreateSunlightTimeofdayDymmy();
            CreateSunlight();
            //Enable if it has been disabled
            if (sunlight != null)
            {
                sunlight.GetComponent <Light>().enabled = true;
            }

            stack = VolumeManager.instance.stack;
        }
 SkySettings GetSkySetting(VolumeStack stack)
 {
     var visualEnv = stack.GetComponent<VisualEnvironment>();
     int skyID = visualEnv.skyType;
     Type skyType;
     if(m_SkyTypesDict.TryGetValue(skyID, out skyType))
     {
         return (SkySettings)stack.GetComponent(skyType);
     }
     else
     {
         return null;
     }
 }
        public void Build(HDRenderPipelineAsset hdAsset, IBLFilterBSDF[] iblFilterBSDFArray)
        {
            m_SkyRenderingContext = new SkyRenderingContext(iblFilterBSDFArray, (int)hdAsset.currentPlatformRenderPipelineSettings.lightLoopSettings.skyReflectionSize, true);
#if UNITY_EDITOR
            m_PreviewSkyRenderingContext = new SkyRenderingContext(iblFilterBSDFArray, (int)hdAsset.currentPlatformRenderPipelineSettings.lightLoopSettings.skyReflectionSize, true);
#endif

            m_StandardSkyboxMaterial      = CoreUtils.CreateEngineMaterial(hdAsset.renderPipelineResources.shaders.skyboxCubemapPS);
            m_BlitCubemapMaterial         = CoreUtils.CreateEngineMaterial(hdAsset.renderPipelineResources.shaders.blitCubemapPS);
            m_OpaqueAtmScatteringMaterial = CoreUtils.CreateEngineMaterial(hdAsset.renderPipelineResources.shaders.opaqueAtmosphericScatteringPS);

            m_LightingOverrideVolumeStack       = VolumeManager.instance.CreateStack();
            m_LightingOverrideLayerMask         = hdAsset.currentPlatformRenderPipelineSettings.lightLoopSettings.skyLightingOverrideLayerMask;
            m_StaticLightingSkyRenderingContext = new SkyRenderingContext(iblFilterBSDFArray, (int)hdAsset.currentPlatformRenderPipelineSettings.lightLoopSettings.skyReflectionSize, false);
        }
        public void Build(HDRenderPipelineAsset hdAsset, IBLFilterGGX iblFilterGGX)
        {
            m_BakingSkyRenderingContext = new SkyRenderingContext(iblFilterGGX, (int)hdAsset.renderPipelineSettings.lightLoopSettings.skyReflectionSize, false);
            m_SkyRenderingContext       = new SkyRenderingContext(iblFilterGGX, (int)hdAsset.renderPipelineSettings.lightLoopSettings.skyReflectionSize, true);

            m_StandardSkyboxMaterial      = CoreUtils.CreateEngineMaterial(hdAsset.renderPipelineResources.skyboxCubemap);
            m_BlitCubemapMaterial         = CoreUtils.CreateEngineMaterial(hdAsset.renderPipelineResources.blitCubemap);
            m_OpaqueAtmScatteringMaterial = CoreUtils.CreateEngineMaterial(hdAsset.renderPipelineResources.opaqueAtmosphericScattering);

            m_LightingOverrideVolumeStack = VolumeManager.instance.CreateStack();
            m_LightingOverrideLayerMask   = hdAsset.renderPipelineSettings.lightLoopSettings.skyLightingOverrideLayerMask;

#if UNITY_EDITOR
            m_DefaultPreviewSky = ScriptableObject.CreateInstance <ProceduralSky>();
#endif
        }
        internal static SkySettings GetSkySetting(VolumeStack stack)
        {
            var  visualEnv = stack.GetComponent <VisualEnvironment>();
            int  skyID     = visualEnv.skyType.value;
            Type skyType;

            if (skyTypesDict.TryGetValue(skyID, out skyType))
            {
                return((SkySettings)stack.GetComponent(skyType));
            }
            else
            {
                if (skyID == (int)SkyType.Procedural && logOnce)
                {
                    Debug.LogError("You are using the deprecated Procedural Sky in your Scene. You can still use it but, to do so, you must install it separately. To do this, open the Package Manager window and import the 'Procedural Sky' sample from the HDRP package page, then close and re-open your project without saving.");
                    logOnce = false;
                }

                return(null);
            }
        }
    public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
    {
        if (material == null || !renderingData.cameraData.postProcessEnabled)
        {
            return;
        }

        VolumeStack stack = VolumeManager.instance.stack;

        outlineEffect = stack.GetComponent <OutlineEffect>();

        if (outlineEffect == null || !outlineEffect.IsActive())
        {
            return;
        }

        CommandBuffer buffer = CommandBufferPool.Get(OUTLINE_EFFECT_TAG);

        Render(buffer, ref renderingData);

        context.ExecuteCommandBuffer(buffer);
        CommandBufferPool.Release(buffer);
    }
Example #10
0
        protected override void Render(ScriptableRenderContext context, Camera[] cameras)
        {
            BeginFrameRendering(cameras);

            #region Rendering setup

            if (_renderersSorted == null)
            {
                GetRenderersForEffects();
            }

            // Constants used in the camera render loop.
            RenderTextureDescriptor rtDesc = new RenderTextureDescriptor(_settings.m_renderResolution.x, _settings.m_renderResolution.y, RenderTextureFormat.Default, 24);

            switch (_settings.m_fixedRenderResolution)
            {
            case RenderConstraintAxis.Horizontal:
                rtDesc.height = (int)(((float)Screen.height / (float)Screen.width) * (float)rtDesc.width);
                break;

            case RenderConstraintAxis.Vertical:
                rtDesc.width = (int)(((float)Screen.width / (float)Screen.height) * (float)rtDesc.height);
                break;

            case RenderConstraintAxis.None:
                rtDesc.width  = Screen.width;
                rtDesc.height = Screen.height;
                break;
            }

            var rtID = Shader.PropertyToID("_LowResScreen");

            if (_settings.m_simulateVertexPrecision)
            {
                Shader.EnableKeyword("VERTEX_PRECISION_ON");
                Shader.SetGlobalFloat("_VertexPrecision", _settings.m_vertexPrecision);
            }
            else
            {
                Shader.DisableKeyword("VERTEX_PRECISION_ON");
            }

            if (_settings.m_perspectiveCorrection)
            {
                Shader.EnableKeyword("PERSPECTIVE_CORRECTION_ON");
            }
            else
            {
                Shader.DisableKeyword("PERSPECTIVE_CORRECTION_ON");
            }

            #endregion

            foreach (var camera in cameras)
            {
                BeginCameraRendering(camera);

                var _cb = CommandBufferPool.Get();

                #region Per-camera setup

                // Set the camera up.
                context.SetupCameraProperties(camera);

                float fov         = _settings.m_viewModelFOV;
                bool  isSceneView = false;
#if UNITY_EDITOR
                if (camera.cameraType == CameraType.SceneView)
                {
                    fov         = camera.fieldOfView;
                    isSceneView = true;
                }
#endif
                _cb.SetGlobalVectorArray(k_visibleLightColorsId, visibleLightColors);
                _cb.SetGlobalVectorArray(k_visibleLightDirectionsOrPositionsId, visibleLightDirectionsOrPositions);
                _cb.SetGlobalVectorArray(k_visibleLightAttenuationsId, visibleLightAttenuations);
                _cb.SetGlobalVectorArray(k_visibleLightSpotDirectionsId, visibleLightSpotDirections);

                #region Volume stack setup

                VolumeStack stack = null;

                if (_volumeStacks.ContainsKey(camera))
                {
                    stack = _volumeStacks[camera];
                }
                else
                {
                    stack = VolumeManager.instance.CreateStack();
                    _volumeStacks.Add(camera, stack);
                }

                var stackLayer = camera.GetComponent <Retro3DVolumeLayer>();
                VolumeManager.instance.Update(stack, camera.transform, stackLayer ? stackLayer.layers : _settings.m_defaultVolumeLayerMask);

                #endregion

                var vm_matrix = Matrix4x4.Perspective(fov, camera.aspect, camera.nearClipPlane, camera.farClipPlane);
                _cb.SetGlobalMatrix("_ViewmodelProjMatrix", GL.GetGPUProjectionMatrix(vm_matrix, true));

                // Setup commands: Initialize the temporary render texture.
                _cb.name = "Setup";
                _cb.GetTemporaryRT(rtID, rtDesc.width, rtDesc.height, rtDesc.depthBufferBits, FilterMode.Point, rtDesc.colorFormat, RenderTextureReadWrite.Default, (int)_settings.m_antialiasing);
                _cb.SetRenderTarget(rtID);
                CoreUtils.ClearRenderTarget(_cb, ClearFlag.All, camera.backgroundColor);
                context.ExecuteCommandBuffer(_cb);
                _cb.Clear();

                #endregion

                PerformSceneRender(context, camera);

                if (isSceneView)
                {
                    context.DrawGizmos(camera, GizmoSubset.PreImageEffects);
                }

                PerformPostProcessing(context, camera, stack);

                if (isSceneView)
                {
                    context.DrawGizmos(camera, GizmoSubset.PostImageEffects);
                }

                PerformFinalBlit(context, rtID, _cb);

                context.Submit();

                EndCameraRendering(context, camera);

                CommandBufferPool.Release(_cb);
            }

            EndFrameRendering(context, cameras);
        }
Example #11
0
        private void PerformPostProcessing(ScriptableRenderContext context, Camera camera, VolumeStack stack)
        {
            if (CoreUtils.ArePostProcessesEnabled(camera))
            {
                foreach (var renderer in _renderersSorted)
                {
                    var renderObject = renderer.Value;
                    renderObject.SetupStackComponent(stack);

                    if (renderObject.ShouldRender())
                    {
                        CommandBuffer buf = CommandBufferPool.Get();
                        renderObject.Render(buf, camera);
                        context.ExecuteCommandBuffer(buf);
                        CommandBufferPool.Release(buf);
                    }
                }
            }
        }
Example #12
0
        /// <summary>Get a VolumeParameter from a VolumeComponent on the <see cref="selectedCameraVolumeStack"/></summary>
        /// <param name="field">The field info of the parameter.</param>
        /// <returns>The volume parameter.</returns>
        public VolumeParameter GetParameter(FieldInfo field)
        {
            VolumeStack stack = selectedCameraVolumeStack;

            return(stack == null ? null : GetParameter(stack.GetComponent(selectedComponentType), field));
        }
 public abstract void SetupStackComponent(VolumeStack stack);