Skip to content

Commit 179c0d3

Browse files
committed
加入Pixelize系9种像素化后处理
加入Pixelize系9种像素化后处理
1 parent bf15518 commit 179c0d3

File tree

99 files changed

+2667
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

99 files changed

+2667
-0
lines changed

Assets/X-PostProcessing/Effects/PixelizeCircle.meta

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

Assets/X-PostProcessing/Effects/PixelizeCircle/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,53 @@
1+
//----------------------------------------------------------------------------------------------------------
2+
// X-PostProcessing Library
3+
// created by QianMo @ 2020
4+
//----------------------------------------------------------------------------------------------------------
5+
6+
using System.Collections;
7+
using System.Collections.Generic;
8+
using UnityEngine;
9+
using UnityEditor;
10+
11+
using UnityEditor.Rendering.PostProcessing;
12+
using UnityEngine.Rendering.PostProcessing;
13+
14+
namespace XPostProcessing
15+
{
16+
[PostProcessEditor(typeof(PixelizeCircle))]
17+
public sealed class PixelizeCircleEditor : PostProcessEffectEditor<PixelizeCircle>
18+
{
19+
20+
SerializedParameterOverride pixelSize;
21+
SerializedParameterOverride circleRadius;
22+
SerializedParameterOverride pixelIntervalX;
23+
SerializedParameterOverride pixelIntervalY;
24+
SerializedParameterOverride BackgroundColor;
25+
26+
public override void OnEnable()
27+
{
28+
pixelSize = FindParameterOverride(x => x.pixelSize);
29+
circleRadius = FindParameterOverride(x => x.circleRadius);
30+
pixelIntervalX = FindParameterOverride(x => x.pixelIntervalX);
31+
pixelIntervalY = FindParameterOverride(x => x.pixelIntervalY);
32+
BackgroundColor = FindParameterOverride(x => x.BackgroundColor);
33+
}
34+
35+
public override string GetDisplayTitle()
36+
{
37+
return XPostProcessingEditorUtility.DISPLAY_TITLE_PREFIX + base.GetDisplayTitle();
38+
}
39+
40+
public override void OnInspectorGUI()
41+
{
42+
EditorUtilities.DrawHeaderLabel("Core Property");
43+
PropertyField(pixelSize);
44+
PropertyField(circleRadius);
45+
PropertyField(BackgroundColor);
46+
47+
EditorUtilities.DrawHeaderLabel("Pixel Interval");
48+
PropertyField(pixelIntervalX);
49+
PropertyField(pixelIntervalY);
50+
}
51+
52+
}
53+
}

Assets/X-PostProcessing/Effects/PixelizeCircle/Editor/PixelizeCircleEditor.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,66 @@
1+
//----------------------------------------------------------------------------------------------------------
2+
// X-PostProcessing Library
3+
// created by QianMo @ 2020
4+
//----------------------------------------------------------------------------------------------------------
5+
6+
using System;
7+
using UnityEngine;
8+
using UnityEngine.Rendering;
9+
using UnityEngine.Rendering.PostProcessing;
10+
11+
12+
namespace XPostProcessing
13+
{
14+
15+
[Serializable]
16+
[PostProcess(typeof(PixelizeCircleRenderer), PostProcessEvent.BeforeStack, "X-PostProcessing/Pixelize/PixelizeCircle")]
17+
public class PixelizeCircle : PostProcessEffectSettings
18+
{
19+
20+
[Range(0.01f, 1.0f)]
21+
public FloatParameter pixelSize = new FloatParameter { value = 0.8f };
22+
[Range(0.01f, 1.0f)]
23+
public FloatParameter circleRadius = new FloatParameter { value = 0.45f };
24+
[Range(0.2f, 5.0f), Tooltip("Pixel interval X")]
25+
public FloatParameter pixelIntervalX = new FloatParameter { value = 1f };
26+
[Range(0.2f, 5.0f), Tooltip("Pixel interval Y")]
27+
public FloatParameter pixelIntervalY = new FloatParameter { value = 1f };
28+
[ColorUsageAttribute(true, true, 0f, 20f, 0.125f, 3f)]
29+
public ColorParameter BackgroundColor = new ColorParameter { value = new Color(0.0f, 0.0f, 0.0f) };
30+
31+
}
32+
33+
public sealed class PixelizeCircleRenderer : PostProcessEffectRenderer<PixelizeCircle>
34+
{
35+
private const string PROFILER_TAG = "X-PixelizeCircle";
36+
private Shader shader;
37+
38+
public override void Init()
39+
{
40+
shader = Shader.Find("Hidden/X-PostProcessing/PixelizeCircle");
41+
}
42+
43+
public override void Release()
44+
{
45+
base.Release();
46+
}
47+
48+
public override void Render(PostProcessRenderContext context)
49+
{
50+
CommandBuffer cmd = context.command;
51+
PropertySheet sheet = context.propertySheets.Get(shader);
52+
cmd.BeginSample(PROFILER_TAG);
53+
54+
float size = (1.01f - settings.pixelSize) * 300f;
55+
Vector4 parameters = new Vector4(size, ((context.screenWidth * 2 / context.screenHeight) * size / Mathf.Sqrt(3f)), settings.circleRadius, 0f);
56+
57+
sheet.properties.SetVector("_Params", parameters);
58+
sheet.properties.SetFloat("_PixelIntervalX", settings.pixelIntervalX);
59+
sheet.properties.SetFloat("_PixelIntervalY", settings.pixelIntervalY);
60+
sheet.properties.SetColor("_BackgroundColor", settings.BackgroundColor);
61+
62+
cmd.BlitFullscreenTriangle(context.source, context.destination, sheet, 0);
63+
cmd.EndSample(PROFILER_TAG);
64+
}
65+
}
66+
}

