Skip to content

Commit

Permalink
Merge branch 'release/0.8.3'
Browse files Browse the repository at this point in the history
  • Loading branch information
Arvtesh committed Jan 25, 2021
2 parents e34961d + cae527f commit 2a5df11
Show file tree
Hide file tree
Showing 24 changed files with 1,007 additions and 171 deletions.
19 changes: 19 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
14 changes: 14 additions & 0 deletions Outline.Core/Packages/UnityFx.Outline/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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;
Expand All @@ -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)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,19 @@ 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";
private const string _intensityPropName = "_outlineIntensity";
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.");
Expand Down Expand Up @@ -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)
{
Expand Down Expand Up @@ -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);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down Expand Up @@ -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);
}
}
Expand Down Expand Up @@ -203,7 +203,7 @@ public Camera Camera
/// <seealso cref="OutlineRenderers"/>
public void UpdateRenderers()
{
_renderers?.Reset(false, _layerMask);
_renderers?.Reset(false, _ignoreLayerMask);
}

#endregion
Expand All @@ -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();
Expand Down Expand Up @@ -255,7 +249,7 @@ private void Update()

if (_updateRenderers)
{
_renderers.Reset(false, _layerMask);
_renderers.Reset(false, _ignoreLayerMask);
}

foreach (var kvp in _cameraMap)
Expand All @@ -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
{
Expand Down Expand Up @@ -301,7 +288,7 @@ private void Reset()
{
if (_renderers != null)
{
_renderers.Reset(false, _layerMask);
_renderers.Reset(false, _ignoreLayerMask);
}
}

Expand Down Expand Up @@ -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);
}
}
}
Expand All @@ -433,7 +434,7 @@ private void CreateRenderersIfNeeded()
if (_renderers == null)
{
_renderers = new OutlineRendererCollection(gameObject);
_renderers.Reset(false, _layerMask);
_renderers.Reset(false, _ignoreLayerMask);
}
}

Expand Down
Loading

0 comments on commit 2a5df11

Please sign in to comment.