shader_type spatial; // Rokojori Shader @alb.382-alp.376-fad.447-geo.20-met.376-nor.278-occ.376-rou.390-sha.391-spa.20-spa.24-spe.376-tra.402-tra.402-uvm.491: /* [ Rokojori.TransparencyModule ] { "alphaScissorTreshold":0.009999999776482582, "blendMode":{"__class__": "Godot.BaseMaterial3D+BlendModeEnum","value__": 1}, "cullMode":{"__class__": "Godot.BaseMaterial3D+CullModeEnum","value__": 0}, "depthDraw":{"__class__": "Godot.BaseMaterial3D+DepthDrawModeEnum","value__": 0}, "noDepthTest":false, "transparency":{"__class__": "Godot.BaseMaterial3D+TransparencyEnum","value__": 1} } [ Rokojori.ShadingModule ] { "diffuseMode":{"__class__": "Godot.BaseMaterial3D+DiffuseModeEnum","value__": 0}, "disableAmbientLight":false, "disableFog":false, "disableReceivingShadows":false, "shadingMode":{"__class__": "Godot.BaseMaterial3D+ShadingModeEnum","value__": 0}, "shadowToOpacity":false, "specularMode":{"__class__": "Godot.BaseMaterial3D+SpecularModeEnum","value__": 0}, "wireFrameMode":false } [ Rokojori.UVModule ] { "channels":[{ "__class__": "Rokojori.UVChannel", "uvTarget": "UV", "uvSource": { "__class__": "Rokojori.MeshUVSource", "meshUV": 0, "sortableCode": true, "uniformGroup": "UVChannels" }, "modifier": { "__class__": "Rokojori.UVScaleOffset", "uvScale": true, "uvUniScale": false, "uvOffset": true, "uvScrolling": true, "sortableCode": true, "uniformGroup": "UVChannels" }, "sortableCode": true, "uniformGroup": "UVChannels"}] } [ Rokojori.GeometryModule ] { "modifiers":[] } [ Rokojori.SpatialVarying ] { "variables":[] } [ Rokojori.SpatialMasksModule ] { "maskVariables":[] } [ Rokojori.AlbedoModule ] { "assignmentType":{"__class__": "Rokojori.TextureModule+AssignmentType","value__": 0}, "filter":{"__class__": "Rokojori.TextureModule+TextureFilter","value__": 5}, "overlayLayers":[], "repeat":true, "srgb":true, "textureDefault":{"__class__": "Rokojori.TextureModule+TextureDefault","value__": 0}, "tintVarying":"", "useTint":true, "uvChannel":"UV", "writeAlpha":false } [ Rokojori.TransparencyModule ] { "alphaScissorTreshold":0.009999999776482582, "blendMode":{"__class__": "Godot.BaseMaterial3D+BlendModeEnum","value__": 1}, "cullMode":{"__class__": "Godot.BaseMaterial3D+CullModeEnum","value__": 0}, "depthDraw":{"__class__": "Godot.BaseMaterial3D+DepthDrawModeEnum","value__": 0}, "noDepthTest":false, "transparency":{"__class__": "Godot.BaseMaterial3D+TransparencyEnum","value__": 1} } [ Rokojori.AlphaModule ] { "assignmentType":{"__class__": "Rokojori.TextureModule+AssignmentType","value__": 0}, "domainMode":{"__class__": "Rokojori.TextureModule+DomainMode","value__": 2}, "filter":{"__class__": "Rokojori.TextureModule+TextureFilter","value__": 5}, "repeat":true, "textureDefault":{"__class__": "Rokojori.TextureModule+TextureDefault","value__": 0}, "uvChannel":"UV" } [ Rokojori.FadingModule ] { "alphaFadeMode":{"__class__": "Rokojori.AlphaFadeMode","value__": 1}, "fadingModifiers":[{ "__class__": "Rokojori.FresnelFading", "advancedControls": true, "alphaFadeMode": 0, "createUniformGroup": false, "sortableCode": true, "uniformGroup": null},{ "__class__": "Rokojori.FresnelFading", "advancedControls": true, "alphaFadeMode": 0, "createUniformGroup": false, "sortableCode": true, "uniformGroup": null}] } [ Rokojori.NormalMapModule ] { "allowNegativeStrength":false, "filter":{"__class__": "Rokojori.TextureModule+TextureFilter","value__": 5}, "maximumStrength":5, "repeat":true, "textureDefault":{"__class__": "Rokojori.TextureModule+TextureDefault","value__": 0}, "useStrength":true, "uvChannel":"UV" } [ Rokojori.OcclusionModule ] { "assignmentType":{"__class__": "Rokojori.TextureModule+AssignmentType","value__": 0}, "domainMode":{"__class__": "Rokojori.TextureModule+DomainMode","value__": 3}, "filter":{"__class__": "Rokojori.TextureModule+TextureFilter","value__": 5}, "repeat":true, "textureDefault":{"__class__": "Rokojori.TextureModule+TextureDefault","value__": 0}, "uvChannel":"UV" } [ Rokojori.RoughnessModule ] { "assignmentType":{"__class__": "Rokojori.TextureModule+AssignmentType","value__": 0}, "clamp":true, "domainMode":{"__class__": "Rokojori.TextureModule+DomainMode","value__": 3}, "filter":{"__class__": "Rokojori.TextureModule+TextureFilter","value__": 5}, "repeat":true, "textureDefault":{"__class__": "Rokojori.TextureModule+TextureDefault","value__": 0}, "uvChannel":"UV" } [ Rokojori.MetallicModule ] { "assignmentType":{"__class__": "Rokojori.TextureModule+AssignmentType","value__": 0}, "domainMode":{"__class__": "Rokojori.TextureModule+DomainMode","value__": 3}, "filter":{"__class__": "Rokojori.TextureModule+TextureFilter","value__": 5}, "repeat":true, "textureDefault":{"__class__": "Rokojori.TextureModule+TextureDefault","value__": 0}, "uvChannel":"UV" } [ Rokojori.SpecularModule ] { "assignmentType":{"__class__": "Rokojori.TextureModule+AssignmentType","value__": 0}, "domainMode":{"__class__": "Rokojori.TextureModule+DomainMode","value__": 0}, "filter":{"__class__": "Rokojori.TextureModule+TextureFilter","value__": 5}, "repeat":true, "textureDefault":{"__class__": "Rokojori.TextureModule+TextureDefault","value__": 0}, "uvChannel":"UV" } */ render_mode blend_add, cull_back, depth_draw_opaque, unshaded, diffuse_burley, specular_schlick_ggx; #include "res://addons/rokojori_action_library/Runtime/Shading/Library/Noise.gdshaderinc" #include "res://addons/rokojori_action_library/Runtime/Shading/Library/Light.gdshaderinc" #include "res://addons/rokojori_action_library/Runtime/Shading/Library/Math.gdshaderinc" // [ U V C H A N N E L S . U V ] group_uniforms UVChannels.UV; uniform vec2 UV_scale = vec2( 1.0, 1.0); uniform vec2 UV_offset = vec2( 0.0, 0.0); uniform vec2 UV_scrolling = vec2( 0.0, 0.0); // [ A L B E D O ] group_uniforms albedo; uniform vec4 albedo:source_color = vec4( 1.0, 1.0, 1.0, 1.0); uniform sampler2D albedoTexture:source_color, hint_default_white, repeat_enable, filter_linear_mipmap_anisotropic; // [ A L P H A ] group_uniforms alpha; uniform float alpha:hint_range( 0.0, 1.0) = 1.0; uniform sampler2D alphaTexture:hint_default_white, repeat_enable, filter_linear_mipmap_anisotropic; // [ F A D I N G ] group_uniforms Fading; uniform float advancedFresnelFadingZOffset = 0.0f; uniform float advancedFresnelFadingPower = 1.0f; uniform float advancedFresnelFadingPostScale = 1.0f; uniform float advancedFresnelFadingPostOffset = 0.0f; uniform bool advancedFresnelFadingInverse = false; uniform float advancedFresnelFadingZOffset_2 = 0.0f; uniform float advancedFresnelFadingPower_2 = 1.0f; uniform float advancedFresnelFadingPostScale_2 = 1.0f; uniform float advancedFresnelFadingPostOffset_2 = 0.0f; uniform bool advancedFresnelFadingInverse_2 = false; // [ N O R M A L ] group_uniforms normal; uniform float normalStrength:hint_range( 0.0, 5.0) = 1.0; uniform sampler2D normalTexture:hint_normal, repeat_enable, filter_linear_mipmap_anisotropic; // [ O C C L U S I O N ] group_uniforms occlusion; uniform float occlusion:hint_range( 0.0, 1.0) = 1.0; uniform float occlusionOffset:hint_range( -1.0, 1.0) = 0.0; uniform sampler2D occlusionTexture:hint_default_white, repeat_enable, filter_linear_mipmap_anisotropic; // [ R O U G H N E S S ] group_uniforms roughness; uniform float roughness:hint_range( 0.0, 1.0) = 1.0; uniform float roughnessOffset:hint_range( -1.0, 1.0) = 0.0; uniform sampler2D roughnessTexture:hint_default_white, repeat_enable, filter_linear_mipmap_anisotropic; // [ M E T A L L I C ] group_uniforms metallic; uniform float metallic:hint_range( 0.0, 1.0) = 0.0; uniform float metallicOffset:hint_range( -1.0, 1.0) = 0.0; uniform sampler2D metallicTexture:hint_default_white, repeat_enable, filter_linear_mipmap_anisotropic; // [ S P E C U L A R ] group_uniforms specular; uniform float specular:hint_range( 0.0, 1.0) = 0.5; void vertex() { UV = UV; UV = UV * UV_scale + UV_offset + TIME * UV_scrolling; } void fragment() { vec4 sampledAlbedo = texture( albedoTexture, UV ); ALBEDO = sampledAlbedo.rgb * albedo.rgb; vec4 sampledAlpha = texture( alphaTexture, UV ); ALPHA = sampledAlpha.r * alpha; float advancedFresnelFadingAlpha = clamp01( fresnelNormalizedFromViewAdvanced( NORMAL, advancedFresnelFadingZOffset, advancedFresnelFadingPower, advancedFresnelFadingPostScale, advancedFresnelFadingPostOffset ) ); if ( ! advancedFresnelFadingInverse ) { advancedFresnelFadingAlpha = 1.0 - advancedFresnelFadingAlpha; } ALPHA *= advancedFresnelFadingAlpha; float advancedFresnelFadingAlpha_2 = clamp01( fresnelNormalizedFromViewAdvanced( NORMAL, advancedFresnelFadingZOffset_2, advancedFresnelFadingPower_2, advancedFresnelFadingPostScale_2, advancedFresnelFadingPostOffset_2 ) ); if ( ! advancedFresnelFadingInverse_2 ) { advancedFresnelFadingAlpha_2 = 1.0 - advancedFresnelFadingAlpha_2; } ALPHA *= advancedFresnelFadingAlpha_2; vec4 sampledNormal = texture( normalTexture, UV ); NORMAL_MAP = sampledNormal.rgb; NORMAL_MAP_DEPTH = normalStrength; vec4 sampledOcclusion = texture( occlusionTexture, UV ); AO = sampledOcclusion.r * occlusion + occlusionOffset; vec4 sampledRoughness = texture( roughnessTexture, UV ); ROUGHNESS = sampledRoughness.g * roughness + roughnessOffset; ROUGHNESS = clamp01( ROUGHNESS ); vec4 sampledMetallic = texture( metallicTexture, UV ); METALLIC = sampledMetallic.b * metallic + metallicOffset; }