Skip to content

Commit 2a5df11

Browse files
committed
Merge branch 'release/0.8.3'
2 parents e34961d + cae527f commit 2a5df11

24 files changed

+1007
-171
lines changed

CHANGELOG.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,25 @@ All notable changes to this project will be documented in this file.
33

44
The format is based on [Keep a Changelog](http://keepachangelog.com/); this project adheres to [Semantic Versioning](http://semver.org/).
55

6+
## [0.8.3] - 2021.01.25
7+
8+
Misc improvements and bugfixes.
9+
10+
### Added
11+
- Added possibility to set custom shader tags for URP outlines.
12+
- 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)).
13+
14+
### Fixed
15+
- Fixed URP outlines rendering issue when both depth-testing and MSAA are enabled ([#23](https://github.com/Arvtesh/UnityFx.Outline/issues/23)).
16+
- Fixed `OutlineBehaviour` not working in edit mode after disabling and enabling it again.
17+
18+
### Changed
19+
- `OutlineEffect` now works in edit-mode.
20+
- `OutlineEffect` now exposes `OutlineLayerCollection` instead of `IList`.
21+
- `OutlineEffect` now uses `OnPreRender` to update its command buffer.
22+
- Moved `MergeLayerObjects` flag to `OutlineLayer` from `OutlineLayerCollection`.
23+
- Multiple `OutlineEffect` component instances can now be added to a camera.
24+
625
## [0.8.2] - 2020.11.10
726

827
[URP](https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@8.1/manual/index.html) per-layer outlines and misc improvements.

Outline.Core/Assets/Examples/SimplePerCamera/TestOutlineLayers.asset

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,30 @@ MonoBehaviour:
1818
type: 2}
1919
_outlineColor: {r: 1, g: 0, b: 0, a: 1}
2020
_outlineWidth: 5
21-
_outlineIntensity: 2
21+
_outlineIntensity: 1
22+
_outlineAlphaCutoff: 0.9
2223
_outlineMode: 0
2324
_name: My pretty layer
2425
_enabled: 1
26+
_mergeLayerObjects: 0
2527
- _settings:
2628
_outlineSettings: {fileID: 0}
2729
_outlineColor: {r: 1, g: 1, b: 0, a: 1}
2830
_outlineWidth: 15
2931
_outlineIntensity: 2
32+
_outlineAlphaCutoff: 0.9
3033
_outlineMode: 1
3134
_name: The second layer
3235
_enabled: 1
36+
_mergeLayerObjects: 0
3337
- _settings:
3438
_outlineSettings: {fileID: 0}
3539
_outlineColor: {r: 1, g: 0, b: 1, a: 1}
3640
_outlineWidth: 4
3741
_outlineIntensity: 2
42+
_outlineAlphaCutoff: 0.9
3843
_outlineMode: 4
3944
_name: The best layer
4045
_enabled: 1
46+
_mergeLayerObjects: 0
4147
_layerMask: 2

Outline.Core/Packages/UnityFx.Outline/CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,20 @@ All notable changes to this project will be documented in this file.
33

44
The format is based on [Keep a Changelog](http://keepachangelog.com/); this project adheres to [Semantic Versioning](http://semver.org/).
55

6+
## [0.8.3] - 2021.01.25
7+
8+
Misc improvements and bugfixes.
9+
10+
### Fixed
11+
- Fixed `OutlineBehaviour` not working in edit mode after disabling and enabling it again.
12+
13+
### Changed
14+
- `OutlineEffect` now works in edit-mode.
15+
- `OutlineEffect` now exposes `OutlineLayerCollection` instead of `IList`.
16+
- `OutlineEffect` now uses `OnPreRender` to update its command buffer.
17+
- Moved `MergeLayerObjects` flag to `OutlineLayer` from `OutlineLayerCollection`.
18+
- Multiple `OutlineEffect` component instances can now be added to a camera.
19+
620
## [0.8.2] - 2020.11.10
721

822
Misc improvements.

Outline.Core/Packages/UnityFx.Outline/Editor/Scripts/OutlineEffectEditor.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,16 @@ public override void OnInspectorGUI()
4545
}
4646
}
4747

