66 lines
1.3 KiB
Plaintext
66 lines
1.3 KiB
Plaintext
|
#include "Common.ush"
|
||
|
|
||
|
void MainVertexShader(
|
||
|
float4 InPosition : ATTRIBUTE0,
|
||
|
float2 InUV : ATTRIBUTE1,
|
||
|
out float2 OutUV : TEXCOORD0,
|
||
|
out float4 OutPosition : SV_POSITION
|
||
|
)
|
||
|
{
|
||
|
OutPosition = InPosition;
|
||
|
OutUV = InUV;
|
||
|
}
|
||
|
|
||
|
Texture2D<uint> TextureParameter;
|
||
|
|
||
|
#define Zoom 2
|
||
|
#define Pan float2(0.5, 0)
|
||
|
#define Aspect 1
|
||
|
#define Iterations int(128*PSVariables.IterationsMultiplier)
|
||
|
#define JuliaSeed float2(0.39, 0.2)
|
||
|
#define ColorScale float3(4, 5, 6)
|
||
|
|
||
|
float ComputeValue(float2 v, float2 offset)
|
||
|
{
|
||
|
float vxsquare = 0;
|
||
|
float vysquare = 0;
|
||
|
|
||
|
int iteration = 0;
|
||
|
int lastIteration = Iterations;
|
||
|
|
||
|
do
|
||
|
{
|
||
|
vxsquare = v.x * v.x;
|
||
|
vysquare = v.y * v.y;
|
||
|
|
||
|
v = float2(vxsquare - vysquare, v.x * v.y * 2) + offset;
|
||
|
|
||
|
iteration++;
|
||
|
|
||
|
if ((lastIteration == Iterations) && (vxsquare + vysquare) > 4.0)
|
||
|
{
|
||
|
lastIteration = iteration + 1;
|
||
|
}
|
||
|
} while (iteration < lastIteration);
|
||
|
|
||
|
return (float(iteration) - (log(log(sqrt(vxsquare + vysquare))) / log(2.0))) / float(Iterations);
|
||
|
}
|
||
|
|
||
|
float4 Mandelbrot_Func(float2 texCoord : TEXCOORD0) : COLOR0
|
||
|
{
|
||
|
float2 v = (texCoord - 0.5) * Zoom * float2(1, Aspect) - Pan;
|
||
|
|
||
|
float val = ComputeValue(v, v);
|
||
|
|
||
|
return float4(sin(val * ColorScale.x), sin(val * ColorScale.y), sin(val * ColorScale.z), 1);
|
||
|
}
|
||
|
|
||
|
void MainPixelShader(
|
||
|
in float2 uv : TEXCOORD0,
|
||
|
out float4 OutColor : SV_Target0
|
||
|
)
|
||
|
{
|
||
|
OutColor = Mandelbrot_Func(uv);
|
||
|
}
|
||
|
|