initial commit
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a6f99bf2d4ae49a4c82f5a916a642ee7
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,42 @@
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
// OutlineFx © NullTale - https://x.com/NullTale/
|
||||
namespace OutlineFx.Editor
|
||||
{
|
||||
[CustomPropertyDrawer(typeof(Optional<>))]
|
||||
public class OptionalDrawer : PropertyDrawer
|
||||
{
|
||||
private const float k_ToggleWidth = 18;
|
||||
|
||||
// =======================================================================
|
||||
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
|
||||
{
|
||||
var valueProperty = property.FindPropertyRelative("value");
|
||||
return EditorGUI.GetPropertyHeight(valueProperty);
|
||||
}
|
||||
|
||||
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
||||
{
|
||||
var valueProperty = property.FindPropertyRelative("value");
|
||||
var enabledProperty = property.FindPropertyRelative("enabled");
|
||||
|
||||
OnGui(position, label, enabledProperty, valueProperty);
|
||||
}
|
||||
|
||||
public static void OnGui(Rect position, GUIContent label, SerializedProperty enabledProperty, SerializedProperty valueProperty)
|
||||
{
|
||||
position.width -= k_ToggleWidth;
|
||||
using (new EditorGUI.DisabledGroupScope(!enabledProperty.boolValue))
|
||||
EditorGUI.PropertyField(position, valueProperty, label, true);
|
||||
|
||||
int indent = EditorGUI.indentLevel;
|
||||
EditorGUI.indentLevel = 0;
|
||||
|
||||
var togglePos = new Rect(position.x + position.width + EditorGUIUtility.standardVerticalSpacing, position.y, k_ToggleWidth, EditorGUIUtility.singleLineHeight);
|
||||
enabledProperty.boolValue = EditorGUI.Toggle(togglePos, GUIContent.none, enabledProperty.boolValue);
|
||||
|
||||
EditorGUI.indentLevel = indent;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7f5183bcac50faa4ca8eadb901bbd215
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 290431
|
||||
packageName: Outline 2D/3D
|
||||
packageVersion: 1.0
|
||||
assetPath: Assets/Outline/Editor/OptionalDrawer.cs
|
||||
uploadId: 678360
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "OutlineFx.Editor",
|
||||
"rootNamespace": "",
|
||||
"references": [
|
||||
"GUID:bdbbf3324f8e871489bfc4305a67110a"
|
||||
],
|
||||
"includePlatforms": [
|
||||
"Editor"
|
||||
],
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"overrideReferences": false,
|
||||
"precompiledReferences": [],
|
||||
"autoReferenced": true,
|
||||
"defineConstraints": [],
|
||||
"versionDefines": [],
|
||||
"noEngineReferences": false
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cc8d4d28a11c62c439d34471170d3450
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 290431
|
||||
packageName: Outline 2D/3D
|
||||
packageVersion: 1.0
|
||||
assetPath: Assets/Outline/Editor/OutlineFx.Editor.asmdef
|
||||
uploadId: 678360
|
||||
@@ -0,0 +1,48 @@
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
// OutlineFx © NullTale - https://x.com/NullTale/
|
||||
namespace OutlineFx.Editor
|
||||
{
|
||||
[CustomPropertyDrawer(typeof(OutlineFxFeature.SolidMask))]
|
||||
public class SolidMaskDrawer : PropertyDrawer
|
||||
{
|
||||
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
|
||||
{
|
||||
var lines = 3;
|
||||
|
||||
if (property.isExpanded == false)
|
||||
lines = 1;
|
||||
|
||||
return lines * EditorGUIUtility.singleLineHeight;
|
||||
}
|
||||
|
||||
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
||||
{
|
||||
var enabled = property.FindPropertyRelative(nameof(OutlineFxFeature.SolidMask._enabled));
|
||||
var pattern = property.FindPropertyRelative(nameof(OutlineFxFeature.SolidMask._pattern));
|
||||
var scale = property.FindPropertyRelative(nameof(OutlineFxFeature.SolidMask._scale));
|
||||
var velocity = property.FindPropertyRelative(nameof(OutlineFxFeature.SolidMask._velocity));
|
||||
|
||||
var line = 0;
|
||||
OptionalDrawer.OnGui(_fieldRect(line ++), label, enabled, pattern);
|
||||
property.isExpanded = EditorGUI.Foldout(_fieldRect(line - 1), property.isExpanded, GUIContent.none, true);
|
||||
|
||||
if (property.isExpanded == false)
|
||||
return;
|
||||
EditorGUI.indentLevel ++;
|
||||
using (new EditorGUI.DisabledGroupScope(!enabled.boolValue))
|
||||
{
|
||||
EditorGUI.PropertyField(_fieldRect(line ++), scale, true);
|
||||
EditorGUI.PropertyField(_fieldRect(line ++), velocity, true);
|
||||
}
|
||||
EditorGUI.indentLevel --;
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
Rect _fieldRect(int line)
|
||||
{
|
||||
return new Rect(position.x, position.y + line * EditorGUIUtility.singleLineHeight, position.width, EditorGUIUtility.singleLineHeight);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 23f3aacd265c4e309d33c46d1253d4b9
|
||||
timeCreated: 1694189677
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 290431
|
||||
packageName: Outline 2D/3D
|
||||
packageVersion: 1.0
|
||||
assetPath: Assets/Outline/Editor/SolidMaskDrawer.cs
|
||||
uploadId: 678360
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"name": "OutlineFx",
|
||||
"rootNamespace": "",
|
||||
"references": [
|
||||
"GUID:df380645f10b7bc4b97d4f5eb6303d95",
|
||||
"GUID:15fc0a57446b3144c949da3e2b9737a9"
|
||||
],
|
||||
"includePlatforms": [],
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"overrideReferences": false,
|
||||
"precompiledReferences": [],
|
||||
"autoReferenced": true,
|
||||
"defineConstraints": [],
|
||||
"versionDefines": [],
|
||||
"noEngineReferences": false
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bdbbf3324f8e871489bfc4305a67110a
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 290431
|
||||
packageName: Outline 2D/3D
|
||||
packageVersion: 1.0
|
||||
assetPath: Assets/Outline/OutlineFx.asmdef
|
||||
uploadId: 678360
|
||||
Binary file not shown.
@@ -0,0 +1,14 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 575eaab82c3c3ac469f6af1badd4e361
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 290431
|
||||
packageName: Outline 2D/3D
|
||||
packageVersion: 1.0
|
||||
assetPath: Assets/Outline/Readme.pdf
|
||||
uploadId: 678360
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 66a09bc715d6c8241bdb69d3b8dad04e
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,60 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
// OutlineFx © NullTale - https://x.com/NullTale/
|
||||
namespace OutlineFx
|
||||
{
|
||||
[Serializable]
|
||||
public sealed class Optional<T>
|
||||
{
|
||||
[SerializeField]
|
||||
internal bool enabled;
|
||||
|
||||
[SerializeField]
|
||||
internal T value = default!;
|
||||
|
||||
public bool Enabled
|
||||
{
|
||||
get => enabled;
|
||||
set => enabled = value;
|
||||
}
|
||||
|
||||
public T Value
|
||||
{
|
||||
get => value;
|
||||
set => this.value = value;
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
public Optional(bool enabled)
|
||||
{
|
||||
this.enabled = enabled;
|
||||
}
|
||||
|
||||
public Optional(T value, bool enabled)
|
||||
{
|
||||
this.enabled = enabled;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public T GetValue(T disabledValue)
|
||||
{
|
||||
return enabled ? value : disabledValue;
|
||||
}
|
||||
|
||||
public T GetValueOrDefault()
|
||||
{
|
||||
return enabled ? value : default;
|
||||
}
|
||||
|
||||
public static implicit operator bool(Optional<T> opt)
|
||||
{
|
||||
return opt.enabled;
|
||||
}
|
||||
|
||||
public static implicit operator T(Optional<T> opt)
|
||||
{
|
||||
return opt.value;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 718243a646830064cb47da777eb68934
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 290431
|
||||
packageName: Outline 2D/3D
|
||||
packageVersion: 1.0
|
||||
assetPath: Assets/Outline/Runtime/Optional.cs
|
||||
uploadId: 678360
|
||||
@@ -0,0 +1,32 @@
|
||||
using UnityEngine;
|
||||
|
||||
// OutlineFx © NullTale - https://x.com/NullTale/
|
||||
namespace OutlineFx
|
||||
{
|
||||
[ExecuteAlways] [DisallowMultipleComponent]
|
||||
public abstract class Outline : MonoBehaviour
|
||||
{
|
||||
internal Renderer _renderer;
|
||||
|
||||
public abstract Color Color {get; set; }
|
||||
|
||||
// =======================================================================
|
||||
private void OnEnable()
|
||||
{
|
||||
_renderer = GetComponent<Renderer>();
|
||||
}
|
||||
|
||||
private void OnWillRenderObject()
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
if (Application.isEditor && Equals(_renderer, null) == false)
|
||||
{
|
||||
if (TryGetComponent<Renderer>(out _renderer) == false)
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
OutlineFxFeature.Render(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 46ca052234754909a86ce4897938622b
|
||||
timeCreated: 1721240301
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 290431
|
||||
packageName: Outline 2D/3D
|
||||
packageVersion: 1.0
|
||||
assetPath: Assets/Outline/Runtime/Outline.cs
|
||||
uploadId: 678360
|
||||
@@ -0,0 +1,20 @@
|
||||
using UnityEngine;
|
||||
|
||||
// OutlineFx © NullTale - https://x.com/NullTale/
|
||||
namespace OutlineFx
|
||||
{
|
||||
[DefaultExecutionOrder(10000)]
|
||||
public class OutlineBlocker : Outline
|
||||
{
|
||||
private static Color s_color = new Color(0, 0, 0, 7f / 255f);
|
||||
|
||||
public override Color Color
|
||||
{
|
||||
get => new Color(0, 0, 0, 14f / 255f);
|
||||
set
|
||||
{
|
||||
// pass
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fe0edcb63acb478aadea1918b40e26b3
|
||||
timeCreated: 1721238836
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 290431
|
||||
packageName: Outline 2D/3D
|
||||
packageVersion: 1.0
|
||||
assetPath: Assets/Outline/Runtime/OutlineBlocker.cs
|
||||
uploadId: 678360
|
||||
@@ -0,0 +1,138 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
using UnityEngine.Rendering.Universal;
|
||||
|
||||
// OutlineFx © NullTale - https://x.com/NullTale/
|
||||
namespace OutlineFx
|
||||
{
|
||||
public partial class OutlineFxFeature
|
||||
{
|
||||
private static readonly int s_Alpha = Shader.PropertyToID("_Alpha");
|
||||
private static readonly int s_MainTex = Shader.PropertyToID("_MainTex");
|
||||
private static readonly int s_Step = Shader.PropertyToID("_Step");
|
||||
private static readonly int s_Color = Shader.PropertyToID("_Color");
|
||||
private static readonly int s_Solid = Shader.PropertyToID("_Solid");
|
||||
|
||||
private static readonly int s_AlphaTex = Shader.PropertyToID("_AlphaTex");
|
||||
private static readonly int s_AlphaTO = Shader.PropertyToID("_AlphaTO");
|
||||
|
||||
private class Pass : ScriptableRenderPass
|
||||
{
|
||||
public OutlineFxFeature _owner;
|
||||
|
||||
private FilteringSettings _filtering;
|
||||
private RenderStateBlock _override;
|
||||
private RenderTarget _buffer;
|
||||
private RTHandle _output;
|
||||
|
||||
// =======================================================================
|
||||
public void Init()
|
||||
{
|
||||
renderPassEvent = _owner._event;
|
||||
_buffer = new RenderTarget().Allocate(nameof(_buffer));
|
||||
}
|
||||
|
||||
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
|
||||
{
|
||||
// allocate resources
|
||||
var cmd = CommandBufferPool.Get(nameof(OutlineFxFeature));
|
||||
var desc = renderingData.cameraData.cameraTargetDescriptor;
|
||||
desc.colorFormat = RenderTextureFormat.ARGB32;
|
||||
_buffer.Get(cmd, desc);
|
||||
|
||||
if (_owner._outlineMat == null)
|
||||
return;
|
||||
|
||||
_owner._outlineMat.SetFloat(s_Alpha, _owner._alphaCutout);
|
||||
_owner._outlineMat.SetFloat(s_Solid, _owner._solid);
|
||||
|
||||
if (_owner._solidMask._enabled)
|
||||
{
|
||||
var sm = _owner._solidMask;
|
||||
_owner._outlineMat.SetTexture(s_AlphaTex, sm._pattern);
|
||||
var xPeriod = 1f / (sm._velocity.x / 1000f);
|
||||
var yPeriod = 1f / (sm._velocity.y / 1000f);
|
||||
var xOffset = sm._velocity.x == 0 ? 0 : (Time.unscaledTime % xPeriod) / xPeriod * sm._scale;
|
||||
var yOffset = sm._velocity.y == 0 ? 0 : (Time.unscaledTime % yPeriod) / yPeriod * sm._scale;
|
||||
|
||||
var aspectTex = sm._pattern.width / (float)sm._pattern.height;
|
||||
|
||||
_owner._outlineMat.SetVector(s_AlphaTO, new Vector4(sm._scale * (Screen.width / (float)Screen.height) / aspectTex, sm._scale, xOffset, yOffset));
|
||||
}
|
||||
|
||||
#if !UNITY_2022_1_OR_NEWER
|
||||
if (_owner._output.Enabled == false)
|
||||
_output = RTHandles.Alloc(renderingData.cameraData.renderer.cameraColorTarget);
|
||||
#else
|
||||
_output = renderingData.cameraData.renderer.cameraColorTargetHandle;
|
||||
#endif
|
||||
if (_owner._output.Enabled)
|
||||
_output = _alloc(_owner._output.Value);
|
||||
|
||||
// render with layer mask
|
||||
cmd.SetRenderTarget(_buffer.Handle.nameID);
|
||||
cmd.ClearRenderTarget(false, true, Color.clear, 1f);
|
||||
|
||||
if (_owner._attachDepth)
|
||||
{
|
||||
#if !UNITY_2022_1_OR_NEWER
|
||||
var depth = renderingData.cameraData.renderer.cameraDepthTarget == BuiltinRenderTextureType.CameraTarget
|
||||
? renderingData.cameraData.renderer.cameraColorTarget
|
||||
: renderingData.cameraData.renderer.cameraDepthTarget;
|
||||
#else
|
||||
var depth = renderingData.cameraData.renderer.cameraDepthTargetHandle;
|
||||
#endif
|
||||
cmd.SetRenderTarget(_buffer.Handle, depth);
|
||||
}
|
||||
else
|
||||
{
|
||||
cmd.SetRenderTarget(_buffer.Handle);
|
||||
}
|
||||
|
||||
context.ExecuteCommandBuffer(cmd);
|
||||
cmd.Clear();
|
||||
|
||||
foreach (var inst in _renderers)
|
||||
{
|
||||
if (inst == null)
|
||||
continue;
|
||||
|
||||
cmd.SetGlobalTexture(s_MainTex, inst._renderer.sharedMaterial.mainTexture);
|
||||
cmd.SetGlobalColor(s_Color, inst.Color);
|
||||
cmd.DrawRenderer(inst._renderer, _owner._outlineMat, 0, 0);
|
||||
|
||||
}
|
||||
_renderers.Clear();
|
||||
|
||||
cmd.SetGlobalVector(s_Step, _owner._step);
|
||||
_blit(_buffer.Handle, _output, _owner._outlineMat, 1);
|
||||
|
||||
_execute();
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
void _blit(RTHandle from, RTHandle to, Material mat, int pass = 0)
|
||||
{
|
||||
OutlineFxFeature._blit(cmd, from, to, mat, pass);
|
||||
}
|
||||
|
||||
void _execute()
|
||||
{
|
||||
context.ExecuteCommandBuffer(cmd);
|
||||
CommandBufferPool.Release(cmd);
|
||||
}
|
||||
}
|
||||
|
||||
public override void FrameCleanup(CommandBuffer cmd)
|
||||
{
|
||||
_buffer.Release(cmd);
|
||||
|
||||
#if !UNITY_2022_1_OR_NEWER
|
||||
RTHandles.Release(_output);
|
||||
#else
|
||||
if (_owner._output.Enabled)
|
||||
RTHandles.Release(_output);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7dd2cd9763dd1a1419cec5a4d92317ed
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 290431
|
||||
packageName: Outline 2D/3D
|
||||
packageVersion: 1.0
|
||||
assetPath: Assets/Outline/Runtime/OutlineFx.Pass.cs
|
||||
uploadId: 678360
|
||||
@@ -0,0 +1,23 @@
|
||||
using UnityEngine;
|
||||
|
||||
// OutlineFx © NullTale - https://x.com/NullTale/
|
||||
namespace OutlineFx
|
||||
{
|
||||
[ExecuteAlways]
|
||||
public class OutlineFx : Outline
|
||||
{
|
||||
public Color _color = Color.white;
|
||||
|
||||
public override Color Color
|
||||
{
|
||||
get => _color;
|
||||
set => _color = value;
|
||||
}
|
||||
|
||||
public float Alpha
|
||||
{
|
||||
get => _color.a;
|
||||
set => _color.a = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4218d78ef2d54d0898b7514e121a781f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 290431
|
||||
packageName: Outline 2D/3D
|
||||
packageVersion: 1.0
|
||||
assetPath: Assets/Outline/Runtime/OutlineFx.cs
|
||||
uploadId: 678360
|
||||
@@ -0,0 +1,301 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
using UnityEngine.Rendering.Universal;
|
||||
|
||||
// OutlineFx © NullTale - https://x.com/NullTale/
|
||||
namespace OutlineFx
|
||||
{
|
||||
public partial class OutlineFxFeature : ScriptableRendererFeature
|
||||
{
|
||||
private const string k_OutlineShader = "Hidden/OutlineFx/Main";
|
||||
|
||||
private static readonly int s_MainTexId = Shader.PropertyToID("_MainTex");
|
||||
private static readonly int s_ColorId = Shader.PropertyToID("_Color");
|
||||
|
||||
private static List<ShaderTagId> k_ShaderTags;
|
||||
private static Mesh k_ScreenMesh;
|
||||
|
||||
public static Mesh ScreenMesh => k_ScreenMesh;
|
||||
|
||||
public float Solid
|
||||
{
|
||||
get => _solid;
|
||||
set => _solid = Mathf.Clamp01(value);
|
||||
}
|
||||
|
||||
public float Thickness
|
||||
{
|
||||
get => _thickness;
|
||||
set => _thickness = Mathf.Clamp01(value);
|
||||
}
|
||||
|
||||
public bool Mask
|
||||
{
|
||||
get => _solidMask._enabled;
|
||||
set
|
||||
{
|
||||
if (_solidMask._enabled == value)
|
||||
return;
|
||||
|
||||
_solidMask._enabled = value;
|
||||
|
||||
if (_solidMask._enabled)
|
||||
_outlineMat.EnableKeyword("ALPHA_MASK");
|
||||
else
|
||||
_outlineMat.DisableKeyword("ALPHA_MASK");
|
||||
}
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
[Tooltip("When draw outline")]
|
||||
private RenderPassEvent _event = RenderPassEvent.AfterRenderingPostProcessing;
|
||||
[Range(0, 1)]
|
||||
[SerializeField]
|
||||
[Tooltip("Solid fill of outline")]
|
||||
private float _solid;
|
||||
|
||||
[Range(0, 1f)]
|
||||
[Tooltip("Outline thickness")]
|
||||
public float _thickness = 0.001f;
|
||||
[Range(0, 1)]
|
||||
[SerializeField]
|
||||
[Tooltip("Alpha cutout threshold for transparent objects")]
|
||||
private float _alphaCutout = .5f;
|
||||
|
||||
[Tooltip("Edge filter")]
|
||||
public Mode _mode = Mode.Hard;
|
||||
[HideInInspector]
|
||||
public Filter _filter = Filter.Box;
|
||||
[HideInInspector]
|
||||
public bool _attachDepth = true;
|
||||
|
||||
public Optional<string> _output = new Optional<string>("_globalTex", false);
|
||||
|
||||
public SolidMask _solidMask = new SolidMask();
|
||||
|
||||
[SerializeField] [HideInInspector]
|
||||
public Shader _shader;
|
||||
|
||||
private Material _outlineMat;
|
||||
private Vector4 _step;
|
||||
private Pass _pass;
|
||||
|
||||
private static List<Outline> _renderers = new List<Outline>();
|
||||
|
||||
// =======================================================================
|
||||
public class RenderTarget
|
||||
{
|
||||
public RTHandle Handle;
|
||||
public int Id;
|
||||
|
||||
private bool _allocated;
|
||||
|
||||
// =======================================================================
|
||||
public RenderTarget Allocate(RenderTexture rt, string name)
|
||||
{
|
||||
Handle = RTHandles.Alloc(rt, name);
|
||||
Id = Shader.PropertyToID(name);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public RenderTarget Allocate(string name)
|
||||
{
|
||||
Handle = _alloc(name);
|
||||
Id = Shader.PropertyToID(name);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public void Get(CommandBuffer cmd, in RenderTextureDescriptor desc)
|
||||
{
|
||||
_allocated = true;
|
||||
cmd.GetTemporaryRT(Id, desc);
|
||||
}
|
||||
|
||||
public void Release(CommandBuffer cmd)
|
||||
{
|
||||
if (_allocated == false)
|
||||
return;
|
||||
|
||||
_allocated = false;
|
||||
cmd.ReleaseTemporaryRT(Id);
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class SolidMask
|
||||
{
|
||||
public bool _enabled;
|
||||
public Texture2D _pattern;
|
||||
public float _scale = 50f;
|
||||
public Vector2 _velocity = new Vector2(0, 0);
|
||||
}
|
||||
|
||||
public enum Mode
|
||||
{
|
||||
Hard,
|
||||
Soft
|
||||
}
|
||||
|
||||
public enum Filter
|
||||
{
|
||||
Cross,
|
||||
Box
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
public override void Create()
|
||||
{
|
||||
|
||||
_pass = new Pass() { _owner = this };
|
||||
_pass.Init();
|
||||
_renderers.Clear();
|
||||
|
||||
_validateContent();
|
||||
_validateMaterial();
|
||||
|
||||
if (k_ScreenMesh == null)
|
||||
{
|
||||
// init triangle
|
||||
k_ScreenMesh = new Mesh();
|
||||
_initScreenMesh(k_ScreenMesh, Matrix4x4.identity);
|
||||
}
|
||||
|
||||
if (k_ShaderTags == null)
|
||||
{
|
||||
k_ShaderTags = new List<ShaderTagId>(new[]
|
||||
{
|
||||
new ShaderTagId("SRPDefaultUnlit"),
|
||||
new ShaderTagId("UniversalForward"),
|
||||
new ShaderTagId("UniversalForwardOnly")
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
|
||||
{
|
||||
// in game or scene view only
|
||||
if (renderingData.cameraData.cameraType != CameraType.Game && renderingData.cameraData.cameraType != CameraType.SceneView)
|
||||
return;
|
||||
|
||||
if (_renderers.Count == 0)
|
||||
return;
|
||||
|
||||
var aspect = Screen.width / (float)Screen.height;
|
||||
_step.x = _thickness / aspect;
|
||||
_step.y = _thickness;
|
||||
_step *= 0.007f;
|
||||
if (_mode == Mode.Soft)
|
||||
_step *= 2f;
|
||||
|
||||
renderer.EnqueuePass(_pass);
|
||||
}
|
||||
|
||||
public static void Render(Outline inst)
|
||||
{
|
||||
_renderers.Add(inst);
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
private void _validateMaterial()
|
||||
{
|
||||
_outlineMat = new Material(_shader);
|
||||
switch (_mode)
|
||||
{
|
||||
case Mode.Soft:
|
||||
_outlineMat.EnableKeyword("SOFT");
|
||||
break;
|
||||
case Mode.Hard:
|
||||
_outlineMat.EnableKeyword("HARD");
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
|
||||
switch (_filter)
|
||||
{
|
||||
case Filter.Cross:
|
||||
_outlineMat.EnableKeyword("CROSS");
|
||||
break;
|
||||
case Filter.Box:
|
||||
_outlineMat.EnableKeyword("BOX");
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
|
||||
if (_solidMask._enabled)
|
||||
{
|
||||
_outlineMat.EnableKeyword("ALPHA_MASK");
|
||||
}
|
||||
}
|
||||
|
||||
private void _validateContent()
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
if (_shader == null)
|
||||
_shader = Shader.Find(k_OutlineShader);
|
||||
|
||||
if (_solidMask._pattern == null)
|
||||
{
|
||||
var dir = Path.GetDirectoryName(UnityEditor.AssetDatabase.GetAssetPath(_shader));
|
||||
_solidMask._pattern = UnityEditor.AssetDatabase.LoadAssetAtPath<Texture2D>($"{dir}\\checker.png");
|
||||
}
|
||||
|
||||
UnityEditor.EditorUtility.SetDirty(this);
|
||||
#endif
|
||||
}
|
||||
|
||||
private static void _initScreenMesh(Mesh mesh, Matrix4x4 mat)
|
||||
{
|
||||
mesh.vertices = _verts(0f);
|
||||
mesh.uv = _texCoords();
|
||||
mesh.triangles = new int[3] { 0, 1, 2 };
|
||||
|
||||
mesh.UploadMeshData(true);
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
Vector3[] _verts(float z)
|
||||
{
|
||||
var r = new Vector3[3];
|
||||
for (var i = 0; i < 3; i++)
|
||||
{
|
||||
var uv = new Vector2((i << 1) & 2, i & 2);
|
||||
r[i] = mat.MultiplyPoint(new Vector3(uv.x * 2f - 1f, uv.y * 2f - 1f, z));
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
Vector2[] _texCoords()
|
||||
{
|
||||
var r = new Vector2[3];
|
||||
for (var i = 0; i < 3; i++)
|
||||
{
|
||||
if (SystemInfo.graphicsUVStartsAtTop)
|
||||
r[i] = new Vector2((i << 1) & 2, 1.0f - (i & 2));
|
||||
else
|
||||
r[i] = new Vector2((i << 1) & 2, i & 2);
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
}
|
||||
|
||||
private static void _blit(CommandBuffer cmd, RTHandle from, RTHandle to, Material mat, int pass = 0)
|
||||
{
|
||||
cmd.SetGlobalTexture(s_MainTexId, from.nameID);
|
||||
cmd.SetRenderTarget(to.nameID);
|
||||
cmd.DrawMesh(k_ScreenMesh, Matrix4x4.identity, mat, 0, pass);
|
||||
}
|
||||
|
||||
private static RTHandle _alloc(string id)
|
||||
{
|
||||
return RTHandles.Alloc(id, name: id);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 177ddeadd26a80641ad757c51fb7f5d1
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 290431
|
||||
packageName: Outline 2D/3D
|
||||
packageVersion: 1.0
|
||||
assetPath: Assets/Outline/Runtime/OutlineFxFeature.cs
|
||||
uploadId: 678360
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6be9b4f584271394cb2119f347ca20ce
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 92 B |
@@ -0,0 +1,196 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 41acea03acbaebe4a9dc26dd8264449e
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: 7482667652216324306
|
||||
second: Square
|
||||
externalObjects: {}
|
||||
serializedVersion: 12
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 0
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 2
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 4
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 0
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: 0
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 1
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: iPhone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Server
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
- serializedVersion: 2
|
||||
name: Square
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 256
|
||||
height: 256
|
||||
alignment: 0
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: 2d009a6b596c7d760800000000000000
|
||||
internalID: 7482667652216324306
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
physicsShape:
|
||||
- - {x: -128, y: 128}
|
||||
- {x: -128, y: -128}
|
||||
- {x: 128, y: -128}
|
||||
- {x: 128, y: 128}
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable:
|
||||
Square: 7482667652216324306
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 290431
|
||||
packageName: Outline 2D/3D
|
||||
packageVersion: 1.0
|
||||
assetPath: Assets/Outline/Runtime/Shaders/Checker.png
|
||||
uploadId: 678360
|
||||
@@ -0,0 +1,184 @@
|
||||
Shader "Hidden/OutlineFx/Main"
|
||||
{
|
||||
SubShader
|
||||
{
|
||||
Pass // 0
|
||||
{
|
||||
name "Transparent"
|
||||
|
||||
Cull Off
|
||||
ZWrite Off
|
||||
ZTest LEqual
|
||||
Blend SrcAlpha OneMinusSrcAlpha
|
||||
|
||||
HLSLPROGRAM
|
||||
|
||||
#include "Utils.hlsl"
|
||||
|
||||
#pragma vertex vert_mesh
|
||||
#pragma fragment frag
|
||||
|
||||
sampler2D _MainTex;
|
||||
float4 _Color;
|
||||
float _Alpha;
|
||||
|
||||
// =======================================================================
|
||||
float4 frag(fragIn i) : SV_Target
|
||||
{
|
||||
if (tex2D(_MainTex, i.uv).a < _Alpha)
|
||||
discard;
|
||||
|
||||
return _Color;
|
||||
}
|
||||
ENDHLSL
|
||||
}
|
||||
|
||||
Pass // 1
|
||||
{
|
||||
name "Outline"
|
||||
|
||||
Cull Off
|
||||
ZWrite Off
|
||||
ZTest Off
|
||||
Blend SrcAlpha OneMinusSrcAlpha
|
||||
|
||||
HLSLPROGRAM
|
||||
#include "Utils.hlsl"
|
||||
|
||||
#pragma vertex vert_screen
|
||||
#pragma fragment frag
|
||||
|
||||
#pragma multi_compile_local BOX CROSS
|
||||
#pragma multi_compile_local SOFT HARD
|
||||
#pragma multi_compile_local _ ALPHA_MASK
|
||||
|
||||
#define BLUR_LENGTH 9
|
||||
#define BLUR_LENGTH_HALF ((BLUR_LENGTH - 1) / 2)
|
||||
static const float k_BlurWeights[BLUR_LENGTH] =
|
||||
{
|
||||
0.046995 * 2,
|
||||
0.064759 * 2,
|
||||
0.120985 * 2,
|
||||
0.176033 * 2,
|
||||
0.199471 * 2,
|
||||
0.176033 * 2,
|
||||
0.120985 * 2,
|
||||
0.064759 * 2,
|
||||
0.046995 * 2,
|
||||
};
|
||||
|
||||
sampler2D _MainTex;
|
||||
sampler2D _AlphaTex;
|
||||
float4 _AlphaTO;
|
||||
float2 _Step;
|
||||
float _Solid;
|
||||
|
||||
// =======================================================================
|
||||
float4 _sample_soft(float2 uv, in const float2 step)
|
||||
{
|
||||
float4 result = 0;
|
||||
uv -= BLUR_LENGTH_HALF * step;
|
||||
|
||||
[unroll]
|
||||
for (int n = 0; n < BLUR_LENGTH; n ++)
|
||||
{
|
||||
result += tex2D(_MainTex, uv) * k_BlurWeights[n];
|
||||
uv += step;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
float4 _sample_hard(float2 uv, in const float2 step)
|
||||
{
|
||||
float4 result = 0;
|
||||
|
||||
uv -= BLUR_LENGTH_HALF * step;
|
||||
|
||||
[unroll]
|
||||
for (int n = 0; n < BLUR_LENGTH; n ++)
|
||||
{
|
||||
float4 sample = tex2D(_MainTex, uv);
|
||||
result = max(sample, result);
|
||||
uv += step;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
float4 _sample(const float2 uv, in const float2 step)
|
||||
{
|
||||
#ifdef SOFT
|
||||
return _sample_soft(uv, step);
|
||||
#endif
|
||||
#ifdef HARD
|
||||
return _sample_hard(uv, step);
|
||||
#endif
|
||||
}
|
||||
|
||||
float4 frag(fragIn i) : SV_Target
|
||||
{
|
||||
float4 color = tex2D(_MainTex, i.uv);
|
||||
if (color.a > .0)
|
||||
{
|
||||
#ifdef ALPHA_MASK
|
||||
return float4(color.xyz, color.a * _Solid * tex2D(_AlphaTex, mad(i.uv, _AlphaTO.xy, _AlphaTO.zw)).a);
|
||||
#endif
|
||||
return float4(color.xyz, color.a * _Solid);
|
||||
}
|
||||
|
||||
float4 result = 0;
|
||||
|
||||
#ifdef BOX
|
||||
const float2 stepX = float2(_Step.x, 0);
|
||||
const float2 stepY = float2(0, _Step.y);
|
||||
float2 uv = i.uv - BLUR_LENGTH_HALF * stepX;
|
||||
|
||||
[unroll]
|
||||
for (int n = 0; n < BLUR_LENGTH; n ++)
|
||||
{
|
||||
#ifdef SOFT
|
||||
result += _sample(uv, stepY) * k_BlurWeights[n];
|
||||
#endif
|
||||
#ifdef HARD
|
||||
result = max(result, _sample(uv, stepY));
|
||||
#endif
|
||||
|
||||
uv += stepX;
|
||||
}
|
||||
#endif
|
||||
#ifdef CROSS
|
||||
result = (_sample(i.uv, _Step) + _sample(i.uv, float2(_Step.x, -_Step.y))) * .5f;
|
||||
#endif
|
||||
|
||||
return result;
|
||||
}
|
||||
ENDHLSL
|
||||
}
|
||||
|
||||
Pass // 2
|
||||
{
|
||||
name "Overlay"
|
||||
|
||||
Cull Off
|
||||
ZWrite Off
|
||||
ZTest Off
|
||||
Blend SrcAlpha OneMinusSrcAlpha
|
||||
|
||||
HLSLPROGRAM
|
||||
#include "Utils.hlsl"
|
||||
|
||||
#pragma vertex vert_screen
|
||||
#pragma fragment frag
|
||||
|
||||
sampler2D _MainTex;
|
||||
|
||||
// =======================================================================
|
||||
float4 frag(fragIn i) : SV_Target
|
||||
{
|
||||
return tex2D(_MainTex, i.uv);
|
||||
}
|
||||
ENDHLSL
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9a902e6d68fe8344890c5926c684e820
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 290431
|
||||
packageName: Outline 2D/3D
|
||||
packageVersion: 1.0
|
||||
assetPath: Assets/Outline/Runtime/Shaders/Main.shader
|
||||
uploadId: 678360
|
||||
@@ -0,0 +1,41 @@
|
||||
#ifndef OUTLINE_UTILS_INCLUDED
|
||||
#define OUTLINE_UTILS_INCLUDED
|
||||
|
||||
#include "UnityCG.cginc"
|
||||
|
||||
struct vertIn
|
||||
{
|
||||
float4 vertex : POSITION;
|
||||
float2 uv : TEXCOORD0;
|
||||
};
|
||||
|
||||
struct fragIn
|
||||
{
|
||||
float4 vertex : SV_POSITION;
|
||||
float2 uv : TEXCOORD0;
|
||||
};
|
||||
|
||||
fragIn vert_mesh(vertIn v)
|
||||
{
|
||||
fragIn o;
|
||||
o.vertex = UnityObjectToClipPos(v.vertex);
|
||||
o.uv = v.uv;
|
||||
|
||||
return o;
|
||||
}
|
||||
|
||||
fragIn vert_screen(vertIn v)
|
||||
{
|
||||
fragIn o;
|
||||
o.vertex = v.vertex;
|
||||
o.uv = v.uv;
|
||||
|
||||
return o;
|
||||
}
|
||||
|
||||
float random(in const float2 uv)
|
||||
{
|
||||
return frac(sin(dot(uv, float2(12.9898, 78.233))) * 43758.5453123);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,14 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0cda35a27fcc461bb5a4ed317f358de3
|
||||
ShaderIncludeImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 290431
|
||||
packageName: Outline 2D/3D
|
||||
packageVersion: 1.0
|
||||
assetPath: Assets/Outline/Runtime/Shaders/Utils.hlsl
|
||||
uploadId: 678360
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cb16a562405dc5d40bd31626f24027dd
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b40f9589bc6576b4d945d28d6adefa58
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,93 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!74 &7400000
|
||||
AnimationClip:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Cat
|
||||
serializedVersion: 7
|
||||
m_Legacy: 0
|
||||
m_Compressed: 0
|
||||
m_UseHighQualityCurve: 1
|
||||
m_RotationCurves: []
|
||||
m_CompressedRotationCurves: []
|
||||
m_EulerCurves: []
|
||||
m_PositionCurves: []
|
||||
m_ScaleCurves: []
|
||||
m_FloatCurves: []
|
||||
m_PPtrCurves:
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
- time: 0
|
||||
value: {fileID: -475568472, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- time: 0.083333336
|
||||
value: {fileID: 1413511790, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- time: 0.16666667
|
||||
value: {fileID: -2072969470, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- time: 0.25
|
||||
value: {fileID: -528985555, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- time: 0.33333334
|
||||
value: {fileID: -1901834471, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- time: 0.41666666
|
||||
value: {fileID: -216749617, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- time: 0.5
|
||||
value: {fileID: -126871508, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- time: 0.5833333
|
||||
value: {fileID: 1673119960, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
attribute: m_Sprite
|
||||
path:
|
||||
classID: 212
|
||||
script: {fileID: 0}
|
||||
flags: 2
|
||||
m_SampleRate: 12
|
||||
m_WrapMode: 0
|
||||
m_Bounds:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_ClipBindingConstant:
|
||||
genericBindings:
|
||||
- serializedVersion: 2
|
||||
path: 0
|
||||
attribute: 0
|
||||
script: {fileID: 0}
|
||||
typeID: 212
|
||||
customType: 23
|
||||
isPPtrCurve: 1
|
||||
isIntCurve: 0
|
||||
isSerializeReferenceCurve: 0
|
||||
pptrCurveMapping:
|
||||
- {fileID: -475568472, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- {fileID: 1413511790, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- {fileID: -2072969470, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- {fileID: -528985555, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- {fileID: -1901834471, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- {fileID: -216749617, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- {fileID: -126871508, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- {fileID: 1673119960, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
m_AnimationClipSettings:
|
||||
serializedVersion: 2
|
||||
m_AdditiveReferencePoseClip: {fileID: 0}
|
||||
m_AdditiveReferencePoseTime: 0
|
||||
m_StartTime: 0
|
||||
m_StopTime: 0.6666666
|
||||
m_OrientationOffsetY: 0
|
||||
m_Level: 0
|
||||
m_CycleOffset: 0
|
||||
m_HasAdditiveReferencePose: 0
|
||||
m_LoopTime: 1
|
||||
m_LoopBlend: 0
|
||||
m_LoopBlendOrientation: 0
|
||||
m_LoopBlendPositionY: 0
|
||||
m_LoopBlendPositionXZ: 0
|
||||
m_KeepOriginalOrientation: 0
|
||||
m_KeepOriginalPositionY: 1
|
||||
m_KeepOriginalPositionXZ: 0
|
||||
m_HeightFromFeet: 0
|
||||
m_Mirror: 0
|
||||
m_EditorCurves: []
|
||||
m_EulerEditorCurves: []
|
||||
m_HasGenericRootTransform: 0
|
||||
m_HasMotionFloatCurves: 0
|
||||
m_Events: []
|
||||
@@ -0,0 +1,15 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0afe78020b253344b9ba42360154b480
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 290431
|
||||
packageName: Outline 2D/3D
|
||||
packageVersion: 1.0
|
||||
assetPath: Assets/Outline/Samples/Media/Cat.anim
|
||||
uploadId: 678360
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 5.1 KiB |
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,72 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1102 &-6278617404640227802
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Cat
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions: []
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: 0afe78020b253344b9ba42360154b480, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!91 &9100000
|
||||
AnimatorController:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Cat_Runner
|
||||
serializedVersion: 5
|
||||
m_AnimatorParameters: []
|
||||
m_AnimatorLayers:
|
||||
- serializedVersion: 5
|
||||
m_Name: Base Layer
|
||||
m_StateMachine: {fileID: 8353364410599467548}
|
||||
m_Mask: {fileID: 0}
|
||||
m_Motions: []
|
||||
m_Behaviours: []
|
||||
m_BlendingMode: 0
|
||||
m_SyncedLayerIndex: -1
|
||||
m_DefaultWeight: 0
|
||||
m_IKPass: 0
|
||||
m_SyncedLayerAffectsTiming: 0
|
||||
m_Controller: {fileID: 9100000}
|
||||
--- !u!1107 &8353364410599467548
|
||||
AnimatorStateMachine:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Base Layer
|
||||
m_ChildStates:
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: -6278617404640227802}
|
||||
m_Position: {x: 260, y: 110, z: 0}
|
||||
m_ChildStateMachines: []
|
||||
m_AnyStateTransitions: []
|
||||
m_EntryTransitions: []
|
||||
m_StateMachineTransitions: {}
|
||||
m_StateMachineBehaviours: []
|
||||
m_AnyStatePosition: {x: 50, y: 20, z: 0}
|
||||
m_EntryPosition: {x: 50, y: 120, z: 0}
|
||||
m_ExitPosition: {x: 800, y: 120, z: 0}
|
||||
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
|
||||
m_DefaultState: {fileID: -6278617404640227802}
|
||||
@@ -0,0 +1,15 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 03151cdf8dad67d4d85f579d9680b76b
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 9100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 290431
|
||||
packageName: Outline 2D/3D
|
||||
packageVersion: 1.0
|
||||
assetPath: Assets/Outline/Samples/Media/Cat_Runner.controller
|
||||
uploadId: 678360
|
||||
@@ -0,0 +1,72 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!91 &9100000
|
||||
AnimatorController:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Cat_Watcher
|
||||
serializedVersion: 5
|
||||
m_AnimatorParameters: []
|
||||
m_AnimatorLayers:
|
||||
- serializedVersion: 5
|
||||
m_Name: Base Layer
|
||||
m_StateMachine: {fileID: 3976029286537063673}
|
||||
m_Mask: {fileID: 0}
|
||||
m_Motions: []
|
||||
m_Behaviours: []
|
||||
m_BlendingMode: 0
|
||||
m_SyncedLayerIndex: -1
|
||||
m_DefaultWeight: 0
|
||||
m_IKPass: 0
|
||||
m_SyncedLayerAffectsTiming: 0
|
||||
m_Controller: {fileID: 9100000}
|
||||
--- !u!1102 &3133060529661563886
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: licking
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions: []
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: d6fc75b7cb4c648449261dfdabb36852, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1107 &3976029286537063673
|
||||
AnimatorStateMachine:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Base Layer
|
||||
m_ChildStates:
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: 3133060529661563886}
|
||||
m_Position: {x: 230, y: 60, z: 0}
|
||||
m_ChildStateMachines: []
|
||||
m_AnyStateTransitions: []
|
||||
m_EntryTransitions: []
|
||||
m_StateMachineTransitions: {}
|
||||
m_StateMachineBehaviours: []
|
||||
m_AnyStatePosition: {x: 50, y: 20, z: 0}
|
||||
m_EntryPosition: {x: 50, y: 120, z: 0}
|
||||
m_ExitPosition: {x: 800, y: 120, z: 0}
|
||||
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
|
||||
m_DefaultState: {fileID: 3133060529661563886}
|
||||
@@ -0,0 +1,15 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2b68ddf758995ea4c96ac35ed9ca5d98
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 9100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 290431
|
||||
packageName: Outline 2D/3D
|
||||
packageVersion: 1.0
|
||||
assetPath: Assets/Outline/Samples/Media/Cat_Watcher.controller
|
||||
uploadId: 678360
|
||||
@@ -0,0 +1,117 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!74 &7400000
|
||||
AnimationClip:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: licking
|
||||
serializedVersion: 7
|
||||
m_Legacy: 0
|
||||
m_Compressed: 0
|
||||
m_UseHighQualityCurve: 1
|
||||
m_RotationCurves: []
|
||||
m_CompressedRotationCurves: []
|
||||
m_EulerCurves: []
|
||||
m_PositionCurves: []
|
||||
m_ScaleCurves: []
|
||||
m_FloatCurves: []
|
||||
m_PPtrCurves:
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
- time: 0
|
||||
value: {fileID: -1856009930, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- time: 0.083333336
|
||||
value: {fileID: 1569468314, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- time: 0.16666667
|
||||
value: {fileID: 1186422308, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- time: 0.25
|
||||
value: {fileID: 1983154614, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- time: 0.33333334
|
||||
value: {fileID: 1016943977, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- time: 0.41666666
|
||||
value: {fileID: 1724790039, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- time: 0.5
|
||||
value: {fileID: 54098592, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- time: 0.5833333
|
||||
value: {fileID: -1409216319, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- time: 0.6666667
|
||||
value: {fileID: -317030973, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- time: 0.75
|
||||
value: {fileID: -1280361783, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- time: 0.8333333
|
||||
value: {fileID: 2015265219, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- time: 0.9166667
|
||||
value: {fileID: 865666256, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- time: 1
|
||||
value: {fileID: -1289090441, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- time: 1.0833334
|
||||
value: {fileID: -383363482, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- time: 1.1666666
|
||||
value: {fileID: -1640822110, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- time: 1.25
|
||||
value: {fileID: -79935080, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
attribute: m_Sprite
|
||||
path:
|
||||
classID: 212
|
||||
script: {fileID: 0}
|
||||
flags: 2
|
||||
m_SampleRate: 12
|
||||
m_WrapMode: 0
|
||||
m_Bounds:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_ClipBindingConstant:
|
||||
genericBindings:
|
||||
- serializedVersion: 2
|
||||
path: 0
|
||||
attribute: 0
|
||||
script: {fileID: 0}
|
||||
typeID: 212
|
||||
customType: 23
|
||||
isPPtrCurve: 1
|
||||
isIntCurve: 0
|
||||
isSerializeReferenceCurve: 0
|
||||
pptrCurveMapping:
|
||||
- {fileID: -1856009930, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- {fileID: 1569468314, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- {fileID: 1186422308, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- {fileID: 1983154614, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- {fileID: 1016943977, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- {fileID: 1724790039, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- {fileID: 54098592, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- {fileID: -1409216319, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- {fileID: -317030973, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- {fileID: -1280361783, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- {fileID: 2015265219, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- {fileID: 865666256, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- {fileID: -1289090441, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- {fileID: -383363482, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- {fileID: -1640822110, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
- {fileID: -79935080, guid: 900a9e6e6260cc84e8e280b5eb4ef35b, type: 3}
|
||||
m_AnimationClipSettings:
|
||||
serializedVersion: 2
|
||||
m_AdditiveReferencePoseClip: {fileID: 0}
|
||||
m_AdditiveReferencePoseTime: 0
|
||||
m_StartTime: 0
|
||||
m_StopTime: 1.3333334
|
||||
m_OrientationOffsetY: 0
|
||||
m_Level: 0
|
||||
m_CycleOffset: 0
|
||||
m_HasAdditiveReferencePose: 0
|
||||
m_LoopTime: 1
|
||||
m_LoopBlend: 0
|
||||
m_LoopBlendOrientation: 0
|
||||
m_LoopBlendPositionY: 0
|
||||
m_LoopBlendPositionXZ: 0
|
||||
m_KeepOriginalOrientation: 0
|
||||
m_KeepOriginalPositionY: 1
|
||||
m_KeepOriginalPositionXZ: 0
|
||||
m_HeightFromFeet: 0
|
||||
m_Mirror: 0
|
||||
m_EditorCurves: []
|
||||
m_EulerEditorCurves: []
|
||||
m_HasGenericRootTransform: 0
|
||||
m_HasMotionFloatCurves: 0
|
||||
m_Events: []
|
||||
@@ -0,0 +1,15 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d6fc75b7cb4c648449261dfdabb36852
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 290431
|
||||
packageName: Outline 2D/3D
|
||||
packageVersion: 1.0
|
||||
assetPath: Assets/Outline/Samples/Media/licking.anim
|
||||
uploadId: 678360
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,14 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e9cb10643123927438b62cce54bd0ee2
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 290431
|
||||
packageName: Outline 2D/3D
|
||||
packageVersion: 1.0
|
||||
assetPath: Assets/Outline/Samples/OutlineFx.unity
|
||||
uploadId: 678360
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: eee323dd5b9817840b7b2d5282546521
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,136 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: bf2edee5c58d82540a51f03df9d42094, type: 3}
|
||||
m_Name: UrpOutline
|
||||
m_EditorClassIdentifier:
|
||||
k_AssetVersion: 12
|
||||
k_AssetPreviousVersion: 12
|
||||
m_RendererType: 1
|
||||
m_RendererData: {fileID: 0}
|
||||
m_RendererDataList:
|
||||
- {fileID: 11400000, guid: 802a5f71fb0aca846b4f3768a143d477, type: 2}
|
||||
m_DefaultRendererIndex: 0
|
||||
m_RequireDepthTexture: 0
|
||||
m_RequireOpaqueTexture: 0
|
||||
m_OpaqueDownsampling: 1
|
||||
m_SupportsTerrainHoles: 1
|
||||
m_SupportsHDR: 1
|
||||
m_HDRColorBufferPrecision: 0
|
||||
m_MSAA: 1
|
||||
m_RenderScale: 1
|
||||
m_UpscalingFilter: 0
|
||||
m_FsrOverrideSharpness: 0
|
||||
m_FsrSharpness: 0.92
|
||||
m_EnableLODCrossFade: 1
|
||||
m_LODCrossFadeDitheringType: 1
|
||||
m_ShEvalMode: 0
|
||||
m_LightProbeSystem: 0
|
||||
m_ProbeVolumeMemoryBudget: 1024
|
||||
m_ProbeVolumeBlendingMemoryBudget: 256
|
||||
m_SupportProbeVolumeGPUStreaming: 0
|
||||
m_SupportProbeVolumeDiskStreaming: 0
|
||||
m_SupportProbeVolumeScenarios: 0
|
||||
m_SupportProbeVolumeScenarioBlending: 0
|
||||
m_ProbeVolumeSHBands: 1
|
||||
m_MainLightRenderingMode: 1
|
||||
m_MainLightShadowsSupported: 1
|
||||
m_MainLightShadowmapResolution: 2048
|
||||
m_AdditionalLightsRenderingMode: 1
|
||||
m_AdditionalLightsPerObjectLimit: 4
|
||||
m_AdditionalLightShadowsSupported: 0
|
||||
m_AdditionalLightsShadowmapResolution: 2048
|
||||
m_AdditionalLightsShadowResolutionTierLow: 256
|
||||
m_AdditionalLightsShadowResolutionTierMedium: 512
|
||||
m_AdditionalLightsShadowResolutionTierHigh: 1024
|
||||
m_ReflectionProbeBlending: 0
|
||||
m_ReflectionProbeBoxProjection: 0
|
||||
m_ShadowDistance: 50
|
||||
m_ShadowCascadeCount: 1
|
||||
m_Cascade2Split: 0.25
|
||||
m_Cascade3Split: {x: 0.1, y: 0.3}
|
||||
m_Cascade4Split: {x: 0.067, y: 0.2, z: 0.467}
|
||||
m_CascadeBorder: 0.2
|
||||
m_ShadowDepthBias: 1
|
||||
m_ShadowNormalBias: 1
|
||||
m_AnyShadowsSupported: 1
|
||||
m_SoftShadowsSupported: 0
|
||||
m_ConservativeEnclosingSphere: 1
|
||||
m_NumIterationsEnclosingSphere: 64
|
||||
m_SoftShadowQuality: 2
|
||||
m_AdditionalLightsCookieResolution: 2048
|
||||
m_AdditionalLightsCookieFormat: 3
|
||||
m_UseSRPBatcher: 1
|
||||
m_SupportsDynamicBatching: 0
|
||||
m_MixedLightingSupported: 1
|
||||
m_SupportsLightCookies: 1
|
||||
m_SupportsLightLayers: 0
|
||||
m_DebugLevel: 0
|
||||
m_StoreActionsOptimization: 0
|
||||
m_UseAdaptivePerformance: 1
|
||||
m_ColorGradingMode: 0
|
||||
m_ColorGradingLutSize: 32
|
||||
m_AllowPostProcessAlphaOutput: 0
|
||||
m_UseFastSRGBLinearConversion: 0
|
||||
m_SupportDataDrivenLensFlare: 1
|
||||
m_SupportScreenSpaceLensFlare: 1
|
||||
m_GPUResidentDrawerMode: 0
|
||||
m_SmallMeshScreenPercentage: 0
|
||||
m_GPUResidentDrawerEnableOcclusionCullingInCameras: 0
|
||||
m_ShadowType: 1
|
||||
m_LocalShadowsSupported: 0
|
||||
m_LocalShadowsAtlasResolution: 256
|
||||
m_MaxPixelLights: 0
|
||||
m_ShadowAtlasResolution: 256
|
||||
m_VolumeFrameworkUpdateMode: 0
|
||||
m_VolumeProfile: {fileID: 0}
|
||||
apvScenesData:
|
||||
obsoleteSceneBounds:
|
||||
m_Keys: []
|
||||
m_Values: []
|
||||
obsoleteHasProbeVolumes:
|
||||
m_Keys: []
|
||||
m_Values:
|
||||
m_PrefilteringModeMainLightShadows: 1
|
||||
m_PrefilteringModeAdditionalLight: 4
|
||||
m_PrefilteringModeAdditionalLightShadows: 1
|
||||
m_PrefilterXRKeywords: 0
|
||||
m_PrefilteringModeForwardPlus: 1
|
||||
m_PrefilteringModeDeferredRendering: 1
|
||||
m_PrefilteringModeScreenSpaceOcclusion: 1
|
||||
m_PrefilterDebugKeywords: 0
|
||||
m_PrefilterWriteRenderingLayers: 0
|
||||
m_PrefilterHDROutput: 0
|
||||
m_PrefilterAlphaOutput: 0
|
||||
m_PrefilterSSAODepthNormals: 0
|
||||
m_PrefilterSSAOSourceDepthLow: 0
|
||||
m_PrefilterSSAOSourceDepthMedium: 0
|
||||
m_PrefilterSSAOSourceDepthHigh: 0
|
||||
m_PrefilterSSAOInterleaved: 0
|
||||
m_PrefilterSSAOBlueNoise: 0
|
||||
m_PrefilterSSAOSampleCountLow: 0
|
||||
m_PrefilterSSAOSampleCountMedium: 0
|
||||
m_PrefilterSSAOSampleCountHigh: 0
|
||||
m_PrefilterDBufferMRT1: 0
|
||||
m_PrefilterDBufferMRT2: 0
|
||||
m_PrefilterDBufferMRT3: 0
|
||||
m_PrefilterSoftShadowsQualityLow: 0
|
||||
m_PrefilterSoftShadowsQualityMedium: 0
|
||||
m_PrefilterSoftShadowsQualityHigh: 0
|
||||
m_PrefilterSoftShadows: 0
|
||||
m_PrefilterScreenCoord: 0
|
||||
m_PrefilterNativeRenderPass: 0
|
||||
m_PrefilterUseLegacyLightmaps: 0
|
||||
m_ShaderVariantLogLevel: 0
|
||||
m_ShadowCascades: 0
|
||||
m_Textures:
|
||||
blueNoise64LTex: {fileID: 2800000, guid: e3d24661c1e055f45a7560c033dbb837, type: 3}
|
||||
bayerMatrixTex: {fileID: 2800000, guid: f9ee4ed84c1d10c49aabb9b210b0fc44, type: 3}
|
||||
@@ -0,0 +1,15 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cf2dc93a238bcc745a7352dccd8bb1d0
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 290431
|
||||
packageName: Outline 2D/3D
|
||||
packageVersion: 1.0
|
||||
assetPath: Assets/Outline/Samples/Urp/UrpOutline.asset
|
||||
uploadId: 678360
|
||||
@@ -0,0 +1,83 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &-5037661925718295535
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 177ddeadd26a80641ad757c51fb7f5d1, type: 3}
|
||||
m_Name: OutlineFx
|
||||
m_EditorClassIdentifier:
|
||||
m_Active: 1
|
||||
_event: 600
|
||||
_solid: 0
|
||||
_thickness: 0.23439527
|
||||
_alphaCutout: 0.5
|
||||
_mode: 0
|
||||
_filter: 1
|
||||
_attachDepth: 1
|
||||
_output:
|
||||
enabled: 0
|
||||
value: _globalTex
|
||||
_solidMask:
|
||||
_enabled: 1
|
||||
_pattern: {fileID: 2800000, guid: 41acea03acbaebe4a9dc26dd8264449e, type: 3}
|
||||
_scale: 50
|
||||
_velocity: {x: 0, y: -50}
|
||||
_shader: {fileID: 4800000, guid: 9a902e6d68fe8344890c5926c684e820, type: 3}
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: de640fe3d0db1804a85f9fc8f5cadab6, type: 3}
|
||||
m_Name: UrpOutline_Renderer
|
||||
m_EditorClassIdentifier:
|
||||
debugShaders:
|
||||
debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, type: 3}
|
||||
hdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3}
|
||||
probeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959, type: 3}
|
||||
probeVolumeResources:
|
||||
probeVolumeDebugShader: {fileID: 0}
|
||||
probeVolumeFragmentationDebugShader: {fileID: 0}
|
||||
probeVolumeOffsetDebugShader: {fileID: 0}
|
||||
probeVolumeSamplingDebugShader: {fileID: 0}
|
||||
probeSamplingDebugMesh: {fileID: 0}
|
||||
probeSamplingDebugTexture: {fileID: 0}
|
||||
probeVolumeBlendStatesCS: {fileID: 0}
|
||||
m_RendererFeatures:
|
||||
- {fileID: -5037661925718295535}
|
||||
m_RendererFeatureMap: 11fc0c532ba116ba
|
||||
m_UseNativeRenderPass: 0
|
||||
xrSystemData: {fileID: 0}
|
||||
postProcessData: {fileID: 0}
|
||||
m_AssetVersion: 2
|
||||
m_OpaqueLayerMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_TransparentLayerMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_DefaultStencilState:
|
||||
overrideStencilState: 0
|
||||
stencilReference: 0
|
||||
stencilCompareFunction: 8
|
||||
passOperation: 2
|
||||
failOperation: 0
|
||||
zFailOperation: 0
|
||||
m_ShadowTransparentReceive: 1
|
||||
m_RenderingMode: 0
|
||||
m_DepthPrimingMode: 0
|
||||
m_CopyDepthMode: 1
|
||||
m_DepthAttachmentFormat: 0
|
||||
m_DepthTextureFormat: 0
|
||||
m_AccurateGbufferNormals: 0
|
||||
m_IntermediateTextureMode: 1
|
||||
@@ -0,0 +1,15 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 802a5f71fb0aca846b4f3768a143d477
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 290431
|
||||
packageName: Outline 2D/3D
|
||||
packageVersion: 1.0
|
||||
assetPath: Assets/Outline/Samples/Urp/UrpOutline_Renderer.asset
|
||||
uploadId: 678360
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"name": "www.nulltale.outlinefx",
|
||||
"displayName": "OutlineFx",
|
||||
"version": "1.1.0",
|
||||
"unity": "2021.3",
|
||||
"description": "Simplified Outline for Unity Urp",
|
||||
"documentationUrl": "https://github.com/NullTale/OutlineFx",
|
||||
"licensesUrl": "https://github.com/NullTale/OutlineFx/blob/master/LICENSE.md",
|
||||
"author": {
|
||||
"name": "NullTale",
|
||||
"email": "nulltale@gmail.com",
|
||||
"url": "https://github.com/NullTale"
|
||||
},
|
||||
"dependencies": {
|
||||
"com.unity.render-pipelines.universal": "12.1.11"
|
||||
},
|
||||
"hideInEditor": false,
|
||||
"samples": [
|
||||
{
|
||||
"displayName": "Samples",
|
||||
"description": "Contains sample scene",
|
||||
"path": "Samples~/"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9f654c428279ba14dab567269d85e523
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 290431
|
||||
packageName: Outline 2D/3D
|
||||
packageVersion: 1.0
|
||||
assetPath: Assets/Outline/package.json
|
||||
uploadId: 678360
|
||||
Reference in New Issue
Block a user