48-
if (_effect.OutlineLayers.Count > 0)
48+
if (_effect.OutlineLayers)
4949
{
50-
_previewOpened = EditorGUILayout.Foldout(_previewOpened, "Preview", true);
51-
52-
if (_previewOpened)
50+
if (_effect.OutlineLayers.Count > 0)
5351
{
54-
OutlineEditorUtility.RenderPreview(_effect.OutlineLayers, true);
52+
_previewOpened = EditorGUILayout.Foldout(_previewOpened, "Preview", true);
53+
54+
if (_previewOpened)
55+
{
56+
OutlineEditorUtility.RenderPreview(_effect.OutlineLayers, true);
57+
}
5558
}
5659
}
5760
}

Outline.Core/Packages/UnityFx.Outline/Editor/Scripts/OutlineLayerCollectionEditor.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,11 @@ public override void OnInspectorGUI()
3838
EditorGUI.BeginChangeCheck();
3939

4040
var mask = EditorGUILayout.MaskField("Ignore layers", _layers.IgnoreLayerMask, InternalEditorUtility.layers);
41-
var merge = EditorGUILayout.Toggle("Merge Layer Objects", _layers.MergeLayerObjects);
4241

4342
if (EditorGUI.EndChangeCheck())
4443
{
45-
Undo.RecordObject(_layers, "Change layer collection");
44+
Undo.RecordObject(_layers, "Change ignore mask");
4645
_layers.IgnoreLayerMask = mask;
47-
_layers.MergeLayerObjects = merge;
4846
}
4947

5048
EditorGUILayout.Space();
@@ -89,6 +87,7 @@ private void OnDrawLayer(Rect rect, int index, bool isActive, bool isFocused)
8987
var layer = _layers[index];
9088

9189
var obj = layer.OutlineSettings;
90+
var merge = layer.MergeLayerObjects;
9291
var enabled = layer.Enabled;
9392
var name = layer.NameTag;
9493
var color = layer.OutlineColor;
@@ -120,6 +119,9 @@ private void OnDrawLayer(Rect rect, int index, bool isActive, bool isFocused)
120119
{
121120
name = EditorGUI.TextField(new Rect(rect.x, y, rect.width, lineHeight), "Name", name);
122121
y += lineOffset;
122+
123+
merge = EditorGUI.Toggle(new Rect(rect.x, y, rect.width, lineHeight), "Merge Layer Objects", merge);
124+
y += lineOffset;
123125
}
124126

125127
// Outline settings
@@ -157,6 +159,7 @@ private void OnDrawLayer(Rect rect, int index, bool isActive, bool isFocused)
157159
layer.OutlineSettings = obj;
158160
layer.Enabled = enabled;
159161
layer.NameTag = name;
162+
layer.MergeLayerObjects = merge;
160163
layer.OutlineWidth = width;
161164
layer.OutlineColor = color;
162165
layer.OutlineRenderMode = renderMode;
@@ -172,7 +175,7 @@ private void OnDrawHeader(Rect rect)
172175

