Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
a8b3c1c
initial commit for the uxml's
martint-unity Mar 3, 2021
0649efa
updates to widget
martint-unity Mar 3, 2021
a6c66c9
update to uxml for editor part
martint-unity Mar 3, 2021
fe60e22
updates to layout
martint-unity Mar 3, 2021
9944ab2
Added first init of coonverters
martint-unity Mar 5, 2021
6cf0c4b
Updated styling and added new converter item
martint-unity Mar 9, 2021
f244127
Added convert method and restructured code
martint-unity Mar 12, 2021
4e8b454
added test converters. will be removed before done
martint-unity Mar 12, 2021
d4b4c61
Added converter Context
martint-unity Mar 15, 2021
d4c1432
Made the widget root element Bindable
martint-unity Mar 16, 2021
8c11fbe
Moved code into init phase
martint-unity Mar 17, 2021
38c9cb9
updates to the bindings to the Serilized Object
martint-unity Mar 18, 2021
650b811
Updated the naming of core converter
martint-unity Mar 18, 2021
8d364aa
Made sure user doesnt init twize
martint-unity Mar 18, 2021
d8890e9
moved the uxml's and uss to core and the Editor
martint-unity Mar 19, 2021
df2b186
spring cleaning
martint-unity Mar 19, 2021
de3165d
Updated the converter UI to get errors and pending
martint-unity Mar 25, 2021
5f3b773
Added OnClicked method
martint-unity Mar 25, 2021
16f7d92
added status enum
martint-unity Mar 26, 2021
7986ca8
updated the ui a bit
martint-unity Mar 26, 2021
c02175e
changed icon size and removed Visual element
martint-unity Mar 26, 2021
6669e06
Added contextual menu, but commented it out
martint-unity Mar 29, 2021
a5116c7
Added active bool to converteritemstate
martint-unity Mar 30, 2021
366d835
oups, active bool was placed in the wrong statment
martint-unity Mar 30, 2021
366210d
Merge branch 'master' into universal/upgrader/builtin-to-urp-upgrader…
martint-unity Mar 30, 2021
faca1ea
Added manipulator, trying out userData for index
martint-unity Mar 31, 2021
6437db9
cleaned out and documented code
martint-unity Apr 7, 2021
b532a7e
fixed a small bug in init method and list refresh
martint-unity Apr 7, 2021
0836acc
Removed unnecessary files
martint-unity Apr 7, 2021
e2710cd
added some doc strings
martint-unity Apr 7, 2021
2a68e59
Addressed PR Feedback
martint-unity Apr 8, 2021
a46dee6
removed old tests that shouldnt live here
martint-unity Apr 9, 2021
bfbb0ae
PR feedback, split code into files
martint-unity Apr 13, 2021
0c9fcd8
added progressbar and material upgrader
martint-unity Apr 16, 2021
4ecc880
Spring cleaning
martint-unity Apr 16, 2021
f88c9bf
Moved code into folder
martint-unity Apr 19, 2021
e4230a6
New name for Conversion, changed to Container
martint-unity Apr 19, 2021
43bf46a
Updated with PR feedback and Doc strings
martint-unity Apr 20, 2021
3f7d115
Merge branch 'master' into universal/upgrader/builtin-to-urp-upgrader…
martint-unity Apr 20, 2021
689e1ee
Adressed PR feedback
martint-unity Apr 21, 2021
b9198c1
Addressed PR Feedback. Changed message string
martint-unity Apr 22, 2021
a958cac
Moved converter to URP package.
martint-unity Apr 22, 2021
c1efeeb
Made converter and container internal
martint-unity Apr 22, 2021
a15f2c0
Start work on quality converter
Verasl Mar 25, 2021
ae7efce
Added lots of pesudo code
Verasl Mar 25, 2021
0f73bf0
Continued work on quality setting converter
Verasl Mar 26, 2021
b8a1f2d
api tweak
Verasl Apr 20, 2021
f58cac0
Update to new API from Upgrader Framework
Verasl Apr 20, 2021
bcc676e
Changed protection level of converter
Verasl Apr 22, 2021
586ab4a
Added base implementation of searcher for finding cameras
Verasl Apr 22, 2021
0d5f299
Exposing quality settings internally for URP
Nzollner May 3, 2021
2cd7b60
Merge branch 'master' into universal/upgrader/quality-settings-converter
Verasl May 4, 2021
547e17c
Merge branch 'universal/exposing_quality_settings' into universal/upg…
Verasl May 4, 2021
79ac93a
started to add actual settings storing for later conversion
Verasl May 4, 2021
b47a885
Pipeline asset settings now getting populated from quality settings
Verasl May 5, 2021
450d9b7
added API for providing the suffix for renderers getting created
Verasl May 5, 2021
cb1d5f5
additional cleanup
Verasl May 6, 2021
66e28bf
More clean up
Verasl May 6, 2021
67aef65
More cleanup and moved to better folder
Verasl May 6, 2021
62d0427
Removed all camera code for now
Verasl May 7, 2021
a8472b5
Change switch statement back for the formatter
Verasl May 7, 2021
da08358
Squashed commit of the following:
Verasl May 18, 2021
a85003d
Revert "Squashed commit of the following:"
Verasl May 18, 2021
d945ed8
Merge branch 'master' into universal/upgrader/quality-settings-converter
Verasl May 18, 2021
f23ce44
Apply suggestions from code review
Verasl May 18, 2021
a473db1
Updated code based off latest master
Verasl May 18, 2021
79b571c
Made setters internal
Verasl May 19, 2021
0685b5a
PR comments and update to latest master API changes
Verasl May 19, 2021
db8edd8
Protect against invalid renderer index
Verasl May 19, 2021
5046758
run the formatter
Verasl May 19, 2021
9227230
Merge branch 'master' into universal/upgrader/quality-settings-converter
Verasl Jun 10, 2021
fcef452
Added priority
Verasl Jun 10, 2021
3255239
Fixed issue that caused MSAA to not be enabled for cameras that didn'…
phi-lira Jun 10, 2021
267719b
changed light upgrade logic
Verasl Jun 10, 2021
b973fa8
Added logic to actually activate URP by adding a GraphicsSettings pip…
Verasl Jun 10, 2021
a2168bd
Merge branch 'master' into universal/upgrader/quality-settings-converter
Verasl Jun 15, 2021
6be7b26
Formatting
pbbastian Jun 15, 2021
32d0f72
changelog
Verasl Jun 15, 2021
c6210da
Merge branch 'master' into universal/upgrader/quality-settings-converter
Verasl Jun 15, 2021
42eea6c
Revert "Fixed issue that caused MSAA to not be enabled for cameras th…
phi-lira Jun 17, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions com.unity.render-pipelines.universal/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- VFX: Fix light cookies integration.
- Added Lights 2D to the Light Explorer window.
- Two new URP specific scene templates, Basic which has a camera and directional light, then Standard which has the addition of a global volume with basic post effects setup.
- Added Render Settings Converter to the Render Pipeline Converter, this tool creates and assigns URP Assets based off rendering settings of a Builtin project.

