diff options
| -rw-r--r-- | 2ner.shader | 8 | ||||
| -rw-r--r-- | custom30.cginc | 95 | ||||
| -rw-r--r-- | features.cginc | 2 | ||||
| -rw-r--r-- | globals.cginc | 14 |
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
|
