summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--2ner.shader8
-rw-r--r--custom30.cginc95
-rw-r--r--features.cginc2
-rw-r--r--globals.cginc14
4 files changed, 105 insertions, 14 deletions
diff --git a/2ner.shader b/2ner.shader
index b756d1b..42d9b78 100644
--- a/2ner.shader
+++ b/2ner.shader
@@ -108,9 +108,13 @@ Shader "yum_food/2ner"
[HideInInspector] m_start_Custom30("Custom 30", Float) = 0
[ThryToggle(_CUSTOM30)]_Custom30_Enabled("Enable", Float) = 0
+ _Custom30_ro_Offset("ro offset", Float) = 0.0
+
//ifex _Custom30_BasicCube_Enabled==0
[HideInInspector] m_start_Custom30_BasicCube("Basic cube", Float) = 0
[ThryToggle(_CUSTOM30_BASICCUBE)]_Custom30_BasicCube_Enabled("Enable", Float) = 0
+ [ThryToggle(_CUSTOM30_BASICCUBE_HEX_GRIP)]_Custom30_BasicCube_Hex_Grip("Hex grip", Float) = 0
+ [ThryToggle(_CUSTOM30_BASICCUBE_HEX_BOLTS)]_Custom30_BasicCube_Hex_Bolts("Hex bolts", Float) = 0
[ThryToggle(_CUSTOM30_BASICCUBE_CHAMFER)]_Custom30_BasicCube_Chamfer("Chamfer", Float) = 0
[HideInInspector] m_end_Custom30_BasicCube("Basic cube", Float) = 0
//endex
@@ -124,7 +128,11 @@ Shader "yum_food/2ner"
//ifex _Custom30_BasicPlatform_Enabled==0
[HideInInspector] m_start_Custom30_BasicPlatform("Basic platform", Float) = 0
[ThryToggle(_CUSTOM30_BASICPLATFORM)]_Custom30_BasicPlatform_Enabled("Enable", Float) = 0
+ _Custom30_BasicPlatform_Size("Size", Vector) = (1.0, 0.4, 0.2)
+ _Custom30_BasicPlatform_Frame_D("Frame dimension", Float) = 0.08
+ _Custom30_BasicPlatform_Core_D("Core dimension", Float) = 0.05
[ThryToggle(_CUSTOM30_BASICPLATFORM_CHAMFER)]_Custom30_BasicPlatform_Chamfer("Chamfer", Float) = 0
+ _Custom30_BasicPlatform_Chamfer_Size("Size", Vector) = (0.36, 0.78, 0.9)
[ThryToggle(_CUSTOM30_BASICPLATFORM_Y_ALIGNED)]_Custom30_BasicPlatform_Y_Aligned("Y aligned", Float) = 0
[HideInInspector] m_end_Custom30_BasicPlatform("Basic platform", Float) = 0
//endex
diff --git a/custom30.cginc b/custom30.cginc
index bbc8fce..6e81c44 100644
--- a/custom30.cginc
+++ b/custom30.cginc
@@ -2,12 +2,17 @@
#define __CUSTOM30_INC
#include "globals.cginc"
+#include "pema99.cginc"
#include "quilez.cginc"
#include "interpolators.cginc"
#if defined(_CUSTOM30)
+#if defined(_DEPTH_PREPASS)
+#define CUSTOM30_MAX_STEPS 10
+#else
#define CUSTOM30_MAX_STEPS 30
+#endif
#define SQRT_2 1.414213562
#define RCP_SQRT_2 0.707106781
@@ -42,16 +47,73 @@ float cut_with_box(float3 p, float d, float3 box_size) {
return d;
}
+float distance_from_hex_grid(
+ float3 p,
+ float period,
+ float hex_sc,
+ float zoff,
+ float count) {
+ float half_period = period * 0.5;
+ float2 which = abs(floor((p.xy + half_period) / period));
+ p.xy = glsl_mod(p.xy + half_period, period) - half_period;
+
+ float hex_d = distance_from_hex_prism(p -
+ float3(0, 0, zoff), hex_sc);
+ hex_d = any(which > count) ? 1E9 : hex_d;
+ hex_d = any(which % 2 == 0) ? 1E9 : hex_d;
+ return hex_d;
+}
+
#if defined(_CUSTOM30_BASICCUBE)
float BasicCube_map(float3 p) {
float box_d = distance_from_box_frame(p, .995, .15);
- float core_d = distance_from_box(p, 0.95);
+ float core_dim = 0.95;
+ float core_d = distance_from_box(p, core_dim);
float d = min(box_d, core_d);
#if defined(_CUSTOM30_BASICCUBE_CHAMFER)
d = cut_with_box(p, d, 1.3);
#endif
+ // High rate of change = small size on screen = fade out grip.
+ float scale = length(fwidth(p));
+
+#if defined(_CUSTOM30_BASICCUBE_HEX_GRIP)
+ float hex_grip_scale = scale * 10;
+ [branch]
+ if (hex_grip_scale < 1) {
+ float period = 0.05;
+ float hex_sc = period * 0.4;
+ float count = 13;
+
+ float zoff = core_dim - (hex_sc * 0.2) - hex_grip_scale * hex_sc;
+
+ float3 pp = abs(p);
+ pp = pp.z > pp.x && pp.z > pp.y ? pp.xyz : pp;
+ pp = pp.y > pp.x && pp.y > pp.z ? pp.zxy : pp;
+ pp = pp.x > pp.y && pp.x > pp.z ? pp.yzx : pp;
+ d = min(d, distance_from_hex_grid(pp, period, hex_sc, zoff, count));
+ }
+#endif
+
+#if defined(_CUSTOM30_BASICCUBE_HEX_BOLTS)
+ float hex_bolt_scale = scale * 1;
+ [branch]
+ if (hex_bolt_scale < 1) {
+ float period = 0.83;
+ float hex_sc = period * 0.1;
+ float count = 3;
+
+ float zoff = core_dim - hex_sc * hex_bolt_scale;
+
+ float3 pp = abs(p);
+ pp = pp.z > pp.x && pp.z > pp.y ? pp.xyz : pp;
+ pp = pp.y > pp.x && pp.y > pp.z ? pp.zxy : pp;
+ pp = pp.x > pp.y && pp.x > pp.z ? pp.yzx : pp;
+ d = min(d, distance_from_hex_grid(pp, period, hex_sc, zoff, count));
+ }
+#endif
+
return d;
}
@@ -73,6 +135,8 @@ Custom30Output BasicCube(v2f i) {
float3 ro = -frag_to_origin;
float3 rd = normalize(i.objPos - objSpaceCameraPos);
+ ro -= rd * _Custom30_ro_Offset;
+
float d;
float d_acc = 0;
float epsilon = 5E-3;
@@ -98,10 +162,10 @@ Custom30Output BasicCube(v2f i) {
float3 objSpacePos = objPos + (i.objPos + frag_to_origin);
float4 clipPos = UnityObjectToClipPos(objSpacePos);
o.depth = clipPos.z / clipPos.w;
-
+
float3 sdfNormal = BasicCube_normal(objPos) * float3(-1, 1, 1);
o.normal = UnityObjectToWorldNormal(sdfNormal);
-
+
return o;
}
#endif
@@ -112,6 +176,7 @@ float BasicWedge_map(float3 p) {
float cut_plane_d = distance_from_plane(p - float3(0, 0, 0), -normalize(float3(1, 0, 1)), 0);
float d = op_sub(box_d, cut_plane_d);
+
return d;
}
@@ -156,10 +221,10 @@ Custom30Output BasicWedge(v2f i) {
float3 objSpacePos = objPos + (i.objPos + frag_to_origin);
float4 clipPos = UnityObjectToClipPos(objSpacePos);
o.depth = clipPos.z / clipPos.w;
-
+
float3 sdfNormal = BasicWedge_normal(objPos) * float3(-1, 1, 1);
o.normal = UnityObjectToWorldNormal(sdfNormal);
-
+
return o;
}
#endif
@@ -170,27 +235,29 @@ float BasicPlatform_map(float3 p) {
p.xy = p.yx;
#endif
- float3 platform_size = float3(1.0, 0.4, 0.2);
- float box_d = distance_from_box_frame(p, platform_size, .08);
- float core_d = distance_from_box(p, platform_size - 0.05);
+ float3 platform_size = _Custom30_BasicPlatform_Size;
+ float box_d = distance_from_box_frame(p, platform_size, _Custom30_BasicPlatform_Frame_D);
+ float core_d = distance_from_box(p, platform_size - _Custom30_BasicPlatform_Core_D);
float d = min(box_d, core_d);
#if defined(_CUSTOM30_BASICPLATFORM_CHAMFER)
{
float3 pp = p;
- pp.xy = float2(RCP_SQRT_2 * p.x - RCP_SQRT_2 * p.y, RCP_SQRT_2 * p.x + RCP_SQRT_2 * p.y);
- d = max(d, distance_from_box(pp, 0.9));
+ pp.yz = float2(RCP_SQRT_2 * p.y - RCP_SQRT_2 * p.z, RCP_SQRT_2 * p.y + RCP_SQRT_2 * p.z);
+ float c = _Custom30_BasicPlatform_Chamfer_Size.x;
+ d = max(d, distance_from_box(pp, float3(1.0, c, c)));
}
{
float3 pp = p;
pp.xz = float2(RCP_SQRT_2 * p.x - RCP_SQRT_2 * p.z, RCP_SQRT_2 * p.x + RCP_SQRT_2 * p.z);
- d = max(d, distance_from_box(pp, 0.78));
+ float c = _Custom30_BasicPlatform_Chamfer_Size.y;
+ d = max(d, distance_from_box(pp, float3(c, 1.0, c)));
}
{
float3 pp = p;
- pp.yz = float2(RCP_SQRT_2 * p.y - RCP_SQRT_2 * p.z, RCP_SQRT_2 * p.y + RCP_SQRT_2 * p.z);
- float c = 0.36;
- d = max(d, distance_from_box(pp, float3(1.0, c, c)));
+ pp.xy = float2(RCP_SQRT_2 * p.x - RCP_SQRT_2 * p.y, RCP_SQRT_2 * p.x + RCP_SQRT_2 * p.y);
+ float c = _Custom30_BasicPlatform_Chamfer_Size.z;
+ d = max(d, distance_from_box(pp, float3(c, c, 1.0)));
}
#endif
diff --git a/features.cginc b/features.cginc
index cf546f8..4bb5594 100644
--- a/features.cginc
+++ b/features.cginc
@@ -295,6 +295,8 @@
#pragma shader_feature_local _CUSTOM30
#pragma shader_feature_local _CUSTOM30_BASICCUBE
#pragma shader_feature_local _CUSTOM30_BASICCUBE_CHAMFER
+#pragma shader_feature_local _CUSTOM30_BASICCUBE_HEX_GRIP
+#pragma shader_feature_local _CUSTOM30_BASICCUBE_HEX_BOLTS
#pragma shader_feature_local _CUSTOM30_BASICWEDGE
#pragma shader_feature_local _CUSTOM30_BASICPLATFORM
#pragma shader_feature_local _CUSTOM30_BASICPLATFORM_CHAMFER
diff --git a/globals.cginc b/globals.cginc
index 2f09881..aeedad5 100644
--- a/globals.cginc
+++ b/globals.cginc
@@ -507,4 +507,18 @@ float _3D_SDF_Z;
float _3D_SDF_Z_Speed;
#endif // _3D_SDF
+#if defined(_CUSTOM30)
+float _Custom30_ro_Offset;
+#endif
+
+#if defined(_CUSTOM30_BASICPLATFORM)
+float3 _Custom30_BasicPlatform_Size;
+float _Custom30_BasicPlatform_Frame_D;
+float _Custom30_BasicPlatform_Core_D;
+#endif // _CUSTOM30_BASICPLATFORM
+
+#if defined(_CUSTOM30_BASICPLATFORM_CHAMFER)
+float3 _Custom30_BasicPlatform_Chamfer_Size;
+#endif // _CUSTOM30_BASICPLATFORM_CHAMFER
+
#endif // __GLOBALS_INC