80 lines
2.4 KiB
Text
80 lines
2.4 KiB
Text
|
Shader "CrispyPin/Loops"
|
||
|
{
|
||
|
Properties
|
||
|
{
|
||
|
[Header(Raymarcher Properties)]
|
||
|
_MaxSteps ("Max steps", Integer) = 128
|
||
|
_MaxDist ("Max distance", Float) = 128
|
||
|
_SurfDist ("Surface distance threshold", Range(.0001, .05)) = .001
|
||
|
}
|
||
|
SubShader
|
||
|
{
|
||
|
Tags { "RenderType"="Opaque" }
|
||
|
Cull Front
|
||
|
LOD 100
|
||
|
|
||
|
Pass
|
||
|
{
|
||
|
CGPROGRAM
|
||
|
#pragma vertex vert
|
||
|
#pragma fragment frag
|
||
|
|
||
|
int _MaxSteps;
|
||
|
float _MaxDist;
|
||
|
float _SurfDist;
|
||
|
#define MAX_STEPS _MaxSteps
|
||
|
#define MAX_DIST _MaxDist
|
||
|
#define SURF_DIST _SurfDist
|
||
|
|
||
|
#define SCENE_FN main
|
||
|
#define SCENE_SCALE 0.04
|
||
|
#define DISCARD_ON_MISS
|
||
|
|
||
|
#include "lib/libgarbage.cginc"
|
||
|
|
||
|
float flatsin(float t, float period = 2, float transition = 0.5, float bias = 0) {
|
||
|
// period 2
|
||
|
// smoothstep(0.25, 0.75, abs(mod(x -0.75, 2) - 1))
|
||
|
// period 4
|
||
|
// smoothstep(0.75, 1.25, abs(mod(x -1.25, 4) - 2))
|
||
|
float start = (period/2-transition)/2;
|
||
|
return smoothstep(start - bias, start + transition - bias, abs(fmod(t - start - transition - bias, period) - period/2));
|
||
|
}
|
||
|
|
||
|
SurfacePoint Loop(float3 p, Material m = DEFAULT_MAT) {
|
||
|
return qSub(mBox(p, float3(2,4,6), m), mBox(p, float3(4,2,4)));
|
||
|
}
|
||
|
|
||
|
Material lCol(float t) {
|
||
|
Material mA = mat(1, .5, .2);
|
||
|
Material mB = mat(.2, .5, 1);
|
||
|
return mixMat(mA, mB, flatsin(t, 6, 0.5, 1));
|
||
|
}
|
||
|
|
||
|
SurfacePoint main(float3 p) {
|
||
|
SurfacePoint d;
|
||
|
|
||
|
float t = _Time.y;
|
||
|
Material mA = mat(1, .5, .2);
|
||
|
Material mB = mat(.2, .5, 1);
|
||
|
Material mCenter = mixMat(mA, mB, flatsin(t, 3, 0.5, .25));
|
||
|
|
||
|
d = Loop(p -float3( 0, 0,flatsin(t )*8 -4),mCenter);
|
||
|
d = qUnion(d,Loop(p.yzx-float3( 0, 4,flatsin(t+1.5)*8 -4),lCol(t+2.5)));
|
||
|
d = qUnion(d,Loop(p.zxy-float3( 4, 4,flatsin(t+1 )*8 -4),lCol(t+2)));
|
||
|
d = qUnion(d,Loop(p -float3( 4, 4,flatsin(t+1.5)*8 ),lCol(t+1.5)));
|
||
|
d = qUnion(d,Loop(p.yzx-float3( 4, 0,flatsin(t+1 )*8 ),lCol(t+1)));
|
||
|
d = qUnion(d,Loop(p.zxy-float3( 0, 0,flatsin(t+0.5)*8 ),lCol(t+0.5)));
|
||
|
d = qUnion(d,Loop(p.yzx-float3( 0,-4,flatsin(t+1.5)*8 -4),lCol(t-0.5)));
|
||
|
d = qUnion(d,Loop(p.zxy-float3(-4,-4,flatsin(t+1 )*8 -4),lCol(t-1)));
|
||
|
d = qUnion(d,Loop(p -float3(-4,-4,flatsin(t+1.5)*8 -8),lCol(t-1.5)));
|
||
|
d = qUnion(d,Loop(p.yzx-float3(-4, 0,flatsin(t+1 )*8 -8),lCol(t-2)));
|
||
|
d = qUnion(d,Loop(p.zxy-float3( 0, 0,flatsin(t+0.5)*8 -8),lCol(t-2.5)));
|
||
|
|
||
|
return d;
|
||
|
}
|
||
|
ENDCG
|
||
|
}
|
||
|
}
|
||
|
}
|