Esempio n. 1
0
        private void GeneratePipelineAsset(RenderSettingItem settings)
        {
            // store current quality level
            var currentQualityLevel = QualitySettings.GetQualityLevel();

            //creating pipeline asset
            var asset =
                ScriptableObject.CreateInstance(typeof(UniversalRenderPipelineAsset)) as UniversalRenderPipelineAsset;

            if (!AssetDatabase.IsValidFolder($"Assets/{k_PipelineAssetPath}"))
            {
                AssetDatabase.CreateFolder("Assets", k_PipelineAssetPath);
            }
            var path = $"Assets/{k_PipelineAssetPath}/{settings.LevelName}_PipelineAsset.asset";

            // Setting Pipeline Asset settings
            SetPipelineSettings(asset, settings);

            // Create Renderers
            var defaultIndex = 0;
            var renderers    = new List <ScriptableRendererData>();

            if (m_RenderingModes.Contains(RenderingMode.Forward))
            {
                renderers.Add(CreateRendererDataAsset(path, RenderingPath.Forward, "ForwardRenderer"));
                if (GetEquivalentRenderMode(m_GraphicsTierSettings.RenderingPath) == RenderingMode.Forward)
                {
                    defaultIndex = m_RenderingModes.IndexOf(RenderingMode.Forward);
                }
            }

            if (m_RenderingModes.Contains(RenderingMode.Deferred))
            {
                renderers.Add(CreateRendererDataAsset(path, RenderingPath.DeferredShading, "DeferredRenderer"));
                if (GetEquivalentRenderMode(m_GraphicsTierSettings.RenderingPath) == RenderingMode.Deferred)
                {
                    defaultIndex = m_RenderingModes.IndexOf(RenderingMode.Deferred);
                }
            }

            asset.m_RendererDataList     = renderers.ToArray();
            asset.m_DefaultRendererIndex = defaultIndex;

            // Create Pipeline asset on disk
            AssetDatabase.CreateAsset(asset, path);
            // Assign asset
            QualitySettings.SetQualityLevel(settings.Index);
            QualitySettings.renderPipeline = asset;

            // return to original quality level
            QualitySettings.SetQualityLevel(currentQualityLevel);
            // Set graphics settings
            if (currentQualityLevel == settings.Index || GraphicsSettings.defaultRenderPipeline == null || GraphicsSettings.defaultRenderPipeline.GetType() !=
                typeof(UniversalRenderPipelineAsset))
            {
                GraphicsSettings.defaultRenderPipeline = asset;
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Iterates over all Quality Settings and saves relevant settings to a RenderSettingsItem.
        /// This will also create the required information for the Render Pipeline Converter UI.
        /// </summary>
        /// <param name="context">Converter context to add elements to.</param>
        private void GatherQualityLevels(ref InitializeConverterContext context)
        {
            var currentQuality = QualitySettings.GetQualityLevel();
            var id             = 0;

            foreach (var levelName in QualitySettings.names)
            {
                QualitySettings.SetQualityLevel(id);

                var projectSettings = new RenderSettingItem
                {
                    Index              = id,
                    LevelName          = levelName,
                    PixelLightCount    = QualitySettings.pixelLightCount,
                    MSAA               = QualitySettings.antiAliasing,
                    Shadows            = QualitySettings.shadows,
                    ShadowResolution   = QualitySettings.shadowResolution,
                    ShadowDistance     = QualitySettings.shadowDistance,
                    ShadowCascadeCount = QualitySettings.shadowCascades,
                    CascadeSplit2      = QualitySettings.shadowCascade2Split,
                    CascadeSplit4      = QualitySettings.shadowCascade4Split,
                    SoftParticles      = QualitySettings.softParticles,
                };
                m_SettingsItems.Add(projectSettings);

                var setting = QualitySettings.GetRenderPipelineAssetAt(id);
                var item    = new ConverterItemDescriptor {
                    name = $"Quality Level {id}: {levelName}"
                };

                if (setting != null)
                {
                    item.warningMessage = setting.GetType() == typeof(UniversalRenderPipelineAsset)
                        ? "Contains URP Asset, will override existing asset."
                        : "Contains SRP Asset, will override existing asset with URP asset.";
                }

                context.AddAssetToConvert(item);
                id++;
            }

            QualitySettings.SetQualityLevel(currentQuality);
        }
Esempio n. 3
0
        /// <summary>
        /// Sets all relevant RP settings in order they appear in URP
        /// </summary>
        /// <param name="asset">Pipeline asset to set</param>
        /// <param name="settings">The ProjectSettingItem with stored settings</param>
        private void SetPipelineSettings(UniversalRenderPipelineAsset asset, RenderSettingItem settings)
        {
            // General
            asset.supportsCameraDepthTexture = settings.SoftParticles;

            // Quality
            asset.supportsHDR     = m_GraphicsTierSettings.HDR;
            asset.msaaSampleCount = settings.MSAA == 0 ? 1 : settings.MSAA;

            // Main Light
            asset.mainLightRenderingMode = settings.PixelLightCount == 0
                ? LightRenderingMode.Disabled
                : LightRenderingMode.PerPixel;
            asset.supportsMainLightShadows     = settings.Shadows != ShadowQuality.Disable;
            asset.mainLightShadowmapResolution =
                GetEquivalentMainlightShadowResolution((int)settings.ShadowResolution);

            // Additional Lights
            asset.additionalLightsRenderingMode = settings.PixelLightCount == 0
                ? LightRenderingMode.PerVertex
                : LightRenderingMode.PerPixel;
            asset.maxAdditionalLightsCount            = settings.PixelLightCount != 0 ? Mathf.Max(0, settings.PixelLightCount) : 4;
            asset.supportsAdditionalLightShadows      = settings.Shadows != ShadowQuality.Disable;
            asset.additionalLightsShadowmapResolution =
                GetEquivalentAdditionalLightAtlasShadowResolution((int)settings.ShadowResolution);

            // Reflection Probes
            asset.reflectionProbeBlending      = m_GraphicsTierSettings.ReflectionProbeBlending;
            asset.reflectionProbeBoxProjection = m_GraphicsTierSettings.ReflectionProbeBoxProjection;

            // Shadows
            asset.shadowDistance      = settings.ShadowDistance;
            asset.shadowCascadeCount  = m_GraphicsTierSettings.CascadeShadows ? settings.ShadowCascadeCount : 0;
            asset.cascade2Split       = settings.CascadeSplit2;
            asset.cascade4Split       = settings.CascadeSplit4;
            asset.supportsSoftShadows = settings.Shadows == ShadowQuality.All;
        }