Shader "CrispyPin/Gyroid"
{
	Properties
	{
		[Header(Raymarcher Properties)]
		_MaxSteps ("Max steps", Integer) = 128
		_MaxDist ("Max distance", Float) = 128
		_SurfDist ("Surface distance threshold", Range(0.0001, 0.05)) = 0.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 REFLECTIONS 5

			#define SCENE_FN main

			#define DISCARD_ON_MISS
			#include "lib/libgarbage.cginc"


			SurfacePoint main(float3 p) {
				SurfacePoint d;
				d = qRound(mBox(p, 0.98), 0.01);
				d = qIntersect(d, mGyroid(p, 16, 0, 0.2), 0.01);
				// sdGyroid(p, 12, sin(_Time.y) * UNITY_PI * 0.5, 0.2),
				// d.mat = mat(.8, 1);
				return d;
			}

			ENDCG
		}
	}
}