173176
private float OnGetElementHeight(int index)
174177
{
175-
var numberOfLines = 5;
178+
var numberOfLines = 6;
176179

177180
if ((_layers[index].OutlineRenderMode & OutlineRenderFlags.Blurred) != 0)
178181
{

Outline.Core/Packages/UnityFx.Outline/Editor/Scripts/OutlineSettingsEditor.cs

Lines changed: 42 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,19 @@ namespace UnityFx.Outline
1212
[CustomEditor(typeof(OutlineSettings))]
1313
public class OutlineSettingsEditor : Editor
1414
{
15-
private const string _layerMaskPropName = "_outlineLayerMask";
15+
private const string _filterModePropName = "_filterMode";
16+
private const string _layerMaskPropName = "_layerMask";
17+
private const string _renderingLayerMaskPropName = "_renderingLayerMask";
1618
private const string _settingsPropName = "_outlineSettings";
1719
private const string _colorPropName = "_outlineColor";
1820
private const string _widthPropName = "_outlineWidth";
1921
private const string _intensityPropName = "_outlineIntensity";
2022
private const string _cutoffPropName = "_outlineAlphaCutoff";
2123
private const string _renderModePropName = "_outlineMode";
2224

23-
private static readonly GUIContent _layerMaskContent = new GUIContent("Outline Layer Mask", OutlineResources.OutlineLayerMaskTooltip);
25+
private static readonly GUIContent _filterModeContent = new GUIContent("Outline Filter Settings", "");
26+
private static readonly GUIContent _layerMaskContent = new GUIContent("Layer Mask", OutlineResources.OutlineLayerMaskTooltip);
27+
private static readonly GUIContent _renderingLayerMaskContent = new GUIContent("Rendering Layer Mask", OutlineResources.OutlineRenderingLayerMaskTooltip);
2428
private static readonly GUIContent _colorContent = new GUIContent("Color", "Outline color.");
2529
private static readonly GUIContent _widthContent = new GUIContent("Width", "Outline width in pixels.");
2630
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)
8084
internal static float GetSettingsWithMaskHeight(SerializedProperty property)
8185
{
8286
var lineCy = EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
83-
var layerMaskProp = property.FindPropertyRelative(_layerMaskPropName);
87+
var filterModeProp = property.FindPropertyRelative(_filterModePropName);
88+
var renderOutlineSettings = false;
8489

85-
if (layerMaskProp.intValue != 0)
90+
if (filterModeProp.intValue == (int)OutlineFilterMode.UseLayerMask)
91+
{
92+
var layerMaskProp = property.FindPropertyRelative(_layerMaskPropName);
93+
renderOutlineSettings = true;
94+
}
95+
else if (filterModeProp.intValue == (int)OutlineFilterMode.UseRenderingLayerMask)
96+
{
97+
var renderingLayerMaskProp = property.FindPropertyRelative(_renderingLayerMaskPropName);
98+
renderOutlineSettings = true;
99+
}
100+
101+
if (renderOutlineSettings)
86102
{
87103
var renderModeProp = property.FindPropertyRelative(_renderModePropName);
88104
var renderMode = (OutlineRenderFlags)renderModeProp.intValue;
89-
var result = lineCy * 5;
105+
var result = lineCy * 6;
90106

91107
if ((renderMode & OutlineRenderFlags.Blurred) != 0)
92108
{
@@ -140,14 +156,30 @@ internal static void DrawSettingsInstance(Rect rc, SerializedProperty property)
140156

141157
internal static void DrawSettingsWithMask(Rect rc, SerializedProperty property)
142158
{
143-
var layerMaskProp = property.FindPropertyRelative(_layerMaskPropName);
159+
var lineCy = EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
160+
var filterModeProp = property.FindPropertyRelative(_filterModePropName);
144161

145-
EditorGUI.PropertyField(new Rect(rc.x, rc.y, rc.width, EditorGUIUtility.singleLineHeight), layerMaskProp, _layerMaskContent);
162+
EditorGUI.PropertyField(new Rect(rc.x, rc.y, rc.width, EditorGUIUtility.singleLineHeight), filterModeProp, _filterModeContent);
146163

147-
if (layerMaskProp.intValue != 0)
164+
if (filterModeProp.intValue == (int)OutlineFilterMode.UseLayerMask)
148165
{
149-
var lineCy = EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
150-
DrawSettingsInstance(new Rect(rc.x, rc.y + lineCy, rc.width, rc.height - lineCy), property);
166+
var layerMaskProp = property.FindPropertyRelative(_layerMaskPropName);
167+
168+
EditorGUI.indentLevel += 1;
169+
EditorGUI.PropertyField(new Rect(rc.x, rc.y + lineCy, rc.width, EditorGUIUtility.singleLineHeight), layerMaskProp, _layerMaskContent);
170+
EditorGUI.indentLevel -= 1;
171+
172+
DrawSettingsInstance(new Rect(rc.x, rc.y + lineCy * 2, rc.width, rc.height - lineCy), property);
173+
}
174+
else if (filterModeProp.intValue == (int)OutlineFilterMode.UseRenderingLayerMask)
175+
{
176+
var renderingLayerMaskProp = property.FindPropertyRelative(_renderingLayerMaskPropName);
177+
178+
EditorGUI.indentLevel += 1;
179+
EditorGUI.PropertyField(new Rect(rc.x, rc.y + lineCy, rc.width, EditorGUIUtility.singleLineHeight), renderingLayerMaskProp, _renderingLayerMaskContent);
180+
EditorGUI.indentLevel -= 1;
181+
182+
DrawSettingsInstance(new Rect(rc.x, rc.y + lineCy * 2, rc.width, rc.height - lineCy), property);
151183
}
152184
}
153185

Outline.Core/Packages/UnityFx.Outline/Runtime/Scripts/OutlineBehaviour.cs

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public sealed class OutlineBehaviour : MonoBehaviour, IOutlineSettings
2626
[SerializeField, HideInInspector]
2727
private OutlineSettingsInstance _outlineSettings;
2828
[SerializeField, HideInInspector]
29-
private int _layerMask;
29+
private int _ignoreLayerMask;
3030
[SerializeField, HideInInspector]
3131
private CameraEvent _cameraEvent = OutlineRenderer.RenderEvent;
3232
[SerializeField, HideInInspector]
@@ -99,13 +99,13 @@ public int IgnoreLayerMask
9999
{
100100
get
101101
{
102-
return _layerMask;
102+
return _ignoreLayerMask;
103103
}
104104
set
105105
{
106-
if (_layerMask != value)
106+
if (_ignoreLayerMask != value)
107107
{
108-
_layerMask = value;
108+
_ignoreLayerMask = value;
109109
_renderers?.Reset(false, value);
110110
}
111111
}
@@ -203,7 +203,7 @@ public Camera Camera
203203
/// <seealso cref="OutlineRenderers"/>
204204
public void UpdateRenderers()
205205
{
206-
_renderers?.Reset(false, _layerMask);
206+
_renderers?.Reset(false, _ignoreLayerMask);
207207
}
208208

209209
#endregion
@@ -212,14 +212,8 @@ public void UpdateRenderers()
212212

213213
private void Awake()
214214
{
215-
if (GraphicsSettings.renderPipelineAsset)
216-
{
217-
Debug.LogWarningFormat(this, OutlineResources.SrpNotSupported, GetType().Name);
218-
}
219-
220-
#if UNITY_POST_PROCESSING_STACK_V2
221-
Debug.LogWarningFormat(this, OutlineResources.PpNotSupported, GetType().Name);
222-
#endif
215+
OutlineResources.LogSrpNotSupported(this);
216+
OutlineResources.LogPpNotSupported(this);
223217

224218
CreateRenderersIfNeeded();
225219
CreateSettingsIfNeeded();
@@ -255,7 +249,7 @@ private void Update()
255249

256250
if (_updateRenderers)
257251
{
258-
_renderers.Reset(false, _layerMask);
252+
_renderers.Reset(false, _ignoreLayerMask);
259253
}
260254

261255
foreach (var kvp in _cameraMap)
@@ -266,14 +260,7 @@ private void Update()
266260
if (camera)
267261
{
268262
cmdBuffer.Clear();
269-
270-
if (_renderers.Count > 0)
271-
{
272-
using (var renderer = new OutlineRenderer(cmdBuffer, _outlineResources, camera.actualRenderingPath))
273-
{
274-
renderer.Render(_renderers.GetList(), _outlineSettings, name);
275-
}
276-
}
263+
FillCommandBuffer(camera, cmdBuffer);
277264
}
278265
else
279266
{
@@ -301,7 +288,7 @@ private void Reset()
301288
{
302289
if (_renderers != null)
303290
{
304-
_renderers.Reset(false, _layerMask);
291+
_renderers.Reset(false, _ignoreLayerMask);
305292
}
306293
}
307294

@@ -416,6 +403,20 @@ private void OnCameraPreRender(Camera camera)
416403
camera.AddCommandBuffer(_cameraEvent, cmdBuf);
417404

418405
_cameraMap.Add(camera, cmdBuf);
406+
#if UNITY_EDITOR
407+
FillCommandBuffer(camera, cmdBuf);
408+
#endif
409+
}
410+
}
411+
}
412+
413+
private void FillCommandBuffer(Camera camera, CommandBuffer cmdBuffer)
414+
{
415+
if (_renderers.Count > 0)
416+
{
417+
using (var renderer = new OutlineRenderer(cmdBuffer, _outlineResources, camera.actualRenderingPath))
418+
{
419+
renderer.Render(_renderers.GetList(), _outlineSettings, name);
419420
}
420421
}
421422
}
@@ -433,7 +434,7 @@ private void CreateRenderersIfNeeded()
433434
if (_renderers == null)
434435
{
435436
_renderers = new OutlineRendererCollection(gameObject);
436-
_renderers.Reset(false, _layerMask);
437+
_renderers.Reset(false, _ignoreLayerMask);
437438
}
438439
}
439440

0 commit comments

Comments
 (0)