像素化
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
#ifndef PIXELATE_PASS_INCLUDED
|
||||
#define PIXELATE_PASS_INCLUDED
|
||||
|
||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
||||
|
||||
TEXTURE2D(_SourceTexture);
|
||||
SAMPLER(sampler_SourceTexture);
|
||||
float4 _SourceTexture_TexelSize;
|
||||
|
||||
float _PixelateStrengthX;
|
||||
float _PixelateStrengthY;
|
||||
|
||||
struct Varyings
|
||||
{
|
||||
float4 positionCS_SS : SV_POSITION;
|
||||
float2 screenUV : VAR_SCREEN_UV;
|
||||
};
|
||||
|
||||
Varyings PixelatePassVert(uint vertexID : SV_VertexID)
|
||||
{
|
||||
Varyings output;
|
||||
output.positionCS_SS = float4(
|
||||
vertexID <= 1 ? -1.0 : 3.0,
|
||||
vertexID == 1 ? 3.0 : -1.0,
|
||||
0.0, 1.0
|
||||
);
|
||||
output.screenUV = float2(
|
||||
vertexID <= 1 ? 0.0 : 2.0,
|
||||
vertexID == 1 ? 2.0 : 0.0
|
||||
);
|
||||
if (_ProjectionParams.x < 0.0)
|
||||
{
|
||||
output.screenUV.y = 1.0 - output.screenUV.y;
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
half4 PixelatePassFrag(Varyings input) : SV_Target
|
||||
{
|
||||
float2 screenUV = input.screenUV;
|
||||
float2 strength = float2(_PixelateStrengthX, _PixelateStrengthY);
|
||||
float2 uvScaled = screenUV * strength;
|
||||
float2 uvFloor = floor(uvScaled);
|
||||
float2 uvCenter = uvFloor + 0.5;
|
||||
float2 uvPixelated = uvCenter / strength;
|
||||
|
||||
return SAMPLE_TEXTURE2D(_SourceTexture, sampler_SourceTexture, uvPixelated);
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user