### Changed
- Moved fog evaluation from vertex shader to pixel shader. This improves rendering of fog for big triangles and fog quality. This can change the look of the fog slightly.
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,308 @@
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
using ShadowQuality = UnityEngine.ShadowQuality;
using ShadowResolution = UnityEngine.ShadowResolution;

namespace UnityEditor.Rendering.Universal.Converters
{
internal class RenderSettingsConverter : RenderPipelineConverter
{
public override int priority => - 9000;
public override string name => "Rendering Settings";

public override string info =>
"This converter will look at creating Universal Render Pipeline assets and respective Renderer Assets and configure" +
" their settings based on equivalent settings from builtin renderer.";

public override Type container => typeof(BuiltInToURPConverterContainer);

// Used to store settings specific to Graphics Tiers
GraphicsTierSettings m_GraphicsTierSettings;

// Settings items, currently tracks Quality settings only
List<SettingsItem> m_SettingsItems;

// List of the rendering modes required
List<RenderingMode> m_RenderingModes;

const string k_PipelineAssetPath = "Settings";

public override void OnInitialize(InitializeConverterContext context, Action callback)
{
m_SettingsItems = new List<SettingsItem>();
m_RenderingModes = new List<RenderingMode>();

// check graphics tiers
GatherGraphicsTiers();

// check quality levels
GatherQualityLevels(ref context);

callback?.Invoke();
}

/// <summary>
/// Grabs the 3rd tier from the Graphics Tier Settings based off the current build platform
/// </summary>
private void GatherGraphicsTiers()
{
var targetGrp = BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget);
var tier = EditorGraphicsSettings.GetTierSettings(targetGrp, GraphicsTier.Tier3);

// Add the Graphic Tier Render Path settings as the first rendering mode
m_RenderingModes.Add(GetEquivalentRenderMode(tier.renderingPath));

m_GraphicsTierSettings.RenderingPath = tier.renderingPath;
m_GraphicsTierSettings.ReflectionProbeBlending = tier.reflectionProbeBlending;
m_GraphicsTierSettings.ReflectionProbeBoxProjection = tier.reflectionProbeBoxProjection;
m_GraphicsTierSettings.CascadeShadows = tier.cascadedShadowMaps;
m_GraphicsTierSettings.HDR = tier.hdr;
}

/// <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);
}