Assets/X-PostProcessing/Effects/PixelizeCircle/PixelizeCircle.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+
# Pixelize Circle
3+
4+
## Source Code List
5+
- [Shader Code](Shader/PixelizeCircle.shader)
6+
- [C# Code](PixelizeCircle.cs)
7+
- [Editor Code](Editor/PixelizeCircleEditor.cs)
8+
9+
10+
## Property
11+
![](https://raw.githubusercontent.com/QianMo/X-PostProcessing-Gallery/master/Media/Pixelize/PixelizeCircle/PixelizeCircleProperty.jpg)
12+
13+
## Gallery
14+
![](https://raw.githubusercontent.com/QianMo/X-PostProcessing-Gallery/master/Media/Pixelize/PixelizeCircle/PixelizeCircle.jpg)
15+
16+
![](https://raw.githubusercontent.com/QianMo/X-PostProcessing-Gallery/master/Media/Pixelize/PixelizeCircle/PixelizeCircle.gif)

Assets/X-PostProcessing/Effects/PixelizeCircle/README.md.meta

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

Assets/X-PostProcessing/Effects/PixelizeCircle/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,70 @@
1+
//----------------------------------------------------------------------------------------------------------
2+
// X-PostProcessing Library
3+
// created by QianMo @ 2020
4+
//----------------------------------------------------------------------------------------------------------
5+
6+
Shader "Hidden/X-PostProcessing/PixelizeCircle"
7+
{
8+
SubShader
9+
{
10+
Cull Off ZWrite Off ZTest Always
11+
12+
Pass
13+
{
14+
HLSLPROGRAM
15+
16+
#pragma vertex VertDefault
17+
#pragma fragment Frag
18+
19+
#include "../../../Shaders/StdLib.hlsl"
20+
#include "../../../Shaders/XPostProcessing.hlsl"
21+
22+
23+
24+
float4 _Params;
25+
float _PixelRatio;
26+
float _PixelIntervalX;
27+
float _PixelIntervalY;
28+
half4 _BackgroundColor;
29+
30+
31+
float4 CirclePixelize(float2 uv)
32+
{
33+
float pixelScale = 1.0 / _Params.x;
34+
35+
float ratio = _ScreenParams.y / _ScreenParams.x;
36+
uv.x = uv.x / ratio;
37+
38+
//x和y坐标分别除以缩放系数,在用floor向下取整,再乘以缩放系数,得到分段UV
39+
float2 coord = half2(_PixelIntervalX * floor(uv.x / (pixelScale * _PixelIntervalX)), (_PixelIntervalY)* floor(uv.y / (pixelScale * _PixelIntervalY)));
40+
41+
//求解圆心坐标
42+
float2 circleCenter = coord * pixelScale + pixelScale * 0.5;
43+
44+
//计算当前uv值隔圆心的距离,并乘以缩放系数
45+
float dist = length(uv - circleCenter) * _Params.x;
46+
//圆心坐标乘以缩放系数
47+
circleCenter.x *= ratio;
48+
49+
//采样
50+
float4 screenColor = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, circleCenter);
51+
52+
//对于距离大于半径的像素,替换为背景色
53+
if (dist > _Params.z) screenColor = _BackgroundColor;
54+
55+
return screenColor;
56+
}
57+
58+
59+
60+
float4 Frag(VaryingsDefault i): SV_Target
61+
{
62+
63+
return CirclePixelize(i.texcoord);
64+
}
65+
66+
ENDHLSL
67+
68+
}
69+
}
70+
}

Assets/X-PostProcessing/Effects/PixelizeCircle/Shader/PixelizeCircle.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/PixelizeDiamond.meta

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

Assets/X-PostProcessing/Effects/PixelizeDiamond/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,39 @@
1+
//----------------------------------------------------------------------------------------------------------
2+
// X-PostProcessing Library
3+
// created by QianMo @ 2020
4+
//----------------------------------------------------------------------------------------------------------
5+
6+
using System.Collections;
7+
using System.Collections.Generic;
8+
using UnityEngine;
9+
using UnityEditor;
10+
11+
using UnityEditor.Rendering.PostProcessing;
12+
using UnityEngine.Rendering.PostProcessing;
13+
14+
namespace XPostProcessing
15+
{
16+
[PostProcessEditor(typeof(PixelizeDiamond))]
17+
public sealed class PixelizeDiamondEditor : PostProcessEffectEditor<PixelizeDiamond>
18+
{
19+
20+
SerializedParameterOverride pixelSize;
21+
22+
23+
public override void OnEnable()
24+
{
25+
pixelSize = FindParameterOverride(x => x.pixelSize);
26+
}
27+
28+
public override string GetDisplayTitle()
29+
{
30+
return XPostProcessingEditorUtility.DISPLAY_TITLE_PREFIX + base.GetDisplayTitle();
31+
}
32+
33+
public override void OnInspectorGUI()
34+
{
35+
PropertyField(pixelSize);
36+
}
37+
38+
}
39+
}

Assets/X-PostProcessing/Effects/PixelizeDiamond/Editor/PixelizeDiamondEditor.cs.meta

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

0 commit comments

Comments
 (0)