Skip to content

Instantly share code, notes, and snippets.

@hangy233
Last active October 24, 2024 00:41
Show Gist options
  • Select an option

  • Save hangy233/62b9e9c352f12b7f4030a6462eb90c80 to your computer and use it in GitHub Desktop.

Select an option

Save hangy233/62b9e9c352f12b7f4030a6462eb90c80 to your computer and use it in GitHub Desktop.
tiler custom node
# tiler.gd
@tool
extends VisualShaderNodeCustom
class_name VisualShaderNodeTiler
func _get_name():
return "TilerSwift"
func _get_category():
return "MyShaderNodes"
func _get_description():
return "Places tile texture with some custom utils. (by github.com/hangy233)"
func _init():
set_input_port_default_value(0, 6.0) # tiling scale
set_input_port_default_value(1, 2) # rotation step
set_input_port_default_value(2, 1.0) # seed
set_input_port_default_value(3, true) # randomly mirror
func _get_return_icon_type():
return VisualShaderNode.PORT_TYPE_VECTOR_2D
func _get_input_port_count():
return 5
func _get_input_port_name(port):
match port:
0:
return "Tiling Scale"
1:
return "Rotation Step"
2:
return "Seed"
3:
return "Randomly Mirror"
4:
return "UV"
func _get_input_port_type(port):
match port:
0:
return VisualShaderNode.PORT_TYPE_SCALAR
1:
return VisualShaderNode.PORT_TYPE_SCALAR_INT
2:
return VisualShaderNode.PORT_TYPE_SCALAR
3:
return VisualShaderNode.PORT_TYPE_BOOLEAN
4:
return VisualShaderNode.PORT_TYPE_VECTOR_2D
func _get_output_port_count():
return 1
func _get_output_port_name(port):
return "uv"
func _get_output_port_type(port):
return VisualShaderNode.PORT_TYPE_VECTOR_2D
func _get_global_code(mode):
return """
vec2 tileMe(float ts_n_out42p0, int rs_n_out82p0, float s_n_out73p0, bool rm_n_out75p0, vec2 u_n_out20p0) {
vec2 n_out21p0 = u_n_out20p0 * vec2(ts_n_out42p0);
vec2 n_out47p0 = n_out21p0 - vec2(0.50000, 0.50000);
vec2 n_out66p0 = round(n_out47p0) / vec2(ts_n_out42p0);
float n_out44p0 = fract(cos(dot(vec3(n_out66p0, 0.0).xy, vec2(13213.3242134, 812313.567567))) * mod(s_n_out73p0 * 31256.3568, 65536.0));
float n_out80p0 = round(n_out44p0 * float(rs_n_out82p0));
float n_out81p0 = n_out80p0 / float(rs_n_out82p0);
float n_out38p0 = n_out81p0 * 6.28318;
float n_out31p0 = cos(n_out38p0);
float n_out32p0 = sin(n_out38p0);
vec3 n_out34p0 = vec3(n_out31p0, -(n_out32p0), 0.00000);
vec3 n_out35p0 = vec3(n_out32p0, n_out31p0, 0.00000);
vec3 n_in36p2 = vec3(0.00000, 0.00000, 0.00000);
mat4 n_out36p0 = mat4(vec4(n_out34p0, 0.0), vec4(n_out35p0, 0.0), vec4(n_in36p2, 0.0), vec4(n_in36p2, 1.0));
vec2 n_in40p1 = vec2(0.50000, 0.50000);
vec2 n_out40p0 = fract(n_out21p0) - n_in40p1;
vec3 n_out37p0 = (n_out36p0 * vec4(vec3(n_out40p0, 0.0), 1.0)).xyz;
vec2 n_out41p0 = vec2(n_out37p0.xy) + n_in40p1;
float n_out76p0 = mix(2.00000, 0.50000, float(rm_n_out75p0));
int n_out71p0;
if (n_out44p0 > n_out76p0) {
n_out71p0 = 1;
} else {
n_out71p0 = 0;
}
int n_out59p0 = n_out71p0 * -2;
int n_out61p0 = n_out59p0 + 1;
vec2 n_out58p0 = vec2(1.00000, float(n_out61p0));
vec2 n_out60p0 = vec2(0.00000, float(n_out71p0));
return fma(n_out41p0, n_out58p0, n_out60p0);
}
"""
func _get_code(input_vars, output_vars, mode, type):
return output_vars[0] + " = tileMe(%s, %s, %s, %s, %s);" % [input_vars[0], input_vars[1], input_vars[2], input_vars[3], input_vars[4]]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment