diff --git a/default/forge_project.cfg b/default/forge_project.cfg index 3b71415..78ba086 100644 --- a/default/forge_project.cfg +++ b/default/forge_project.cfg @@ -235,11 +235,14 @@ GROUP_1_6_Y=19 GROUP_1_6_Z= # Same for group 2 -GROUP_2_ACTIVE_COUNT=4 +GROUP_2_ACTIVE_COUNT=7 GROUP_2_ACTIVE_1=36 GROUP_2_ACTIVE_2=68 GROUP_2_ACTIVE_3=52 -GROUP_2_ACTIVE_4=11077 +GROUP_2_ACTIVE_4=1077 +GROUP_2_ACTIVE_5=11077 +GROUP_2_ACTIVE_6=101077 +GROUP_2_ACTIVE_7=111077 GROUP_2_COUNT=7 GROUP_2_1_X=37 GROUP_2_1_Y=53 @@ -273,12 +276,12 @@ GROUP_3_2_Y=16 GROUP_3_2_Z=11089 # Auto-Random Ignore (ARI) prefixes -ARI_COUNT=17 +ARI_COUNT=62 ARI_1=GROUP_3_1_Y ARI_2=GROUP_3_2_Z -ARI_3=GROUP_2_1_X_4 -ARI_4=GROUP_2_1_Y_4 -ARI_5=GROUP_2_1_Z_4 +ARI_3=GROUP_2_5_4 +ARI_4=GROUP_2_5_4 +ARI_5=GROUP_2_5_4 ARI_6=GROUP_2_2_X_4 ARI_7=GROUP_2_2_Y_4 ARI_8=GROUP_2_2_Z_4 @@ -291,6 +294,51 @@ ARI_14=GROUP_2_6_Z_4 ARI_15=GROUP_2_7_X_4 ARI_16=GROUP_2_7_Y_4 ARI_17=GROUP_2_7_Z_4 +ARI_18=GROUP_2_5_5 +ARI_19=GROUP_2_5_5 +ARI_20=GROUP_2_5_5 +ARI_21=GROUP_2_2_X_5 +ARI_22=GROUP_2_2_Y_5 +ARI_23=GROUP_2_2_Z_5 +ARI_24=GROUP_2_4_X_5 +ARI_25=GROUP_2_4_Y_5 +ARI_26=GROUP_2_4_Z_5 +ARI_27=GROUP_2_6_X_5 +ARI_28=GROUP_2_6_Y_5 +ARI_29=GROUP_2_6_Z_5 +ARI_30=GROUP_2_7_X_5 +ARI_31=GROUP_2_7_Y_5 +ARI_32=GROUP_2_7_Z_5 +ARI_33=GROUP_2_5_6 +ARI_34=GROUP_2_5_6 +ARI_35=GROUP_2_5_6 +ARI_36=GROUP_2_2_X_6 +ARI_37=GROUP_2_2_Y_6 +ARI_38=GROUP_2_2_Z_6 +ARI_39=GROUP_2_4_X_6 +ARI_40=GROUP_2_4_Y_6 +ARI_41=GROUP_2_4_Z_6 +ARI_42=GROUP_2_6_X_6 +ARI_43=GROUP_2_6_Y_6 +ARI_44=GROUP_2_6_Z_6 +ARI_45=GROUP_2_7_X_6 +ARI_46=GROUP_2_7_Y_6 +ARI_47=GROUP_2_7_Z_6 +ARI_48=GROUP_2_5_7 +ARI_49=GROUP_2_5_7 +ARI_50=GROUP_2_5_7 +ARI_51=GROUP_2_2_X_7 +ARI_52=GROUP_2_2_Y_7 +ARI_53=GROUP_2_2_Z_7 +ARI_54=GROUP_2_4_X_7 +ARI_55=GROUP_2_4_Y_7 +ARI_56=GROUP_2_4_Z_7 +ARI_57=GROUP_2_6_X_7 +ARI_58=GROUP_2_6_Y_7 +ARI_59=GROUP_2_6_Z_7 +ARI_60=GROUP_2_7_X_7 +ARI_61=GROUP_2_7_Y_7 +ARI_62=GROUP_2_7_Z_7 # ===== # OTHER diff --git a/default/frag9.glsl b/default/frag9.glsl index cab3b91..1c07e67 100644 --- a/default/frag9.glsl +++ b/default/frag9.glsl @@ -10,34 +10,104 @@ out vec4 fragColor; uniform sampler2D iTex0; uniform vec3 iGroup2_4[7]; +uniform vec3 iGroup2_5[7]; +uniform vec3 iGroup2_6[7]; +uniform vec3 iGroup2_7[7]; void main() { - bool visible = iGroup2_4[0].x > 0; - bool invert = iGroup2_4[0].y > 0; - float rect = iGroup2_4[0].z; + bool visible = (iGroup2_4[4].x + iGroup2_5[4].x + iGroup2_6[4].x + iGroup2_7[4].x) > 0; + bool invert = (iGroup2_4[4].y + iGroup2_5[4].y + iGroup2_6[4].y + iGroup2_7[4].y) > 0; + float rect = clamp(iGroup2_4[4].z + iGroup2_5[4].z + iGroup2_6[4].z + iGroup2_7[4].z, 0, 1); + bool modified = false; - vec2 uv2 = vUV; + vec2 uv = mix(vec2(0), vUV, base_mask(vUV)); - if (visible) { - vec2 p1 = vec2(iGroup2_4[6].xy); - vec2 p2 = vec2(iGroup2_4[1].xy); - vec2 p3 = vec2(iGroup2_4[3].xy); - vec2 p4 = vec2(iGroup2_4[5].xy); + if (iGroup2_4[4].x > 0) { + vec2 p11 = vec2(iGroup2_4[6].xy); + vec2 p12 = vec2(iGroup2_4[1].xy); + vec2 p13 = vec2(iGroup2_4[3].xy); + vec2 p14 = vec2(iGroup2_4[5].xy); - p2.x = 1 - p2.x; - p3.y = 1 - p3.y; - p4.x = 1 - p4.x; - p4.y = 1 - p4.y; + p12.x = 1 - p12.x; + p13.y = 1 - p13.y; + p14.x = 1 - p14.x; + p14.y = 1 - p14.y; - uv2 = project_4p(vUV, p1, p2, p3, p4); + vec2 uv1 = project_4p(vUV, p11, p12, p13, p14); + uv1 = mix(vec2(0), uv1, base_mask(uv1)); + uv = uv1; + modified = true; } - vec4 color = texture(iTex0, invert ? vUV : uv2); + if (iGroup2_5[4].x > 0) { + vec2 p21 = vec2(iGroup2_5[6].xy); + vec2 p22 = vec2(iGroup2_5[1].xy); + vec2 p23 = vec2(iGroup2_5[3].xy); + vec2 p24 = vec2(iGroup2_5[5].xy); + + p22.x = 1 - p22.x; + p23.y = 1 - p23.y; + p24.x = 1 - p24.x; + p24.y = 1 - p24.y; + + vec2 uv2 = project_4p(vUV, p21, p22, p23, p24); + uv2 = mix(vec2(0), uv2, base_mask(uv2)); + if (modified) { + uv = mix(uv, uv2, step(0.0001, length(uv2))); + } else { + uv = uv2; + } + modified = true; + } + + if (iGroup2_6[4].x > 0) { + vec2 p31 = vec2(iGroup2_6[6].xy); + vec2 p32 = vec2(iGroup2_6[1].xy); + vec2 p33 = vec2(iGroup2_6[3].xy); + vec2 p34 = vec2(iGroup2_6[5].xy); + + p32.x = 1 - p32.x; + p33.y = 1 - p33.y; + p34.x = 1 - p34.x; + p34.y = 1 - p34.y; + + vec2 uv3 = project_4p(vUV, p31, p32, p33, p34); + uv3 = mix(vec2(0), uv3, base_mask(uv3)); + if (modified) { + uv = mix(uv, uv3, step(0.0001, length(uv3))); + } else { + uv = uv3; + } + modified = true; + } + + if (iGroup2_7[4].x > 0) { + vec2 p41 = vec2(iGroup2_7[6].xy); + vec2 p42 = vec2(iGroup2_7[1].xy); + vec2 p43 = vec2(iGroup2_7[3].xy); + vec2 p44 = vec2(iGroup2_7[5].xy); + + p42.x = 1 - p42.x; + p43.y = 1 - p43.y; + p44.x = 1 - p44.x; + p44.y = 1 - p44.y; + + vec2 uv4 = project_4p(vUV, p41, p42, p43, p44); + uv4 = mix(vec2(0), uv4, base_mask(uv4)); + if (modified) { + uv = mix(uv, uv4, step(0.0001, length(uv4))); + } else { + uv = uv4; + } + modified = true; + } + + vec4 color = texture(iTex0, invert ? vUV : uv); if (visible) { - float mask = step(0, uv2.x) * step(-1, -uv2.x) * step(0, uv2.y) * step(-1, -uv2.y); + float mask = step(0.0001, length(uv)); color *= mix(mask, 1 - mask, invert ? 1 : 0); - color = mix(color, color + mask * vec4(1), rect * (step(uv2.x, 0.01) + step(uv2.y, 0.01) + step(1 - uv2.y, 0.01) + step(1 - uv2.x, 0.01))); + color = mix(color, color + mask * vec4(1), rect * (step(uv.x, 0.01) + step(uv.y, 0.01) + step(1 - uv.y, 0.01) + step(1 - uv.x, 0.01))); } fragColor = color; diff --git a/default/inc_map.glsl b/default/inc_map.glsl index b7f2434..cb5e385 100644 --- a/default/inc_map.glsl +++ b/default/inc_map.glsl @@ -23,4 +23,8 @@ vec2 project_4p(vec2 uv, vec2 p1, vec2 p2, vec2 p3, vec2 p4) { return tmp.xy / tmp.z; } +float base_mask(vec2 uv) { + return step(0, uv.x) * step(-1, -uv.x) * step(0, uv.y) * step(-1, -uv.y); +} + #endif