mirror of
https://github.com/DigvijaysinhGohil/Godot-Shader-Lib.git
synced 2025-09-20 04:15:58 +08:00
ShaderInc files refactored for the ease of future improvements
This commit is contained in:
@ -52,8 +52,7 @@ func _get_output_port_type(port: int) -> VisualShaderNode.PortType:
|
||||
return PORT_TYPE_SCALAR
|
||||
|
||||
func _get_global_code(mode: Shader.Mode) -> String:
|
||||
var code: String = preload("GradientNoise.gdshaderinc").code
|
||||
return code
|
||||
return "#include \"res://addons/ShaderLib/Procedural/Procedural.gdshaderinc\""
|
||||
|
||||
func _get_code(input_vars: Array[String], output_vars: Array[String], mode: Shader.Mode, type: VisualShader.Type) -> String:
|
||||
var uv: String = "UV"
|
||||
|
@ -1,28 +0,0 @@
|
||||
vec2 gradient_modulo(vec2 divident, vec2 divisor){
|
||||
vec2 _positive_divident = mod(divident, divisor) + divisor;
|
||||
return mod(_positive_divident, divisor);
|
||||
}
|
||||
|
||||
vec2 gradient_random(vec2 uv){
|
||||
uv = vec2(dot(uv, vec2(127.1,311.7)), dot(uv, vec2(269.5,183.3)));
|
||||
return -1.0 + 2.0 * fract(sin(uv) * 43758.5453123);
|
||||
}
|
||||
|
||||
float gradient_noise(vec2 uv, float scale) {
|
||||
uv = uv * float(scale);
|
||||
vec2 _period = vec2(30.0, 60.0);
|
||||
vec2 _cells_minimum = floor(uv);
|
||||
vec2 _cells_maximum = ceil(uv);
|
||||
vec2 _uv_fract = fract(uv);
|
||||
_cells_minimum = gradient_modulo(_cells_minimum, _period);
|
||||
_cells_maximum = gradient_modulo(_cells_maximum, _period);
|
||||
vec2 _blur = smoothstep(0.0, 1.0, _uv_fract);
|
||||
vec2 _lowerLeftDirection = gradient_random(vec2(_cells_minimum.x, _cells_minimum.y));
|
||||
vec2 _lowerRightDirection = gradient_random(vec2(_cells_maximum.x, _cells_minimum.y));
|
||||
vec2 _upperLeftDirection = gradient_random(vec2(_cells_minimum.x, _cells_maximum.y));
|
||||
vec2 _upperRightDirection = gradient_random(vec2(_cells_maximum.x, _cells_maximum.y));
|
||||
vec2 _fraction = fract(uv);
|
||||
float _mix_one = mix(dot(_lowerLeftDirection, _fraction - vec2(0, 0)), dot(_lowerRightDirection, _fraction - vec2(1, 0)), _blur.x);
|
||||
float _mix_two = mix(dot(_upperLeftDirection, _fraction - vec2(0, 1)), dot(_upperRightDirection, _fraction - vec2(1, 1)), _blur.x);
|
||||
return mix(_mix_one, _mix_two, _blur.y) * 0.8 + 0.5;
|
||||
}
|
@ -62,8 +62,7 @@ func _get_output_port_type(port: int) -> PortType:
|
||||
return PORT_TYPE_SCALAR
|
||||
|
||||
func _get_global_code(mode: Shader.Mode) -> String:
|
||||
var code: String = preload("GyroidNoise.gdshaderinc").code
|
||||
return code
|
||||
return "#include \"res://addons/ShaderLib/Procedural/Procedural.gdshaderinc\""
|
||||
|
||||
func _get_code(input_vars: Array[String], output_vars: Array[String], mode: Shader.Mode, type: VisualShader.Type) -> String:
|
||||
var uv: String = "UV"
|
||||
|
@ -1,7 +0,0 @@
|
||||
float gyroid_noise(vec2 uv, float scale, vec2 ratio, float height, float thickness) {
|
||||
scale *= 10.;
|
||||
thickness = clamp(thickness, 0., 1.);
|
||||
vec3 vector = vec3(uv, height);
|
||||
vector *= scale;
|
||||
return abs(dot(sin(vector * ratio.x), cos(vector.zxy * ratio.y))) - thickness;
|
||||
}
|
@ -42,4 +42,4 @@ func _get_output_port_type(port: int) -> PortType:
|
||||
return PORT_TYPE_SCALAR
|
||||
|
||||
func _get_code(input_vars: Array[String], output_vars: Array[String], mode: Shader.Mode, type: VisualShader.Type) -> String:
|
||||
return output_vars[0] + " = fract(sin(dot(UV.xy + vec2(%s), vec2(12.9898,78.233))) * 43758.5453123);" % input_vars[0]
|
||||
return output_vars[0] + " = pseudo_random_noise(UV, %s);" % input_vars[0]
|
||||
|
@ -56,8 +56,7 @@ func _get_output_port_type(port: int) -> VisualShaderNode.PortType:
|
||||
return PORT_TYPE_SCALAR
|
||||
|
||||
func _get_global_code(mode: Shader.Mode) -> String:
|
||||
var code: String = preload("SimpleNoise.gdshaderinc").code
|
||||
return code
|
||||
return "#include \"res://addons/ShaderLib/Procedural/Procedural.gdshaderinc\""
|
||||
|
||||
func _get_code(input_vars: Array[String], output_vars: Array[String], mode: Shader.Mode, type: VisualShader.Type) -> String:
|
||||
var uv: String = "UV"
|
||||
|
@ -1,33 +0,0 @@
|
||||
float simple_noise_random(vec2 point) {
|
||||
return fract(sin(point.x * 100. + point.y * 654.125) * 55647.8745);
|
||||
}
|
||||
|
||||
float value_noise(vec2 uv) {
|
||||
vec2 grid_uv = fract(uv);
|
||||
vec2 grid_id = floor(uv);
|
||||
grid_uv = grid_uv * grid_uv * (3. - 2. * grid_uv);
|
||||
|
||||
float bottom_left = simple_noise_random(grid_id);
|
||||
float bottom_right = simple_noise_random(grid_id + vec2(1, 0));
|
||||
float bottom = mix(bottom_left, bottom_right, grid_uv.x);
|
||||
|
||||
float top_left = simple_noise_random(grid_id + vec2(0, 1));
|
||||
float top_right = simple_noise_random(grid_id + vec2(1, 1));
|
||||
float top = mix(top_left, top_right, grid_uv.x);
|
||||
|
||||
return mix(bottom, top, grid_uv.y);
|
||||
}
|
||||
|
||||
float simple_noise(vec2 uv, float scale, int octaves) {
|
||||
octaves = clamp(octaves, 1, 6);
|
||||
float noise = value_noise(uv * scale);
|
||||
float amplitude = 1.;
|
||||
|
||||
for(int i = 1; i < octaves; i++) {
|
||||
scale *= 2.;
|
||||
amplitude /= 2.;
|
||||
noise += value_noise(uv * scale) * amplitude;
|
||||
}
|
||||
|
||||
return noise / 2.;
|
||||
}
|
@ -101,8 +101,7 @@ func _get_property_options(index: int) -> PackedStringArray:
|
||||
return ["Euclidean", "Manhattan", "Chebyshev"]
|
||||
|
||||
func _get_global_code(mode: Shader.Mode) -> String:
|
||||
var code: String = preload("Voronoi.gdshaderinc").code
|
||||
return code
|
||||
return "#include \"res://addons/ShaderLib/Procedural/Procedural.gdshaderinc\""
|
||||
|
||||
func _get_code(input_vars: Array[String], output_vars: Array[String], mode: Shader.Mode, type: VisualShader.Type) -> String:
|
||||
var uv: String = "UV"
|
||||
|
@ -1,43 +0,0 @@
|
||||
#include "res://addons/ShaderLib/Maths/Vector/Distance/Manhattan2D.gdshaderinc"
|
||||
#include "res://addons/ShaderLib/Maths/Vector/Distance/Chebyshev2D.gdshaderinc"
|
||||
|
||||
vec2 voronoi_random_vector(vec2 p) {
|
||||
mat2 matrix = mat2(vec2(15.27, 47.63), vec2(99.41, 89.98));
|
||||
return fract(sin(p * matrix) * 46839.32);
|
||||
}
|
||||
|
||||
void voronoi_noise(vec2 uv, float cell_density, float angle_offset, int distance_index, float chebyshev_power, out float output, out float cells){
|
||||
vec2 grid_uv = fract(uv * cell_density);
|
||||
vec2 grid_id = floor(uv * cell_density);
|
||||
vec2 cell_id = vec2(0);
|
||||
float min_dist = 100.;
|
||||
|
||||
for(float y = -1.; y <= 1.; y++) {
|
||||
for(float x = -1.; x <= 1.; x++) {
|
||||
vec2 offset = vec2(x, y);
|
||||
vec2 n = voronoi_random_vector(grid_id + offset);
|
||||
vec2 p = offset + vec2(sin(n.x + angle_offset) * .5 + .5, cos(n.y + angle_offset) * .5 + .5);
|
||||
float d = min_dist;
|
||||
|
||||
switch(distance_index){
|
||||
case 1:
|
||||
d = manhattan_distance_2d(grid_uv, p);
|
||||
break;
|
||||
case 2:
|
||||
d = chebyshev_distance_2d(grid_uv, p, chebyshev_power);
|
||||
break;
|
||||
default:
|
||||
d = distance(grid_uv, p);
|
||||
break;
|
||||
}
|
||||
|
||||
if(d < min_dist) {
|
||||
min_dist = d;
|
||||
cell_id = voronoi_random_vector(grid_id + offset);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
output = min_dist;
|
||||
cells = cell_id.y;
|
||||
}
|
Reference in New Issue
Block a user