Skip to content

Commit cd0525f

Browse files
committed
新增【ColorReplace 色彩替换】型后处理特效 | add ColorReplace Effects
新增【ColorReplace 色彩替换】型后处理特效 | add ColorReplace Effects
1 parent 5fddd8d commit cd0525f

20 files changed

+535
-0
lines changed

Assets/X-PostProcessing/Effects/ColorReplace.meta

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+

2+
//----------------------------------------------------------------------------------------------------------
3+
// X-PostProcessing Library
4+
// https://github.com/QianMo/X-PostProcessing-Library
5+
// Copyright (C) 2020 QianMo. All rights reserved.
6+
// Licensed under the MIT License
7+
// You may not use this file except in compliance with the License.You may obtain a copy of the License at
8+
// http://opensource.org/licenses/MIT
9+
//----------------------------------------------------------------------------------------------------------
10+
11+
using System;
12+
using UnityEngine;
13+
using UnityEngine.Rendering;
14+
using UnityEngine.Rendering.PostProcessing;
15+
16+
17+
namespace XPostProcessing
18+
{
19+
20+
[Serializable]
21+
[PostProcess(typeof(ColorReplaceRenderer), PostProcessEvent.AfterStack, "X-PostProcessing/ColorAdjustment/ColorReplace")]
22+
public class ColorReplace : PostProcessEffectSettings
23+
{
24+
25+
[ColorUsageAttribute(true, true, 0f, 20f, 0.125f, 3f)]
26+
public ColorParameter FromColor = new ColorParameter { value = new Color(0.8f, 0.0f, 0.0f, 1) };
27+
28+
[ColorUsageAttribute(true, true, 0f, 20f, 0.125f, 3f)]
29+
public ColorParameter ToColor = new ColorParameter { value = new Color(0.0f, 0.8f, 0.0f, 1) };
30+
31+
[Range(0.0f, 1.0f)]
32+
public FloatParameter Range = new FloatParameter { value = 0.2f };
33+
34+
[Range(0.0f, 1.0f)]
35+
public FloatParameter Fuzziness = new FloatParameter { value = 0.5f };
36+
37+
}
38+
39+
public sealed class ColorReplaceRenderer : PostProcessEffectRenderer<ColorReplace>
40+
{
41+
private Shader shader;
42+
private const string PROFILER_TAG = "X-ColorReplace";
43+
44+
public override void Init()
45+
{
46+
shader = Shader.Find("Hidden/X-PostProcessing/ColorReplace");
47+
}
48+
49+
public override void Release()
50+
{
51+
base.Release();
52+
}
53+
54+
public override void Render(PostProcessRenderContext context)
55+
{
56+
CommandBuffer cmd = context.command;
57+
PropertySheet sheet = context.propertySheets.Get(shader);
58+
cmd.BeginSample(PROFILER_TAG);
59+
60+
sheet.properties.SetColor("_FromColor", settings.FromColor);
61+
sheet.properties.SetColor("_ToColor", settings.ToColor);
62+
sheet.properties.SetFloat("_Range", settings.Range);
63+
sheet.properties.SetFloat("_Fuzziness", settings.Fuzziness);
64+
65+
context.command.BlitFullscreenTriangle(context.source, context.destination, sheet, 0);
66+
cmd.EndSample(PROFILER_TAG);
67+
}
68+
}
69+
}
70+

Assets/X-PostProcessing/Effects/ColorReplace/ColorReplace.cs.meta

+11
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/X-PostProcessing/Effects/ColorReplace/Editor.meta

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+

