diff --git a/CHANGELOG.md b/CHANGELOG.md index 1cea2e8..120defc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,25 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/); this project adheres to [Semantic Versioning](http://semver.org/). +## [0.8.3] - 2021.01.25 + +Misc improvements and bugfixes. + +### Added +- Added possibility to set custom shader tags for URP outlines. +- Added support for filtering URP outline renderers by [rendering layer mask](https://docs.unity3d.com/ScriptReference/Renderer-renderingLayerMask.html) ([#22](https://github.com/Arvtesh/UnityFx.Outline/issues/22)). + +### Fixed +- Fixed URP outlines rendering issue when both depth-testing and MSAA are enabled ([#23](https://github.com/Arvtesh/UnityFx.Outline/issues/23)). +- Fixed `OutlineBehaviour` not working in edit mode after disabling and enabling it again. + +### Changed +- `OutlineEffect` now works in edit-mode. +- `OutlineEffect` now exposes `OutlineLayerCollection` instead of `IList`. +- `OutlineEffect` now uses `OnPreRender` to update its command buffer. +- Moved `MergeLayerObjects` flag to `OutlineLayer` from `OutlineLayerCollection`. +- Multiple `OutlineEffect` component instances can now be added to a camera. + ## [0.8.2] - 2020.11.10 [URP](https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@8.1/manual/index.html) per-layer outlines and misc improvements. diff --git a/Outline.Core/Assets/Examples/SimplePerCamera/TestOutlineLayers.asset b/Outline.Core/Assets/Examples/SimplePerCamera/TestOutlineLayers.asset index 3707e2e..8ceb008 100644 --- a/Outline.Core/Assets/Examples/SimplePerCamera/TestOutlineLayers.asset +++ b/Outline.Core/Assets/Examples/SimplePerCamera/TestOutlineLayers.asset @@ -18,24 +18,30 @@ MonoBehaviour: type: 2} _outlineColor: {r: 1, g: 0, b: 0, a: 1} _outlineWidth: 5 - _outlineIntensity: 2 + _outlineIntensity: 1 + _outlineAlphaCutoff: 0.9 _outlineMode: 0 _name: My pretty layer _enabled: 1 + _mergeLayerObjects: 0 - _settings: _outlineSettings: {fileID: 0} _outlineColor: {r: 1, g: 1, b: 0, a: 1} _outlineWidth: 15 _outlineIntensity: 2 + _outlineAlphaCutoff: 0.9 _outlineMode: 1 _name: The second layer _enabled: 1 + _mergeLayerObjects: 0 - _settings: _outlineSettings: {fileID: 0} _outlineColor: {r: 1, g: 0, b: 1, a: 1} _outlineWidth: 4 _outlineIntensity: 2 + _outlineAlphaCutoff: 0.9 _outlineMode: 4 _name: The best layer _enabled: 1 + _mergeLayerObjects: 0 _layerMask: 2 diff --git a/Outline.Core/Packages/UnityFx.Outline/CHANGELOG.md b/Outline.Core/Packages/UnityFx.Outline/CHANGELOG.md index ecfee66..c07ff3e 100644 --- a/Outline.Core/Packages/UnityFx.Outline/CHANGELOG.md +++ b/Outline.Core/Packages/UnityFx.Outline/CHANGELOG.md @@ -3,6 +3,20 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/); this project adheres to [Semantic Versioning](http://semver.org/). +## [0.8.3] - 2021.01.25 + +Misc improvements and bugfixes. + +### Fixed +- Fixed `OutlineBehaviour` not working in edit mode after disabling and enabling it again. + +### Changed +- `OutlineEffect` now works in edit-mode. +- `OutlineEffect` now exposes `OutlineLayerCollection` instead of `IList`. +- `OutlineEffect` now uses `OnPreRender` to update its command buffer. +- Moved `MergeLayerObjects` flag to `OutlineLayer` from `OutlineLayerCollection`. +- Multiple `OutlineEffect` component instances can now be added to a camera. + ## [0.8.2] - 2020.11.10 Misc improvements. diff --git a/Outline.Core/Packages/UnityFx.Outline/Editor/Scripts/OutlineEffectEditor.cs b/Outline.Core/Packages/UnityFx.Outline/Editor/Scripts/OutlineEffectEditor.cs index fd4c904..d32c1ec 100644 --- a/Outline.Core/Packages/UnityFx.Outline/Editor/Scripts/OutlineEffectEditor.cs +++ b/Outline.Core/Packages/UnityFx.Outline/Editor/Scripts/OutlineEffectEditor.cs @@ -45,13 +45,16 @@ public override void OnInspectorGUI() } } - if (_effect.OutlineLayers.Count > 0) + if (_effect.OutlineLayers) { - _previewOpened = EditorGUILayout.Foldout(_previewOpened, "Preview", true); - - if (_previewOpened) + if (_effect.OutlineLayers.Count > 0) { - OutlineEditorUtility.RenderPreview(_effect.OutlineLayers, true); + _previewOpened = EditorGUILayout.Foldout(_previewOpened, "Preview", true); + + if (_previewOpened) + { + OutlineEditorUtility.RenderPreview(_effect.OutlineLayers, true); + } } } } diff --git a/Outline.Core/Packages/UnityFx.Outline/Editor/Scripts/OutlineLayerCollectionEditor.cs b/Outline.Core/Packages/UnityFx.Outline/Editor/Scripts/OutlineLayerCollectionEditor.cs index 207abc6..969c46b 100644 --- a/Outline.Core/Packages/UnityFx.Outline/Editor/Scripts/OutlineLayerCollectionEditor.cs +++ b/Outline.Core/Packages/UnityFx.Outline/Editor/Scripts/OutlineLayerCollectionEditor.cs @@ -38,13 +38,11 @@ public override void OnInspectorGUI() EditorGUI.BeginChangeCheck(); var mask = EditorGUILayout.MaskField("Ignore layers", _layers.IgnoreLayerMask, InternalEditorUtility.layers); - var merge = EditorGUILayout.Toggle("Merge Layer Objects", _layers.MergeLayerObjects); if (EditorGUI.EndChangeCheck()) { - Undo.RecordObject(_layers, "Change layer collection"); + Undo.RecordObject(_layers, "Change ignore mask"); _layers.IgnoreLayerMask = mask; - _layers.MergeLayerObjects = merge; } EditorGUILayout.Space(); @@ -89,6 +87,7 @@ private void OnDrawLayer(Rect rect, int index, bool isActive, bool isFocused) var layer = _layers[index]; var obj = layer.OutlineSettings; + var merge = layer.MergeLayerObjects; var enabled = layer.Enabled; var name = layer.NameTag; var color = layer.OutlineColor; @@ -120,6 +119,9 @@ private void OnDrawLayer(Rect rect, int index, bool isActive, bool isFocused) { name = EditorGUI.TextField(new Rect(rect.x, y, rect.width, lineHeight), "Name", name); y += lineOffset; + + merge = EditorGUI.Toggle(new Rect(rect.x, y, rect.width, lineHeight), "Merge Layer Objects", merge); + y += lineOffset; } // Outline settings @@ -157,6 +159,7 @@ private void OnDrawLayer(Rect rect, int index, bool isActive, bool isFocused) layer.OutlineSettings = obj; layer.Enabled = enabled; layer.NameTag = name; + layer.MergeLayerObjects = merge; layer.OutlineWidth = width; layer.OutlineColor = color; layer.OutlineRenderMode = renderMode; @@ -172,7 +175,7 @@ private void OnDrawHeader(Rect rect) private float OnGetElementHeight(int index) { - var numberOfLines = 5; + var numberOfLines = 6; if ((_layers[index].OutlineRenderMode & OutlineRenderFlags.Blurred) != 0) { diff --git a/Outline.Core/Packages/UnityFx.Outline/Editor/Scripts/OutlineSettingsEditor.cs b/Outline.Core/Packages/UnityFx.Outline/Editor/Scripts/OutlineSettingsEditor.cs index 2ccb069..10497c3 100644 --- a/Outline.Core/Packages/UnityFx.Outline/Editor/Scripts/OutlineSettingsEditor.cs +++ b/Outline.Core/Packages/UnityFx.Outline/Editor/Scripts/OutlineSettingsEditor.cs @@ -12,7 +12,9 @@ namespace UnityFx.Outline [CustomEditor(typeof(OutlineSettings))] public class OutlineSettingsEditor : Editor { - private const string _layerMaskPropName = "_outlineLayerMask"; + private const string _filterModePropName = "_filterMode"; + private const string _layerMaskPropName = "_layerMask"; + private const string _renderingLayerMaskPropName = "_renderingLayerMask"; private const string _settingsPropName = "_outlineSettings"; private const string _colorPropName = "_outlineColor"; private const string _widthPropName = "_outlineWidth"; @@ -20,7 +22,9 @@ public class OutlineSettingsEditor : Editor private const string _cutoffPropName = "_outlineAlphaCutoff"; private const string _renderModePropName = "_outlineMode"; - private static readonly GUIContent _layerMaskContent = new GUIContent("Outline Layer Mask", OutlineResources.OutlineLayerMaskTooltip); + private static readonly GUIContent _filterModeContent = new GUIContent("Outline Filter Settings", ""); + private static readonly GUIContent _layerMaskContent = new GUIContent("Layer Mask", OutlineResources.OutlineLayerMaskTooltip); + private static readonly GUIContent _renderingLayerMaskContent = new GUIContent("Rendering Layer Mask", OutlineResources.OutlineRenderingLayerMaskTooltip); private static readonly GUIContent _colorContent = new GUIContent("Color", "Outline color."); private static readonly GUIContent _widthContent = new GUIContent("Width", "Outline width in pixels."); private static readonly GUIContent _renderModeContent = new GUIContent("Render Flags", "Outline render flags. Multiple values can be selected at the same time."); @@ -80,13 +84,25 @@ internal static float GetSettingsInstanceHeight(SerializedProperty property) internal static float GetSettingsWithMaskHeight(SerializedProperty property) { var lineCy = EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - var layerMaskProp = property.FindPropertyRelative(_layerMaskPropName); + var filterModeProp = property.FindPropertyRelative(_filterModePropName); + var renderOutlineSettings = false; - if (layerMaskProp.intValue != 0) + if (filterModeProp.intValue == (int)OutlineFilterMode.UseLayerMask) + { + var layerMaskProp = property.FindPropertyRelative(_layerMaskPropName); + renderOutlineSettings = true; + } + else if (filterModeProp.intValue == (int)OutlineFilterMode.UseRenderingLayerMask) + { + var renderingLayerMaskProp = property.FindPropertyRelative(_renderingLayerMaskPropName); + renderOutlineSettings = true; + } + + if (renderOutlineSettings) { var renderModeProp = property.FindPropertyRelative(_renderModePropName); var renderMode = (OutlineRenderFlags)renderModeProp.intValue; - var result = lineCy * 5; + var result = lineCy * 6; if ((renderMode & OutlineRenderFlags.Blurred) != 0) { @@ -140,14 +156,30 @@ internal static void DrawSettingsInstance(Rect rc, SerializedProperty property) internal static void DrawSettingsWithMask(Rect rc, SerializedProperty property) { - var layerMaskProp = property.FindPropertyRelative(_layerMaskPropName); + var lineCy = EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + var filterModeProp = property.FindPropertyRelative(_filterModePropName); - EditorGUI.PropertyField(new Rect(rc.x, rc.y, rc.width, EditorGUIUtility.singleLineHeight), layerMaskProp, _layerMaskContent); + EditorGUI.PropertyField(new Rect(rc.x, rc.y, rc.width, EditorGUIUtility.singleLineHeight), filterModeProp, _filterModeContent); - if (layerMaskProp.intValue != 0) + if (filterModeProp.intValue == (int)OutlineFilterMode.UseLayerMask) { - var lineCy = EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - DrawSettingsInstance(new Rect(rc.x, rc.y + lineCy, rc.width, rc.height - lineCy), property); + var layerMaskProp = property.FindPropertyRelative(_layerMaskPropName); + + EditorGUI.indentLevel += 1; + EditorGUI.PropertyField(new Rect(rc.x, rc.y + lineCy, rc.width, EditorGUIUtility.singleLineHeight), layerMaskProp, _layerMaskContent); + EditorGUI.indentLevel -= 1; + + DrawSettingsInstance(new Rect(rc.x, rc.y + lineCy * 2, rc.width, rc.height - lineCy), property); + } + else if (filterModeProp.intValue == (int)OutlineFilterMode.UseRenderingLayerMask) + { + var renderingLayerMaskProp = property.FindPropertyRelative(_renderingLayerMaskPropName); + + EditorGUI.indentLevel += 1; + EditorGUI.PropertyField(new Rect(rc.x, rc.y + lineCy, rc.width, EditorGUIUtility.singleLineHeight), renderingLayerMaskProp, _renderingLayerMaskContent); + EditorGUI.indentLevel -= 1; + + DrawSettingsInstance(new Rect(rc.x, rc.y + lineCy * 2, rc.width, rc.height - lineCy), property); } } diff --git a/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineBehaviour.cs b/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineBehaviour.cs index 8a1622e..13f6485 100644 --- a/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineBehaviour.cs +++ b/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineBehaviour.cs @@ -26,7 +26,7 @@ public sealed class OutlineBehaviour : MonoBehaviour, IOutlineSettings [SerializeField, HideInInspector] private OutlineSettingsInstance _outlineSettings; [SerializeField, HideInInspector] - private int _layerMask; + private int _ignoreLayerMask; [SerializeField, HideInInspector] private CameraEvent _cameraEvent = OutlineRenderer.RenderEvent; [SerializeField, HideInInspector] @@ -99,13 +99,13 @@ public int IgnoreLayerMask { get { - return _layerMask; + return _ignoreLayerMask; } set { - if (_layerMask != value) + if (_ignoreLayerMask != value) { - _layerMask = value; + _ignoreLayerMask = value; _renderers?.Reset(false, value); } } @@ -203,7 +203,7 @@ public Camera Camera /// public void UpdateRenderers() { - _renderers?.Reset(false, _layerMask); + _renderers?.Reset(false, _ignoreLayerMask); } #endregion @@ -212,14 +212,8 @@ public void UpdateRenderers() private void Awake() { - if (GraphicsSettings.renderPipelineAsset) - { - Debug.LogWarningFormat(this, OutlineResources.SrpNotSupported, GetType().Name); - } - -#if UNITY_POST_PROCESSING_STACK_V2 - Debug.LogWarningFormat(this, OutlineResources.PpNotSupported, GetType().Name); -#endif + OutlineResources.LogSrpNotSupported(this); + OutlineResources.LogPpNotSupported(this); CreateRenderersIfNeeded(); CreateSettingsIfNeeded(); @@ -255,7 +249,7 @@ private void Update() if (_updateRenderers) { - _renderers.Reset(false, _layerMask); + _renderers.Reset(false, _ignoreLayerMask); } foreach (var kvp in _cameraMap) @@ -266,14 +260,7 @@ private void Update() if (camera) { cmdBuffer.Clear(); - - if (_renderers.Count > 0) - { - using (var renderer = new OutlineRenderer(cmdBuffer, _outlineResources, camera.actualRenderingPath)) - { - renderer.Render(_renderers.GetList(), _outlineSettings, name); - } - } + FillCommandBuffer(camera, cmdBuffer); } else { @@ -301,7 +288,7 @@ private void Reset() { if (_renderers != null) { - _renderers.Reset(false, _layerMask); + _renderers.Reset(false, _ignoreLayerMask); } } @@ -416,6 +403,20 @@ private void OnCameraPreRender(Camera camera) camera.AddCommandBuffer(_cameraEvent, cmdBuf); _cameraMap.Add(camera, cmdBuf); +#if UNITY_EDITOR + FillCommandBuffer(camera, cmdBuf); +#endif + } + } + } + + private void FillCommandBuffer(Camera camera, CommandBuffer cmdBuffer) + { + if (_renderers.Count > 0) + { + using (var renderer = new OutlineRenderer(cmdBuffer, _outlineResources, camera.actualRenderingPath)) + { + renderer.Render(_renderers.GetList(), _outlineSettings, name); } } } @@ -433,7 +434,7 @@ private void CreateRenderersIfNeeded() if (_renderers == null) { _renderers = new OutlineRendererCollection(gameObject); - _renderers.Reset(false, _layerMask); + _renderers.Reset(false, _ignoreLayerMask); } } diff --git a/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineEffect.cs b/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineEffect.cs index 7de6c04..bc9cd3f 100644 --- a/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineEffect.cs +++ b/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineEffect.cs @@ -15,7 +15,7 @@ namespace UnityFx.Outline /// /// /// - [DisallowMultipleComponent] + [ExecuteInEditMode] [RequireComponent(typeof(Camera))] public sealed partial class OutlineEffect : MonoBehaviour { @@ -60,14 +60,16 @@ public OutlineResources OutlineResources /// /// Gets collection of outline layers. /// - /// - public IList OutlineLayers + public OutlineLayerCollection OutlineLayers { get { - CreateLayersIfNeeded(); return _outlineLayers; } + set + { + _outlineLayers = value; + } } /// @@ -148,72 +150,29 @@ public void RemoveGameObject(GameObject go) } } - /// - /// Shares with another instance. - /// - /// Effect to share with. - /// - public void ShareLayersWith(OutlineEffect other) - { - if (other) - { - CreateLayersIfNeeded(); - other._outlineLayers = _outlineLayers; - } - } - #endregion #region MonoBehaviour private void Awake() { - if (GraphicsSettings.renderPipelineAsset) - { - Debug.LogWarningFormat(this, OutlineResources.SrpNotSupported, GetType().Name); - } - -#if UNITY_POST_PROCESSING_STACK_V2 - Debug.LogWarningFormat(this, OutlineResources.PpNotSupported, GetType().Name); -#endif + OutlineResources.LogSrpNotSupported(this); + OutlineResources.LogPpNotSupported(this); } private void OnEnable() { - _camera = GetComponent(); - - if (_camera) - { - _commandBuffer = new CommandBuffer - { - name = string.Format("{0} - {1}", GetType().Name, name) - }; - - _camera.depthTextureMode |= DepthTextureMode.Depth; - _camera.AddCommandBuffer(_cameraEvent, _commandBuffer); - } + InitCameraAndCommandBuffer(); } private void OnDisable() { - if (_camera) - { - _camera.RemoveCommandBuffer(_cameraEvent, _commandBuffer); - } - - if (_commandBuffer != null) - { - _commandBuffer.Dispose(); - _commandBuffer = null; - } + ReleaseCameraAndCommandBuffer(); } - private void Update() + private void OnPreRender() { - if (_camera && _outlineLayers) - { - FillCommandBuffer(); - } + FillCommandBuffer(); } private void OnDestroy() @@ -227,6 +186,12 @@ private void OnDestroy() #if UNITY_EDITOR + //private void OnValidate() + //{ + // InitCameraAndCommandBuffer(); + // FillCommandBuffer(); + //} + private void Reset() { _outlineLayers = null; @@ -238,20 +203,55 @@ private void Reset() #region implementation - private void FillCommandBuffer() + private void InitCameraAndCommandBuffer() { - _commandBuffer.Clear(); + _camera = GetComponent(); - if (_outlineResources && _outlineResources.IsValid) + if (_camera && _commandBuffer is null) { - using (var renderer = new OutlineRenderer(_commandBuffer, _outlineResources, _camera.actualRenderingPath)) + _commandBuffer = new CommandBuffer { - _renderObjects.Clear(); - _outlineLayers.GetRenderObjects(_renderObjects); + name = string.Format("{0} - {1}", GetType().Name, name) + }; - foreach (var renderObject in _renderObjects) + _camera.depthTextureMode |= DepthTextureMode.Depth; + _camera.AddCommandBuffer(_cameraEvent, _commandBuffer); + } + } + + private void ReleaseCameraAndCommandBuffer() + { + if (_commandBuffer != null) + { + if (_camera) + { + _camera.RemoveCommandBuffer(_cameraEvent, _commandBuffer); + } + + _commandBuffer.Dispose(); + _commandBuffer = null; + } + + _camera = null; + } + + private void FillCommandBuffer() + { + if (_camera && _outlineLayers && _commandBuffer != null) + { + _commandBuffer.Clear(); + + if (_outlineResources && _outlineResources.IsValid) + { + using (var renderer = new OutlineRenderer(_commandBuffer, _outlineResources, _camera.actualRenderingPath)) { - renderer.Render(renderObject); + _renderObjects.Clear(); + _outlineLayers.GetRenderObjects(_renderObjects); + + foreach (var renderObject in _renderObjects) + { + renderer.Render(renderObject); + } } } } diff --git a/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineFilterMode.cs b/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineFilterMode.cs new file mode 100644 index 0000000..c234a9f --- /dev/null +++ b/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineFilterMode.cs @@ -0,0 +1,15 @@ +// Copyright (C) 2019-2020 Alexander Bogarsukov. All rights reserved. +// See the LICENSE.md file in the project root for more information. + +using System; +using UnityEngine; + +namespace UnityFx.Outline +{ + internal enum OutlineFilterMode + { + None, + UseLayerMask, + UseRenderingLayerMask, + } +} diff --git a/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineFilterMode.cs.meta b/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineFilterMode.cs.meta new file mode 100644 index 0000000..cd45e8d --- /dev/null +++ b/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineFilterMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 82c9d42cc303be24d852b8db7c4b650f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineLayer.cs b/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineLayer.cs index ea9264c..53543ce 100644 --- a/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineLayer.cs +++ b/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineLayer.cs @@ -26,6 +26,8 @@ public sealed class OutlineLayer : ICollection, IReadOnlyCollection< private string _name; [SerializeField, HideInInspector] private bool _enabled = true; + [SerializeField, HideInInspector] + private bool _mergeLayerObjects; private OutlineLayerCollection _parentCollection; private Dictionary _outlineObjects = new Dictionary(); @@ -67,6 +69,21 @@ public bool Enabled } } + /// + /// Gets or sets a value indicating whether layer game objects should be trated as one. + /// + public bool MergeLayerObjects + { + get + { + return _mergeLayerObjects; + } + set + { + _mergeLayerObjects = value; + } + } + /// /// Gets index of the layer in parent collection. /// @@ -178,13 +195,20 @@ public void GetRenderObjects(IList renderObjects) { if (_enabled) { - foreach (var kvp in _outlineObjects) + if (_mergeLayerObjects) { - var go = kvp.Key; - - if (go && go.activeInHierarchy) + renderObjects.Add(new OutlineRenderObject(GetRenderers(), this, Name)); + } + else + { + foreach (var kvp in _outlineObjects) { - renderObjects.Add(new OutlineRenderObject(kvp.Value.GetList(), _settings, go.name)); + var go = kvp.Key; + + if (go && go.activeInHierarchy) + { + renderObjects.Add(new OutlineRenderObject(kvp.Value.GetList(), _settings, go.name)); + } } } } diff --git a/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineLayerCollection.cs b/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineLayerCollection.cs index 160bb83..0e4c483 100644 --- a/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineLayerCollection.cs +++ b/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineLayerCollection.cs @@ -22,9 +22,7 @@ public sealed class OutlineLayerCollection : ScriptableObject, IList _layers = new List(); [SerializeField, HideInInspector] - private int _layerMask; - [SerializeField, HideInInspector] - private bool _mergeLayerObjects; + private int _ignoreLayerMask; #endregion @@ -37,13 +35,13 @@ public int IgnoreLayerMask { get { - return _layerMask; + return _ignoreLayerMask; } set { - if (_layerMask != value) + if (_ignoreLayerMask != value) { - _layerMask = value; + _ignoreLayerMask = value; foreach (var layer in _layers) { @@ -53,21 +51,6 @@ public int IgnoreLayerMask } } - /// - /// Gets or sets a value indicating whether layer game objects should be trated as one. - /// - public bool MergeLayerObjects - { - get - { - return _mergeLayerObjects; - } - set - { - _mergeLayerObjects = value; - } - } - /// /// Gets number of game objects in the layers. /// @@ -119,19 +102,9 @@ public OutlineLayer AddLayer() /// public void GetRenderObjects(IList renderObjects) { - if (_mergeLayerObjects) - { - foreach (var layer in _layers) - { - renderObjects.Add(new OutlineRenderObject(layer.GetRenderers(), layer, layer.Name)); - } - } - else + foreach (var layer in _layers) { - foreach (var layer in _layers) - { - layer.GetRenderObjects(renderObjects); - } + layer.GetRenderObjects(renderObjects); } } diff --git a/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineRenderer.cs b/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineRenderer.cs index 3ca4413..ef6a672 100644 --- a/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineRenderer.cs +++ b/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineRenderer.cs @@ -203,6 +203,7 @@ public OutlineRenderer(CommandBuffer cmd, OutlineResources resources, RenderTarg rtDesc.shadowSamplingMode = ShadowSamplingMode.None; rtDesc.depthBufferBits = 0; rtDesc.colorFormat = RtFormat; + rtDesc.msaaSamples = 1; cmd.GetTemporaryRT(resources.MaskTexId, rtDesc, FilterMode.Bilinear); cmd.GetTemporaryRT(resources.TempTexId, rtDesc, FilterMode.Bilinear); @@ -311,14 +312,6 @@ public static RenderTargetIdentifier GetBuiltinDepth(RenderingPath renderingPath return (renderingPath == RenderingPath.DeferredShading || renderingPath == RenderingPath.DeferredLighting) ? BuiltinRenderTextureType.ResolvedDepth : BuiltinRenderTextureType.Depth; } - /// - /// Creates a default instance or . - /// - public static RenderTextureDescriptor GetDefaultRtDesc() - { - return new RenderTextureDescriptor(-1, -1, RenderTextureFormat.R8, 0); - } - /// /// Specialized render target setup. Do not use if not sure. /// @@ -350,7 +343,6 @@ public void RenderObjectClear(OutlineRenderFlags flags) } } - //_commandBuffer.SetSinglePassStereo(SinglePassStereoMode.Instancing); _commandBuffer.ClearRenderTarget(false, true, Color.clear); } diff --git a/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineResources.cs b/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineResources.cs index 0d8d261..587462e 100644 --- a/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineResources.cs +++ b/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineResources.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using UnityEditor; using UnityEngine; using UnityEngine.Rendering; @@ -144,6 +145,11 @@ public sealed class OutlineResources : ScriptableObject /// public const string OutlineLayerMaskTooltip = "Layer mask for outined objects."; + /// + /// Tooltip text for outline field. + /// + public const string OutlineRenderingLayerMaskTooltip = "Rendering layer mask for outined objects."; + /// /// Index of the HPass in . /// @@ -467,6 +473,26 @@ public static float[] GetGaussSamples(int width, float[] samples) return samples; } + /// + /// Writes a console warning if SRP is detected. + /// + public static void LogSrpNotSupported(UnityEngine.Object obj) + { + if (GraphicsSettings.renderPipelineAsset) + { + UnityEngine.Debug.LogWarningFormat(obj, SrpNotSupported, obj.GetType().Name); + } + } + + /// + /// Writes a console warning if Post Processing Stack v2 is detected. + /// + [Conditional("UNITY_POST_PROCESSING_STACK_V2")] + public static void LogPpNotSupported(UnityEngine.Object obj) + { + UnityEngine.Debug.LogWarningFormat(obj, PpNotSupported, obj.GetType().Name); + } + #endregion #region ScriptableObject diff --git a/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineSettingsWithLayerMask.cs b/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineSettingsWithLayerMask.cs index 1336ffc..819bc6a 100644 --- a/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineSettingsWithLayerMask.cs +++ b/Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineSettingsWithLayerMask.cs @@ -15,7 +15,11 @@ internal class OutlineSettingsWithLayerMask : OutlineSettingsInstance // NOTE: There are custom editors for public components, so no need to show these in default inspector. [SerializeField, HideInInspector] - private LayerMask _outlineLayerMask; + private OutlineFilterMode _filterMode; + [SerializeField, HideInInspector] + private LayerMask _layerMask; + [SerializeField, HideInInspector] + private uint _renderingLayerMask = 1; #pragma warning restore 0649 @@ -23,7 +27,41 @@ internal class OutlineSettingsWithLayerMask : OutlineSettingsInstance #region interface - public int OutlineLayerMask => _outlineLayerMask; + public int OutlineLayerMask + { + get + { + if (_filterMode == OutlineFilterMode.UseLayerMask) + { + return _layerMask; + } + + if (_filterMode == OutlineFilterMode.UseRenderingLayerMask) + { + return -1; + } + + return 0; + } + } + + public uint OutlineRenderingLayerMask + { + get + { + if (_filterMode == OutlineFilterMode.UseLayerMask) + { + return uint.MaxValue; + } + + if (_filterMode == OutlineFilterMode.UseRenderingLayerMask) + { + return _renderingLayerMask; + } + + return 0; + } + } #endregion diff --git a/Outline.Core/Packages/UnityFx.Outline/package.json b/Outline.Core/Packages/UnityFx.Outline/package.json index 5ffda80..da53368 100644 --- a/Outline.Core/Packages/UnityFx.Outline/package.json +++ b/Outline.Core/Packages/UnityFx.Outline/package.json @@ -1,6 +1,6 @@ { "name": "com.unityfx.outline", - "version": "0.8.2", + "version": "0.8.3", "displayName": "Outline toolkit", "description": "This package contains configurable per-object and per-camera outline effect implementation for built-in render pipeline. Both solid and blurred outline modes are supported (Gauss blur), as well as depth testing. Reusable and extensible API.", "unity": "2018.4", diff --git a/Outline.Core/Packages/packages-lock.json b/Outline.Core/Packages/packages-lock.json new file mode 100644 index 0000000..fdc7641 --- /dev/null +++ b/Outline.Core/Packages/packages-lock.json @@ -0,0 +1,312 @@ +{ + "dependencies": { + "com.unity.ext.nunit": { + "version": "1.0.0", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.subsystemregistration": { + "version": "1.0.6", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.test-framework": { + "version": "1.1.18", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ext.nunit": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ugui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0" + } + }, + "com.unity.xr.legacyinputhelpers": { + "version": "2.1.4", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.xr.management": { + "version": "3.2.16", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.xr.legacyinputhelpers": "2.1.2", + "com.unity.subsystemregistration": "1.0.6" + }, + "url": "https://packages.unity.com" + }, + "com.unity.xr.mock-hmd": { + "version": "1.2.0-preview.1", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.xr.management": "3.0.6" + }, + "url": "https://packages.unity.com" + }, + "com.unityfx.outline": { + "version": "file:UnityFx.Outline", + "depth": 0, + "source": "embedded", + "dependencies": {} + }, + "com.unity.modules.ai": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.androidjni": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.animation": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.assetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.audio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.cloth": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.director": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.animation": "1.0.0" + } + }, + "com.unity.modules.imageconversion": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.imgui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.jsonserialize": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.particlesystem": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics2d": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.screencapture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.subsystems": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.terrain": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.terrainphysics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.terrain": "1.0.0" + } + }, + "com.unity.modules.tilemap": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics2d": "1.0.0" + } + }, + "com.unity.modules.ui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.uielements": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.umbra": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unityanalytics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.unitywebrequest": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unitywebrequestassetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestaudio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.audio": "1.0.0" + } + }, + "com.unity.modules.unitywebrequesttexture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestwww": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.vehicles": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.video": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.vr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } + }, + "com.unity.modules.wind": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.xr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.subsystems": "1.0.0" + } + } + } +} diff --git a/Outline.URP/Assets/URP/UniversalRenderPipelineAsset_Renderer.asset b/Outline.URP/Assets/URP/UniversalRenderPipelineAsset_Renderer.asset index dfe5a30..6b87fd8 100644 --- a/Outline.URP/Assets/URP/UniversalRenderPipelineAsset_Renderer.asset +++ b/Outline.URP/Assets/URP/UniversalRenderPipelineAsset_Renderer.asset @@ -21,11 +21,14 @@ MonoBehaviour: _outlineWidth: 11 _outlineIntensity: 2 _outlineAlphaCutoff: 0.9 - _outlineMode: 1 - _outlineLayerMask: + _outlineMode: 3 + _filterMode: 1 + _layerMask: serializedVersion: 2 m_Bits: 256 + _renderingLayerMask: 1 _renderPassEvent: 400 + _shaderPassNames: [] --- !u!114 &11400000 MonoBehaviour: m_ObjectHideFlags: 0 @@ -41,7 +44,7 @@ MonoBehaviour: m_RendererFeatures: - {fileID: -2278397774415627597} - {fileID: 7677070003599340959} - m_RendererFeatureMap: 9f7558507e6e8a6a + m_RendererFeatureMap: 9f7558507e6e8a6acd610d4e1a0787b3 postProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2} shaders: blitPS: {fileID: 4800000, guid: c17132b1f77d20942aa75f8429c0f8bc, type: 3} @@ -86,7 +89,10 @@ MonoBehaviour: _outlineIntensity: 2 _outlineAlphaCutoff: 0.9 _outlineMode: 0 - _outlineLayerMask: + _filterMode: 1 + _layerMask: serializedVersion: 2 m_Bits: 512 + _renderingLayerMask: 1 _renderPassEvent: 400 + _shaderPassNames: [] diff --git a/Outline.URP/Packages/UnityFx.Outline.URP/CHANGELOG.md b/Outline.URP/Packages/UnityFx.Outline.URP/CHANGELOG.md index 1be9d9f..1e5cf11 100644 --- a/Outline.URP/Packages/UnityFx.Outline.URP/CHANGELOG.md +++ b/Outline.URP/Packages/UnityFx.Outline.URP/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/); this project adheres to [Semantic Versioning](http://semver.org/). +## [0.3.0] - 2021.01.25 + +Misc improvements and bugfixes. + +### Added +- Added possibility to set custom shader tags for URP outlines. +- Added support for filtering URP outline renderers by [rendering layer mask](https://docs.unity3d.com/ScriptReference/Renderer-renderingLayerMask.html) ([#22](https://github.com/Arvtesh/UnityFx.Outline/issues/22)). + +### Fixed +- Fixed URP outlines rendering issue when both depth-testing and MSAA are enabled ([#23](https://github.com/Arvtesh/UnityFx.Outline/issues/23)). + ## [0.2.0] - 2020.11.10 ### Added diff --git a/Outline.URP/Packages/UnityFx.Outline.URP/Runtime/Scripts/OutlineFeature.cs b/Outline.URP/Packages/UnityFx.Outline.URP/Runtime/Scripts/OutlineFeature.cs index 39954df..4664c02 100644 --- a/Outline.URP/Packages/UnityFx.Outline.URP/Runtime/Scripts/OutlineFeature.cs +++ b/Outline.URP/Packages/UnityFx.Outline.URP/Runtime/Scripts/OutlineFeature.cs @@ -30,11 +30,12 @@ public class OutlineFeature : ScriptableRendererFeature private OutlineSettingsWithLayerMask _outlineSettings; [SerializeField] private RenderPassEvent _renderPassEvent = RenderPassEvent.AfterRenderingSkybox; + [SerializeField] + public string[] _shaderPassNames; #pragma warning restore 0649 private OutlinePass _outlinePass; - private string _featureName; #endregion @@ -49,6 +50,8 @@ public class OutlineFeature : ScriptableRendererFeature internal int OutlineLayerMask => _outlineSettings.OutlineLayerMask; + internal uint OutlineRenderingLayerMask => _outlineSettings.OutlineRenderingLayerMask; + internal string FeatureName => _featureName; #endregion @@ -67,7 +70,7 @@ public override void Create() _featureName = OutlineResources.EffectName; } - _outlinePass = new OutlinePass(this) + _outlinePass = new OutlinePass(this, _shaderPassNames) { renderPassEvent = _renderPassEvent }; diff --git a/Outline.URP/Packages/UnityFx.Outline.URP/Runtime/Scripts/OutlinePass.cs b/Outline.URP/Packages/UnityFx.Outline.URP/Runtime/Scripts/OutlinePass.cs index 977f49f..3bbebfd 100644 --- a/Outline.URP/Packages/UnityFx.Outline.URP/Runtime/Scripts/OutlinePass.cs +++ b/Outline.URP/Packages/UnityFx.Outline.URP/Runtime/Scripts/OutlinePass.cs @@ -14,13 +14,27 @@ internal class OutlinePass : ScriptableRenderPass { private readonly OutlineFeature _feature; private readonly List _renderObjects = new List(); - private readonly List _shaderTagIdList = new List() { new ShaderTagId("UniversalForward") }; + private readonly List _shaderTagIdList = new List(); private ScriptableRenderer _renderer; - public OutlinePass(OutlineFeature feature) + public OutlinePass(OutlineFeature feature, string[] shaderTags) { _feature = feature; + + if (shaderTags != null && shaderTags.Length > 0) + { + foreach (var passName in shaderTags) + { + _shaderTagIdList.Add(new ShaderTagId(passName)); + } + } + else + { + _shaderTagIdList.Add(new ShaderTagId("UniversalForward")); + _shaderTagIdList.Add(new ShaderTagId("LightweightForward")); + _shaderTagIdList.Add(new ShaderTagId("SRPDefaultUnlit")); + } } public void Setup(ScriptableRenderer renderer) @@ -32,19 +46,21 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData { var outlineResources = _feature.OutlineResources; var outlineSettings = _feature.OutlineSettings; + var camData = renderingData.cameraData; if (_feature.OutlineLayerMask != 0) { var cmd = CommandBufferPool.Get(_feature.FeatureName); - var filteringSettings = new FilteringSettings(RenderQueueRange.all, _feature.OutlineLayerMask); + var filteringSettings = new FilteringSettings(RenderQueueRange.all, _feature.OutlineLayerMask, _feature.OutlineRenderingLayerMask); var renderStateBlock = new RenderStateBlock(RenderStateMask.Nothing); - var sortingCriteria = renderingData.cameraData.defaultOpaqueSortFlags; + var sortingCriteria = camData.defaultOpaqueSortFlags; var drawingSettings = CreateDrawingSettings(_shaderTagIdList, ref renderingData, sortingCriteria); + var depthTexture = new RenderTargetIdentifier("_CameraDepthTexture"); drawingSettings.enableDynamicBatching = false; drawingSettings.overrideMaterial = outlineResources.RenderMaterial; - using (var renderer = new OutlineRenderer(cmd, outlineResources, _renderer.cameraColorTarget, _renderer.cameraDepth, renderingData.cameraData.cameraTargetDescriptor)) + using (var renderer = new OutlineRenderer(cmd, outlineResources, _renderer.cameraColorTarget, depthTexture/*_renderer.cameraDepth*/, camData.cameraTargetDescriptor)) { renderer.RenderObjectClear(outlineSettings.OutlineRenderMode); context.ExecuteCommandBuffer(cmd); @@ -62,7 +78,7 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData { var cmd = CommandBufferPool.Get(OutlineResources.EffectName); - using (var renderer = new OutlineRenderer(cmd, outlineResources, _renderer.cameraColorTarget, _renderer.cameraDepth, renderingData.cameraData.cameraTargetDescriptor)) + using (var renderer = new OutlineRenderer(cmd, outlineResources, _renderer.cameraColorTarget, _renderer.cameraDepth, camData.cameraTargetDescriptor)) { _renderObjects.Clear(); _feature.OutlineLayers.GetRenderObjects(_renderObjects); diff --git a/Outline.URP/Packages/UnityFx.Outline.URP/package.json b/Outline.URP/Packages/UnityFx.Outline.URP/package.json index c6e50c4..aa401f3 100644 --- a/Outline.URP/Packages/UnityFx.Outline.URP/package.json +++ b/Outline.URP/Packages/UnityFx.Outline.URP/package.json @@ -1,11 +1,11 @@ { "name": "com.unityfx.outline.urp", - "version": "0.2.0", + "version": "0.3.0", "displayName": "Outline toolkit (URP)", "description": "This package contains configurable outline implementation for Universal Render Pipeline.", "unity": "2019.4", "dependencies": { - "com.unityfx.outline": "0.8.2", + "com.unityfx.outline": "0.8.3", "com.unity.render-pipelines.universal": "7.0.0" }, "keywords": [ diff --git a/Outline.URP/Packages/packages-lock.json b/Outline.URP/Packages/packages-lock.json new file mode 100644 index 0000000..b22aedb --- /dev/null +++ b/Outline.URP/Packages/packages-lock.json @@ -0,0 +1,331 @@ +{ + "dependencies": { + "com.unity.render-pipelines.core": { + "version": "7.3.1", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.render-pipelines.universal": { + "version": "7.3.1", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.render-pipelines.core": "7.3.1", + "com.unity.shadergraph": "7.3.1" + }, + "url": "https://packages.unity.com" + }, + "com.unity.shadergraph": { + "version": "7.3.1", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.render-pipelines.core": "7.3.1" + }, + "url": "https://packages.unity.com" + }, + "com.unity.subsystemregistration": { + "version": "1.0.6", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.ugui": { + "version": "1.0.0", + "depth": 2, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0" + } + }, + "com.unity.xr.legacyinputhelpers": { + "version": "2.1.4", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.xr.management": { + "version": "3.2.16", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.xr.legacyinputhelpers": "2.1.2", + "com.unity.subsystemregistration": "1.0.6" + }, + "url": "https://packages.unity.com" + }, + "com.unity.xr.mock-hmd": { + "version": "1.2.0-preview.1", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.xr.management": "3.0.6" + }, + "url": "https://packages.unity.com" + }, + "com.unityfx.outline": { + "version": "file:../../Outline.Core/Packages/UnityFx.Outline", + "depth": 0, + "source": "local", + "dependencies": {} + }, + "com.unityfx.outline.urp": { + "version": "file:UnityFx.Outline.URP", + "depth": 0, + "source": "embedded", + "dependencies": { + "com.unityfx.outline": "0.8.2", + "com.unity.render-pipelines.universal": "7.0.0" + } + }, + "com.unity.modules.ai": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.androidjni": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.animation": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.assetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.audio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.cloth": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.director": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.animation": "1.0.0" + } + }, + "com.unity.modules.imageconversion": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.imgui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.jsonserialize": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.particlesystem": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics2d": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.screencapture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.subsystems": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.terrain": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.terrainphysics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.terrain": "1.0.0" + } + }, + "com.unity.modules.tilemap": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics2d": "1.0.0" + } + }, + "com.unity.modules.ui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.uielements": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.umbra": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unityanalytics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.unitywebrequest": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unitywebrequestassetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestaudio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.audio": "1.0.0" + } + }, + "com.unity.modules.unitywebrequesttexture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestwww": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.vehicles": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.video": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.vr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } + }, + "com.unity.modules.wind": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.xr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.subsystems": "1.0.0" + } + } + } +} diff --git a/README.md b/README.md index 1a4c9c4..75c76a7 100644 --- a/README.md +++ b/README.md @@ -68,8 +68,8 @@ Npm core package is available at [npmjs.com](https://www.npmjs.com/package/com.u } ], "dependencies": { - "com.unityfx.outline": "0.8.2", - "com.unityfx.outline.urp": "0.2.0", + "com.unityfx.outline": "0.8.3", + "com.unityfx.outline.urp": "0.3.0", } } ```