Last active
October 24, 2024 00:41
-
-
Save hangy233/62b9e9c352f12b7f4030a6462eb90c80 to your computer and use it in GitHub Desktop.
tiler custom node
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 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