2+
//----------------------------------------------------------------------------------------------------------
3+
// X-PostProcessing Library
4+
// https://github.com/QianMo/X-PostProcessing-Library
5+
// Copyright (C) 2020 QianMo. All rights reserved.
6+
// Licensed under the MIT License
7+
// You may not use this file except in compliance with the License.You may obtain a copy of the License at
8+
// http://opensource.org/licenses/MIT
9+
//----------------------------------------------------------------------------------------------------------
10+
11+
using System.Collections;
12+
using System.Collections.Generic;
13+
using UnityEngine;
14+
using UnityEditor;
15+
16+
using UnityEditor.Rendering.PostProcessing;
17+
using UnityEngine.Rendering.PostProcessing;
18+
19+
namespace XPostProcessing
20+
{
21+
[PostProcessEditor(typeof(ColorReplace))]
22+
public sealed class ColorReplaceEditor : PostProcessEffectEditor<ColorReplace>
23+
{
24+
25+
SerializedParameterOverride FromColor;
26+
SerializedParameterOverride ToColor;
27+
SerializedParameterOverride Range;
28+
SerializedParameterOverride Fuzziness;
29+
30+
31+
public override void OnEnable()
32+
{
33+
FromColor = FindParameterOverride(x => x.FromColor);
34+
ToColor = FindParameterOverride(x => x.ToColor);
35+
Range = FindParameterOverride(x => x.Range);
36+
Fuzziness = FindParameterOverride(x => x.Fuzziness);
37+
}
38+
39+
public override string GetDisplayTitle()
40+
{
41+
return XPostProcessingEditorUtility.DISPLAY_TITLE_PREFIX + base.GetDisplayTitle();
42+
}
43+
44+
public override void OnInspectorGUI()
45+
{
46+
EditorUtilities.DrawHeaderLabel("From-To Color");
47+
PropertyField(FromColor);
48+
PropertyField(ToColor);
49+
50+
EditorUtilities.DrawHeaderLabel("Color Precision");
51+
PropertyField(Range);
52+
PropertyField(Fuzziness);
53+
}
54+
55+
}
56+
}
57+

Assets/X-PostProcessing/Effects/ColorReplace/Editor/ColorReplaceEditor.cs.meta

