Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct Vertex
- {
- float4 pos : POSITION;
- float2 tex : TEXTURE;
- float3 norm : NORMAL;
- };
- struct PixelShaderArgs
- {
- float4 pos : SV_POSITION;
- float2 col : TEXTURE;
- float3 norm : NORMAL;
- };
- struct VignetteShaderData
- {
- float2 Resolution;
- float Padding1;
- float Padding2;
- float3 Color;
- float Intensity;
- };
- Texture2D ShaderTexture : register(t0);
- SamplerState Sampler : register(s0);
- float4x4 localMatrix : register(b0);
- cbuffer VignetteShaderDataBuffer : register(b1)
- {
- VignetteShaderData VignetteData;
- };
- PixelShaderArgs VertexShaderMain(Vertex vertex)
- {
- PixelShaderArgs output;
- output.pos = vertex.pos;
- output.col = vertex.tex;
- return output;
- }
- float4 PixelShaderMain(PixelShaderArgs pixelShaderArgs) : SV_Target
- {
- float outerRadius = 1.2;
- float innerRadius = .50;
- float curvature = .31; // Because 31 is dank as fuck.
- float oneOverCurve = 1.0f / curvature;
- float4 diffuse = ShaderTexture.Sample(Sampler, pixelShaderArgs.col);
- float2 fragmentPosition = pixelShaderArgs.pos.xy / VignetteData.Resolution;
- float2 curve = pow(abs(fragmentPosition * 2.0 - 1.0), float2(oneOverCurve,oneOverCurve));
- float cameraEdge = pow(length(curve), curvature);
- float vignette = smoothstep(innerRadius, outerRadius, cameraEdge) * VignetteData.Intensity;
- diffuse.rgb = lerp(diffuse.rgb, VignetteData.Color, vignette);
- return diffuse;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement