mirror of
https://github.com/DigvijaysinhGohil/Godot-Shader-Lib.git
synced 2025-09-20 12:25:59 +08:00
ShaderInc files refactored for the ease of future improvements
This commit is contained in:
@ -1,9 +1,6 @@
|
||||
@tool
|
||||
class_name VisualShaderNodeUVFlipbook extends VisualShaderNodeCustom
|
||||
|
||||
func _init() -> void:
|
||||
set_output_port_for_preview(0)
|
||||
|
||||
func _get_name() -> String:
|
||||
return "Flipbook"
|
||||
|
||||
@ -60,8 +57,7 @@ func _get_output_port_type(port: int) -> VisualShaderNode.PortType:
|
||||
return PORT_TYPE_VECTOR_2D
|
||||
|
||||
func _get_global_code(mode: Shader.Mode) -> String:
|
||||
var code: String = preload("FlipbookUV.gdshaderinc").code
|
||||
return code
|
||||
return "#include \"res://addons/ShaderLib/UV/UV.gdshaderinc\""
|
||||
|
||||
func _is_available(mode: Shader.Mode, type: VisualShader.Type) -> bool:
|
||||
match mode:
|
||||
|
@ -1,16 +0,0 @@
|
||||
vec2 flipbook_uv(vec2 uv, int rows, int columns, float anim_speed){
|
||||
int start_frame = 1;
|
||||
int end_frame = rows * columns;
|
||||
start_frame += int(fract(TIME * anim_speed) * float(end_frame));
|
||||
float _frame = float(clamp(start_frame, 0, end_frame));
|
||||
vec2 _off_per_frame = vec2((1.0 / float(columns)), (1.0 / float(rows)));
|
||||
vec2 _sprite_size = vec2(uv.x / float(columns), uv.y / float(rows));
|
||||
vec2 _current_sprite = vec2(0.0, 1.0 - _off_per_frame.y);
|
||||
_current_sprite.x += _frame * _off_per_frame.x;
|
||||
float _row_index;
|
||||
float _mod = modf(_frame / float(columns), _row_index);
|
||||
_current_sprite.y -= 1.0 - (_row_index * _off_per_frame.y);
|
||||
_current_sprite.x -= _row_index * float(columns) * _off_per_frame.x;
|
||||
vec2 _sprite_uv = (_sprite_size + _current_sprite);
|
||||
return _sprite_uv;
|
||||
}
|
@ -55,8 +55,7 @@ func _is_available(mode: Shader.Mode, type: VisualShader.Type) -> bool:
|
||||
return false
|
||||
|
||||
func _get_global_code(mode: Shader.Mode) -> String:
|
||||
var code: String = preload("ParallaxMappingUV.gdshaderinc").code
|
||||
return code
|
||||
return "#include \"res://addons/ShaderLib/UV/UV.gdshaderinc\""
|
||||
|
||||
func _get_code(input_vars: Array[String], output_vars: Array[String], mode: Shader.Mode, type: VisualShader.Type) -> String:
|
||||
var height_map: String = input_vars[0]
|
||||
|
@ -1,17 +0,0 @@
|
||||
vec2 parallax_mapping_uv_offset_1_step(float height, float amplitude, vec3 view_dir_tangent)
|
||||
{
|
||||
height = height * amplitude - amplitude / 2.0;
|
||||
vec3 _vector = view_dir_tangent;
|
||||
_vector.y += 0.42;
|
||||
return height * (_vector.xz / _vector.y);
|
||||
}
|
||||
|
||||
vec2 parallax_mapping_uv(sampler2D height, float amplitude, vec2 uv, vec3 tangent, vec3 normal, vec3 binormal, vec3 view)
|
||||
{
|
||||
float depth = amplitude / 10.0;
|
||||
mat3 _tangent_matrix = mat3(tangent, normal, -binormal); // VIEW TO TANGENT SPACE
|
||||
vec3 _view_tangent = transpose(_tangent_matrix) * view;
|
||||
float _parallaxHeight = texture(height, uv).r;
|
||||
vec2 _parallaxOffset = parallax_mapping_uv_offset_1_step(_parallaxHeight, depth, _view_tangent);
|
||||
return _parallaxOffset + uv;
|
||||
}
|
@ -1,9 +1,6 @@
|
||||
@tool
|
||||
class_name VisualShaderNodeUVRadialShear extends VisualShaderNodeCustom
|
||||
|
||||
func _init() -> void:
|
||||
set_output_port_for_preview(0)
|
||||
|
||||
func _get_name() -> String:
|
||||
return "RadialShear"
|
||||
|
||||
@ -60,8 +57,7 @@ func _get_output_port_type(port: int) -> VisualShaderNode.PortType:
|
||||
return PORT_TYPE_VECTOR_2D
|
||||
|
||||
func _get_global_code(mode: Shader.Mode) -> String:
|
||||
var code: String = preload("RadialShearUV.gdshaderinc").code
|
||||
return code
|
||||
return "#include \"res://addons/ShaderLib/UV/UV.gdshaderinc\""
|
||||
|
||||
func _get_code(input_vars: Array[String], output_vars: Array[String], mode: Shader.Mode, type: VisualShader.Type) -> String:
|
||||
var uv: String
|
||||
|
@ -1,6 +0,0 @@
|
||||
vec2 radial_shear_uv(vec2 uv, vec2 center, float strength, vec2 offset){
|
||||
vec2 _delta = uv - center;
|
||||
float _delta2 = dot(_delta.xy, _delta.xy);
|
||||
vec2 _delta_offset = vec2(_delta2 * strength);
|
||||
return uv + vec2(_delta.y, -_delta.x) * _delta_offset + offset;
|
||||
}
|
@ -1,9 +1,6 @@
|
||||
@tool
|
||||
class_name VisualShaderNodeUVRotate extends VisualShaderNodeCustom
|
||||
|
||||
func _init() -> void:
|
||||
set_output_port_for_preview(0)
|
||||
|
||||
func _get_name() -> String:
|
||||
return "Rotate"
|
||||
|
||||
@ -68,8 +65,7 @@ func _get_property_options(index: int) -> PackedStringArray:
|
||||
return ["Degrees", "Radians"]
|
||||
|
||||
func _get_global_code(mode: Shader.Mode) -> String:
|
||||
var code: String = preload("RotateUV.gdshaderinc").code
|
||||
return code
|
||||
return "#include \"res://addons/ShaderLib/UV/UV.gdshaderinc\""
|
||||
|
||||
func _get_code(input_vars: Array[String], output_vars: Array[String], mode: Shader.Mode, type: VisualShader.Type) -> String:
|
||||
var uv: String
|
||||
|
@ -1,13 +0,0 @@
|
||||
vec2 rotate_uv(vec2 uv, vec2 center, float rotation, bool use_degrees){
|
||||
float _angle = rotation;
|
||||
if(use_degrees){
|
||||
_angle = rotation * (3.1415926/180.0);
|
||||
}
|
||||
mat2 _rotation = mat2(
|
||||
vec2(cos(_angle), -sin(_angle)),
|
||||
vec2(sin(_angle), cos(_angle))
|
||||
);
|
||||
vec2 _delta = uv - center;
|
||||
_delta = _rotation * _delta;
|
||||
return _delta + center;
|
||||
}
|
@ -1,9 +1,6 @@
|
||||
@tool
|
||||
class_name VisualShaderNodeUVSpherize extends VisualShaderNodeCustom
|
||||
|
||||
func _init() -> void:
|
||||
set_output_port_for_preview(0)
|
||||
|
||||
func _get_name() -> String:
|
||||
return "Spherize"
|
||||
|
||||
@ -60,8 +57,7 @@ func _get_output_port_type(port: int) -> VisualShaderNode.PortType:
|
||||
return PORT_TYPE_VECTOR_2D
|
||||
|
||||
func _get_global_code(mode: Shader.Mode) -> String:
|
||||
var code: String = preload("SpherizeUV.gdshaderinc").code
|
||||
return code
|
||||
return "#include \"res://addons/ShaderLib/UV/UV.gdshaderinc\""
|
||||
|
||||
func _get_code(input_vars: Array[String], output_vars: Array[String], mode: Shader.Mode, type: VisualShader.Type) -> String:
|
||||
var uv: String
|
||||
|
@ -1,7 +0,0 @@
|
||||
vec2 spherize_uv(vec2 uv, vec2 center, float strength, vec2 offset){
|
||||
vec2 _delta = uv - center;
|
||||
float _delta2 = dot(_delta.xy, _delta.xy);
|
||||
float _delta4 = _delta2 * _delta2;
|
||||
vec2 _delta_offset = vec2(_delta4 * strength);
|
||||
return uv + _delta * _delta_offset + offset;
|
||||
}
|
@ -1,9 +1,6 @@
|
||||
@tool
|
||||
class_name VisualShaderNodeUVSwirl extends VisualShaderNodeCustom
|
||||
|
||||
func _init() -> void:
|
||||
output_port_for_preview = 0
|
||||
|
||||
func _get_name() -> String:
|
||||
return "Swirl"
|
||||
|
||||
@ -60,8 +57,7 @@ func _get_output_port_type(port: int) -> VisualShaderNode.PortType:
|
||||
return PORT_TYPE_VECTOR_2D
|
||||
|
||||
func _get_global_code(mode: Shader.Mode) -> String:
|
||||
var code: String = preload("SwirlUV.gdshaderinc").code
|
||||
return code
|
||||
return "#include \"res://addons/ShaderLib/UV/UV.gdshaderinc\""
|
||||
|
||||
func _get_code(input_vars: Array[String], output_vars: Array[String], mode: Shader.Mode, type: VisualShader.Type) -> String:
|
||||
var uv: String
|
||||
|
@ -1,10 +0,0 @@
|
||||
vec2 swirl_uv(vec2 uv, vec2 center, float strength, vec2 offset){
|
||||
vec2 _delta = uv - center;
|
||||
float _angle = strength * max(pow(1. - length(_delta), 3), 0);
|
||||
mat2 _rotation = mat2(
|
||||
vec2(cos(_angle), -sin(_angle)),
|
||||
vec2(sin(_angle), cos(_angle))
|
||||
);
|
||||
_delta = _rotation * _delta;
|
||||
return _delta + center;
|
||||
}
|
@ -1,9 +1,6 @@
|
||||
@tool
|
||||
class_name VisualShaderNodeUVTilingAndOffset extends VisualShaderNodeCustom
|
||||
|
||||
func _init() -> void:
|
||||
output_port_for_preview = 0
|
||||
|
||||
func _get_name() -> String:
|
||||
return "TilingAndOffset"
|
||||
|
||||
|
@ -1,9 +1,6 @@
|
||||
@tool
|
||||
class_name VisualShaderNodeUVTwirl extends VisualShaderNodeCustom
|
||||
|
||||
func _init() -> void:
|
||||
output_port_for_preview = 0
|
||||
|
||||
func _get_name() -> String:
|
||||
return "Twirl"
|
||||
|
||||
@ -60,8 +57,7 @@ func _get_output_port_type(port: int) -> VisualShaderNode.PortType:
|
||||
return PORT_TYPE_VECTOR_2D
|
||||
|
||||
func _get_global_code(mode: Shader.Mode) -> String:
|
||||
var code: String = preload("TwirlUV.gdshaderinc").code
|
||||
return code
|
||||
return "#include \"res://addons/ShaderLib/UV/UV.gdshaderinc\""
|
||||
|
||||
func _get_code(input_vars: Array[String], output_vars: Array[String], mode: Shader.Mode, type: VisualShader.Type) -> String:
|
||||
var uv: String
|
||||
|
@ -1,10 +0,0 @@
|
||||
vec2 twirl_uv(vec2 uv, vec2 center, float strength, vec2 offset){
|
||||
vec2 _delta = uv - center;
|
||||
float _angle = strength * length(_delta);
|
||||
mat2 _rotation = mat2(
|
||||
vec2(cos(_angle), -sin(_angle)),
|
||||
vec2(sin(_angle), cos(_angle))
|
||||
);
|
||||
_delta = _rotation * _delta;
|
||||
return _delta + center;
|
||||
}
|
85
addons/ShaderLib/UV/UV.gdshaderinc
Normal file
85
addons/ShaderLib/UV/UV.gdshaderinc
Normal file
@ -0,0 +1,85 @@
|
||||
vec2 flipbook_uv(vec2 uv, int rows, int columns, float anim_speed){
|
||||
int start_frame = 1;
|
||||
int end_frame = rows * columns;
|
||||
start_frame += int(fract(TIME * anim_speed) * float(end_frame));
|
||||
float _frame = float(clamp(start_frame, 0, end_frame));
|
||||
vec2 _off_per_frame = vec2((1.0 / float(columns)), (1.0 / float(rows)));
|
||||
vec2 _sprite_size = vec2(uv.x / float(columns), uv.y / float(rows));
|
||||
vec2 _current_sprite = vec2(0.0, 1.0 - _off_per_frame.y);
|
||||
_current_sprite.x += _frame * _off_per_frame.x;
|
||||
float _row_index;
|
||||
float _mod = modf(_frame / float(columns), _row_index);
|
||||
_current_sprite.y -= 1.0 - (_row_index * _off_per_frame.y);
|
||||
_current_sprite.x -= _row_index * float(columns) * _off_per_frame.x;
|
||||
vec2 _sprite_uv = (_sprite_size + _current_sprite);
|
||||
return _sprite_uv;
|
||||
}
|
||||
|
||||
vec2 parallax_mapping_uv_offset_1_step(float height, float amplitude, vec3 view_dir_tangent)
|
||||
{
|
||||
height = height * amplitude - amplitude / 2.0;
|
||||
vec3 _vector = view_dir_tangent;
|
||||
_vector.y += 0.42;
|
||||
return height * (_vector.xz / _vector.y);
|
||||
}
|
||||
|
||||
vec2 parallax_mapping_uv(sampler2D height, float amplitude, vec2 uv, vec3 tangent, vec3 normal, vec3 binormal, vec3 view)
|
||||
{
|
||||
float depth = amplitude / 10.0;
|
||||
mat3 _tangent_matrix = mat3(tangent, normal, -binormal); // VIEW TO TANGENT SPACE
|
||||
vec3 _view_tangent = transpose(_tangent_matrix) * view;
|
||||
float _parallaxHeight = texture(height, uv).r;
|
||||
vec2 _parallaxOffset = parallax_mapping_uv_offset_1_step(_parallaxHeight, depth, _view_tangent);
|
||||
return _parallaxOffset + uv;
|
||||
}
|
||||
|
||||
vec2 radial_shear_uv(vec2 uv, vec2 center, float strength, vec2 offset){
|
||||
vec2 _delta = uv - center;
|
||||
float _delta2 = dot(_delta.xy, _delta.xy);
|
||||
vec2 _delta_offset = vec2(_delta2 * strength);
|
||||
return uv + vec2(_delta.y, -_delta.x) * _delta_offset + offset;
|
||||
}
|
||||
|
||||
vec2 rotate_uv(vec2 uv, vec2 center, float rotation, bool use_degrees){
|
||||
float _angle = rotation;
|
||||
if(use_degrees){
|
||||
_angle = rotation * (3.1415926/180.0);
|
||||
}
|
||||
mat2 _rotation = mat2(
|
||||
vec2(cos(_angle), -sin(_angle)),
|
||||
vec2(sin(_angle), cos(_angle))
|
||||
);
|
||||
vec2 _delta = uv - center;
|
||||
_delta = _rotation * _delta;
|
||||
return _delta + center;
|
||||
}
|
||||
|
||||
vec2 spherize_uv(vec2 uv, vec2 center, float strength, vec2 offset){
|
||||
vec2 _delta = uv - center;
|
||||
float _delta2 = dot(_delta.xy, _delta.xy);
|
||||
float _delta4 = _delta2 * _delta2;
|
||||
vec2 _delta_offset = vec2(_delta4 * strength);
|
||||
return uv + _delta * _delta_offset + offset;
|
||||
}
|
||||
|
||||
vec2 swirl_uv(vec2 uv, vec2 center, float strength, vec2 offset){
|
||||
vec2 _delta = uv - center;
|
||||
float _angle = strength * max(pow(1. - length(_delta), 3), 0);
|
||||
mat2 _rotation = mat2(
|
||||
vec2(cos(_angle), -sin(_angle)),
|
||||
vec2(sin(_angle), cos(_angle))
|
||||
);
|
||||
_delta = _rotation * _delta;
|
||||
return _delta + center;
|
||||
}
|
||||
|
||||
vec2 twirl_uv(vec2 uv, vec2 center, float strength, vec2 offset){
|
||||
vec2 _delta = uv - center;
|
||||
float _angle = strength * length(_delta);
|
||||
mat2 _rotation = mat2(
|
||||
vec2(cos(_angle), -sin(_angle)),
|
||||
vec2(sin(_angle), cos(_angle))
|
||||
);
|
||||
_delta = _rotation * _delta;
|
||||
return _delta + center;
|
||||
}
|
Reference in New Issue
Block a user