+11
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
2+
# ColorReplace
3+
4+
## Source Code List
5+
- [Shader Code](Shader/ColorReplace.shader)
6+
- [C# Code](ColorReplace.cs)
7+
- [Editor Code](Editor/ColorReplaceEditor.cs)
8+
9+
10+
## Property
11+
![](https://raw.githubusercontent.com/QianMo/X-PostProcessing-Gallery/master/Media/ColorAdjustment/ColorReplace/ColorReplaceProperty.png)
12+
13+
## Gallery
14+
![](https://raw.githubusercontent.com/QianMo/X-PostProcessing-Gallery/master/Media/ColorAdjustment/ColorReplace/ColorReplace.png)
15+
16+
![](https://raw.githubusercontent.com/QianMo/X-PostProcessing-Gallery/master/Media/ColorAdjustment/ColorReplace/ColorReplace.gif)

Assets/X-PostProcessing/Effects/ColorReplace/Shader.meta

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
2+
//----------------------------------------------------------------------------------------------------------
3+
// X-PostProcessing Library
4+
// https://github.com/QianMo/X-PostProcessing-Library
5+
// Copyright (C) 2020 QianMo. All rights reserved.
6+
// Licensed under the MIT License
7+
// You may not use this file except in compliance with the License.You may obtain a copy of the License at
8+
// http://opensource.org/licenses/MIT
9+
//----------------------------------------------------------------------------------------------------------
10+
11+
Shader "Hidden/X-PostProcessing/ColorReplace"
12+
{
13+
SubShader
14+
{
15+
Cull Off ZWrite Off ZTest Always
16+
17+
Pass
18+
{
19+
HLSLPROGRAM
20+
21+
#pragma vertex VertDefault
22+
#pragma fragment Frag
23+
24+
#include "../../../Shaders/StdLib.hlsl"
25+
#include "../../../Shaders/XPostProcessing.hlsl"
26+
27+
uniform half4 _FromColor;
28+
uniform half4 _ToColor;
29+
uniform half _Range;
30+
uniform half _Fuzziness;
31+
32+
half3 ColorReplace(half3 In, half3 From, half3 To, half Range, half Fuzziness)
33+
{
34+
half Distance = distance(From, In);
35+
half3 Out = lerp(To, In, saturate((Distance - Range) / max(Fuzziness, 0.1)));
36+
return Out;
37+
}
38+
39+
40+
half4 Frag(VaryingsDefault i) : SV_Target
41+
{
42+
43+
half4 sceneColor = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.texcoord);
44+
45+
half3 finalColor = ColorReplace(sceneColor.rgb, _FromColor.rgb , _ToColor.rgb , _Range, _Fuzziness);
46+
47+
return half4(finalColor, 1.0);
48+
}
49+
50+
ENDHLSL
51+
}
52+
}
53+
}
54+

Assets/X-PostProcessing/Effects/ColorReplace/Shader/ColorReplace.shader.meta

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/X-PostProcessing/Effects/ColorReplaceV2.meta

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+

2+
//----------------------------------------------------------------------------------------------------------
3+
// X-PostProcessing Library
4+
// https://github.com/QianMo/X-PostProcessing-Library
5+
// Copyright (C) 2020 QianMo. All rights reserved.
6+
// Licensed under the MIT License
7+
// You may not use this file except in compliance with the License.You may obtain a copy of the License at
8+
// http://opensource.org/licenses/MIT
9+
//----------------------------------------------------------------------------------------------------------
10+
11+
using System;
12+
using UnityEngine;
13+
using UnityEngine.Rendering;
14+
using UnityEngine.Rendering.PostProcessing;
15+
16+
17+
namespace XPostProcessing
18+
{
19+
20+
[Serializable]
21+
[PostProcess(typeof(ColorReplaceV2Renderer), PostProcessEvent.AfterStack, "X-PostProcessing/ColorAdjustment/ColorReplaceV2")]
22+
public class ColorReplaceV2 : PostProcessEffectSettings
23+
{
24+
25+
26+
public GradientParameter FromGradientColor = new GradientParameter { value = null };
27+
28+
public GradientParameter ToGradientColor = new GradientParameter { value = null };
29+
30+
31+
[Range(0.0f, 100.0f)]
32+
public FloatParameter gridentSpeed = new FloatParameter { value = 0.5f };
33+
34+
[Range(0.0f, 1.0f)]
35+
public FloatParameter Range = new FloatParameter { value = 0.2f };
36+
37+
[Range(0.0f, 1.0f)]
38+
public FloatParameter Fuzziness = new FloatParameter { value = 0.5f };
39+
}
40+
41+
public sealed class ColorReplaceV2Renderer : PostProcessEffectRenderer<ColorReplaceV2>
42+
{
43+
private Shader shader;
44+
private float TimeX = 1.0f;
45+
private const string PROFILER_TAG = "X-ColorReplaceV2";
46+
47+
public override void Init()
48+
{
49+
shader = Shader.Find("Hidden/X-PostProcessing/ColorReplaceV2");
50+
}
51+
52+
public override void Release()
53+
{
54+
base.Release();
55+
}
56+
57+
static class ShaderIDs
58+
{
59+
internal static readonly int FromColor = Shader.PropertyToID("_FromColor");
60+
internal static readonly int ToColor = Shader.PropertyToID("_ToColor");
61+
internal static readonly int Range = Shader.PropertyToID("_Range");
62+
internal static readonly int Fuzziness = Shader.PropertyToID("_Fuzziness");
63+
}
64+
65+
public override void Render(PostProcessRenderContext context)
66+
{
67+
CommandBuffer cmd = context.command;
68+
PropertySheet sheet = context.propertySheets.Get(shader);
69+
cmd.BeginSample(PROFILER_TAG);
70+
71+
TimeX += (Time.deltaTime * settings.gridentSpeed);
72+
if (TimeX > 100)
73+
{
74+
TimeX = 0;
75+
}
76+
if (settings.FromGradientColor.value != null)
77+
{
78+
sheet.properties.SetColor(ShaderIDs.FromColor, settings.FromGradientColor.value.Evaluate(TimeX * 0.01f));
79+
}
80+
81+
if (settings.ToGradientColor.value != null)
82+
{
83+
sheet.properties.SetColor(ShaderIDs.ToColor, settings.ToGradientColor.value.Evaluate(TimeX * 0.01f));
84+
}
85+
86+
sheet.properties.SetFloat(ShaderIDs.Range, settings.Range);
87+
sheet.properties.SetFloat(ShaderIDs.Fuzziness, settings.Fuzziness);
88+
89+
cmd.BlitFullscreenTriangle(context.source, context.destination, sheet, 0);
90+
cmd.EndSample(PROFILER_TAG);
91+
}
92+
}
93+
}
94+

Assets/X-PostProcessing/Effects/ColorReplaceV2/ColorReplaceV2.cs.meta

+11
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/X-PostProcessing/Effects/ColorReplaceV2/Editor.meta

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)