public override void OnRun(ref RunItemContext context)
{
var item = context.item;
// is quality item
if (m_SettingsItems[item.index].GetType() == typeof(RenderSettingItem))
{
GeneratePipelineAsset(m_SettingsItems[item.index] as RenderSettingItem);
}
}

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;
}
}

private ScriptableRendererData CreateRendererDataAsset(string assetPath, RenderingPath renderingPath,
string fileName)
{
var rendererAsset =
UniversalRenderPipelineAsset.CreateRendererAsset(assetPath, RendererType.UniversalRenderer, true, fileName)
as UniversalRendererData;
//Missing API to set deferred or forward
rendererAsset.renderingMode =
renderingPath == RenderingPath.Forward ? RenderingMode.Forward : RenderingMode.Deferred;
//missing API to assign to pipeline asset
return rendererAsset;
}

/// <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;
}

#region HelperFunctions

private static int GetEquivalentMainlightShadowResolution(int value)
{
return GetEquivalentShadowResolution(value);
}

private static int GetEquivalentAdditionalLightAtlasShadowResolution(int value)
{
return GetEquivalentShadowResolution(value);
}

private static int GetEquivalentShadowResolution(int value)
{
switch (value)
{
case 0: // low
return 1024;
case 1: // med
return 2048;
case 2: // high
return 4096;
case 3: // very high
return 4096;
default: // backup
return 1024;
}
}

private RenderingMode GetEquivalentRenderMode(RenderingPath path)
{
switch (path)
{
case RenderingPath.VertexLit:
case RenderingPath.Forward:
return RenderingMode.Forward;
case RenderingPath.DeferredLighting:
case RenderingPath.DeferredShading:
return RenderingMode.Deferred;
default:
return RenderingMode.Forward;
}
}

#endregion

#region Data

private struct GraphicsTierSettings
{
public bool ReflectionProbeBoxProjection;
public bool ReflectionProbeBlending;
public bool CascadeShadows;
public bool HDR;
public RenderingPath RenderingPath;
}

private class SettingsItem {}

private class RenderSettingItem : SettingsItem
{
// General
public int Index;

public string LevelName;

// Settings
public int PixelLightCount;
public int MSAA;
public ShadowQuality Shadows;
public ShadowResolution ShadowResolution;
public float ShadowDistance;
public int ShadowCascadeCount;
public float CascadeSplit2;
public Vector3 CascadeSplit4;
public bool SoftParticles;
}

#endregion
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading