From b3d305bda54f1add22c2674e467f1244a09fa977 Mon Sep 17 00:00:00 2001 From: Jason0214 Date: Tue, 15 Jan 2019 22:29:15 -0800 Subject: [PATCH] format generated shader code better --- .../material_node_tree/exporters.py | 3 + .../material_node_tree/node_vistors.py | 108 +-- .../material_node_tree/shader_functions.py | 6 +- .../converters/material_node_tree/shaders.py | 97 +- .../material_cycle/material_anistropy.escn | 216 +++-- .../material_cycle/material_cycle.escn | 846 ++++++++++-------- .../material_cycle/material_normal.escn | 488 ++++++---- .../material_unpack_texture.escn | 39 +- 8 files changed, 1066 insertions(+), 737 deletions(-) diff --git a/io_scene_godot/converters/material_node_tree/exporters.py b/io_scene_godot/converters/material_node_tree/exporters.py index 11828b8..d4feb52 100644 --- a/io_scene_godot/converters/material_node_tree/exporters.py +++ b/io_scene_godot/converters/material_node_tree/exporters.py @@ -74,7 +74,10 @@ def traversal_tree_from_socket(shader, root_socket): cur_node = next_node visitor = find_node_visitor(shader, cur_node) + shader.append_comment_line("node: {}".format(cur_node.name)) + shader.append_comment_line("type: {}".format(cur_node.bl_idname)) visitor(shader, cur_node) + shader.append_empty_line() if stack: cur_node = stack.pop() diff --git a/io_scene_godot/converters/material_node_tree/node_vistors.py b/io_scene_godot/converters/material_node_tree/node_vistors.py index a2ae115..e785273 100644 --- a/io_scene_godot/converters/material_node_tree/node_vistors.py +++ b/io_scene_godot/converters/material_node_tree/node_vistors.py @@ -26,9 +26,43 @@ def _is_normal_texture(image_texture_node): return False +def _mix_fragment_bsdf(frag_shader, shader_node_a, shader_node_b, + output, fac): + for attribute_name in FragmentBSDFContainer.attribute_names_iterable(): + attr_a = shader_node_a.get_attribute(attribute_name) + attr_b = shader_node_b.get_attribute(attribute_name) + + if attribute_name == 'alpha': + # if one shader input has alpha, the other one should + # default to have alpha = 1.0 + if attr_a and not attr_b: + attr_b = Value('float', 1.0) + elif attr_b and not attr_a: + attr_a = Value('float', 1.0) + + if attr_a and attr_b: + attr_type = FragmentBSDFContainer.attribute_type( + attribute_name) + if attribute_name in ("normal", "tangent"): + # don't mix normal and tangent, use default + continue + mix_code_pattern = '{} = mix({}, {}, {});' + attr_mixed = frag_shader.define_variable( + attr_type, attribute_name + ) + frag_shader.append_code_line( + mix_code_pattern, + (attr_mixed, attr_a, attr_b, fac) + ) + output.set_attribute(attribute_name, attr_mixed) + elif attr_a: + output.set_attribute(attribute_name, attr_a) + elif attr_b: + output.set_attribute(attribute_name, attr_b) + + def visit_add_shader_node(shader, node): - """apply addition to albedo and it may have HDR, alpha is added with - its complementary, other attributes are averaged""" + """alpha is added with its complementary, other attributes are averaged""" output = FragmentBSDFContainer() shader_socket_a = node.inputs[0] @@ -43,34 +77,7 @@ def visit_add_shader_node(shader, node): else: in_shader_b = FragmentBSDFContainer.default() - for attr_name in FragmentBSDFContainer.attribute_names_iterable(): - attr_a = in_shader_a.get_attribute(attr_name) - attr_b = in_shader_b.get_attribute(attr_name) - - if attr_a and attr_b: - attr_type = FragmentBSDFContainer.attribute_type(attr_name) - if attr_name in ("normal", "tangent"): - # don't mix normal and tangent, use default - continue - elif attr_name == "alpha": - code_pattern = '{} = 1 - clamp(2 - {} - {}, 0.0, 1.0);' - elif attr_name == "albedo": - # HDR - code_pattern = ('{} = {} + {};') - else: - code_pattern = '{} = mix({}, {}, 0.5);' - added_attr = shader.define_variable( - attr_type, node.name + '_' + attr_name - ) - shader.append_code_line( - code_pattern, - (added_attr, attr_a, attr_b) - ) - output.set_attribute(attr_name, added_attr) - elif attr_a: - output.set_attribute(attr_name, attr_a) - elif attr_b: - output.set_attribute(attr_name, attr_b) + _mix_fragment_bsdf(shader, in_shader_a, in_shader_b, output, 0.5) shader.assign_variable_to_socket(node.outputs[0], output) @@ -95,34 +102,7 @@ def visit_mix_shader_node(shader, node): if in_shader_socket_b.is_linked: in_shader_b = shader.fetch_variable_from_socket(in_shader_socket_b) - for attribute_name in FragmentBSDFContainer.attribute_names_iterable(): - attr_a = in_shader_a.get_attribute(attribute_name) - attr_b = in_shader_b.get_attribute(attribute_name) - # if one shader input has alpha, the other one should default to have - # alpha = 1.0 - if attribute_name == 'alpha' and attr_a and not attr_b: - attr_b = Value('float', 1.0) - if attribute_name == 'alpha' and attr_b and not attr_a: - attr_a = Value('float', 1.0) - - if attr_a and attr_b: - attr_type = FragmentBSDFContainer.attribute_type(attribute_name) - if attribute_name in ("normal", "tangent"): - # don't mix normal and tangent, use default - continue - mix_code_pattern = '{} = mix({}, {}, {});' - attr_mixed = shader.define_variable( - attr_type, node.name + '_' + attribute_name - ) - shader.append_code_line( - mix_code_pattern, - (attr_mixed, attr_a, attr_b, in_fac) - ) - output.set_attribute(attribute_name, attr_mixed) - elif attr_a: - output.set_attribute(attribute_name, attr_a) - elif attr_b: - output.set_attribute(attribute_name, attr_b) + _mix_fragment_bsdf(shader, in_shader_a, in_shader_b, output, in_fac) shader.assign_variable_to_socket(node.outputs[0], output) @@ -153,7 +133,7 @@ def visit_bsdf_node(shader, node): for attr_name in function.out_sockets: var_type = FragmentBSDFContainer.attribute_type(attr_name) new_var = shader.define_variable( - var_type, node.name + '_output_' + attr_name + var_type, 'out_' + attr_name ) output.set_attribute(attr_name, new_var) @@ -227,7 +207,7 @@ def visit_bump_node(shader, node): in_arguments.append(Value('float', 0.0)) out_normal = shader.define_variable( - 'vec3', node.name + '_out_normal' + 'vec3', 'out_normal' ) shader.add_function_call(function, in_arguments, [out_normal]) @@ -261,7 +241,7 @@ def visit_normal_map_node(shader, node): Value.create_from_blender_value(socket.default_value) ) function = find_node_function(node) - output_normal = shader.define_variable('vec3', node.name + '_out_normal') + output_normal = shader.define_variable('vec3', 'out_normal') if node.space == 'TANGENT': in_arguments.append(Variable('vec3', 'NORMAL')) in_arguments.append(Variable('vec3', 'TANGENT')) @@ -391,13 +371,15 @@ def visit_image_texture_node(shader, node): ) if node.image is None or node.image not in shader.global_ref.textures: + shader.append_comment_line( + 'texture image from node {}'.format(node.name)) if _is_normal_texture(node): tex_image_var = shader.global_ref.define_uniform( - "sampler2D", node.name + "texture_image", hint='hint_normal' + "sampler2D", node.image.name, hint='hint_normal' ) else: tex_image_var = shader.global_ref.define_uniform( - "sampler2D", node.name + "texture_image", + "sampler2D", node.image.name, ) shader.global_ref.add_image_texture( diff --git a/io_scene_godot/converters/material_node_tree/shader_functions.py b/io_scene_godot/converters/material_node_tree/shader_functions.py index 5020063..cc5dde8 100644 --- a/io_scene_godot/converters/material_node_tree/shader_functions.py +++ b/io_scene_godot/converters/material_node_tree/shader_functions.py @@ -85,7 +85,7 @@ void node_bsdf_principled(vec4 color, float subsurface, vec4 subsurface_color, sss_strength_out = subsurface; metallic_out = metallic; specular_out = pow((IOR - 1.0)/(IOR + 1.0), 2)/0.08; - roughness_out = sqrt(roughness); + roughness_out = roughness; clearcoat_out = clearcoat * (1.0 - transmission); clearcoat_gloss_out = 1.0 - clearcoat_roughness; anisotropy_out = clamp(anisotropy, 0.0, 1.0); @@ -147,7 +147,7 @@ void node_bsdf_diffuse(vec4 color, float roughness, out vec3 albedo, output_sockets=[ "albedo", "specular", - "roughness", + "oren_nayar_roughness", ] ), @@ -156,7 +156,7 @@ void node_bsdf_diffuse(vec4 color, float roughness, out vec3 albedo, void node_bsdf_glossy(vec4 color, float roughness, out vec3 albedo, out float metallic_out, out float roughness_out){ albedo = color.rgb; - roughness_out = sqrt(roughness); + roughness_out = roughness; metallic_out = 1.0; } """, diff --git a/io_scene_godot/converters/material_node_tree/shaders.py b/io_scene_godot/converters/material_node_tree/shaders.py index 3012fd2..274e03a 100644 --- a/io_scene_godot/converters/material_node_tree/shaders.py +++ b/io_scene_godot/converters/material_node_tree/shaders.py @@ -7,6 +7,12 @@ from .shader_functions import find_function_by_name from ...structures import Array, ValidationError +def _clear_variable_name(raw_var_name): + """Remove illegal charactors from given name and + return the cleared one""" + return re.sub(r'\W', '', raw_var_name) + + class Variable: """A variable in material shader scripts""" @@ -64,6 +70,10 @@ class Value: class FragmentBSDFContainer: """Several attributes altogether represents blender shader output closure""" + # 'roughness' mixing of mix_shader and add_shader, there are two + # different 'roughness' among all the shaders. one is Oren Nayar + # roughness term used in diffuse shader, the other one is ggx roughness + # used in glossy, principle, etc. _ATTRIBUTES_META = collections.OrderedDict([ ('albedo', 'vec3'), ('alpha', 'float'), @@ -71,6 +81,7 @@ class FragmentBSDFContainer: ('specular', 'float'), ('metallic', 'float'), ('roughness', 'float'), + ('oren_nayar_roughness', 'float'), ('clearcoat', 'float'), ('clearcoat_gloss', 'float'), ('anisotropy', 'float'), @@ -134,6 +145,22 @@ class BaseShader: code_pattern.format(*tuple([str(x) for x in variables])) ) + def append_code_lines_left(self, lines): + """Format a line of code string and append it to codes""" + for i, line in enumerate(lines): + assert line[-1] == ';' + self.code_array.insert(i, line) + + def append_comment_line(self, comment): + """Add a line of comment""" + self.code_array.append( + '// ' + comment + ) + + def append_empty_line(self): + """Add an empty linef""" + self.code_array.append("") + def _append_defination_code(self, var_to_define): definition_str = '{} {};'.format( var_to_define.type, str(var_to_define) @@ -147,7 +174,7 @@ class BaseShader: self._variable_count, var_base_name, ) - var_name = re.sub(r'\W', '', raw_var_name) + var_name = _clear_variable_name(raw_var_name) new_var = Variable(var_type, var_name) self._append_defination_code(new_var) return new_var @@ -169,12 +196,11 @@ class BaseShader: ) self._variable_count += 1 - raw_var_name = 'var{}_{}_{}'.format( + raw_var_name = 'var{}_{}'.format( self._variable_count, - node.name, socket.identifier ) - var_name = re.sub(r'\W', '', raw_var_name) + var_name = _clear_variable_name(raw_var_name) new_var = Variable(var_type, var_name) self._append_defination_code(new_var) return new_var @@ -223,7 +249,7 @@ class BaseShader: if (to_socket_type == 'VALUE' and from_socket_type in ('VECTOR', 'RGBA')): converted_var = self.define_variable( - 'float', 'auto_insert_RGBtoBW' + 'float', 'converted_' + str(src_variable) ) if from_socket_type == 'VECTOR': src_variable = Value('vec4', (src_variable, 1.0)) @@ -240,7 +266,7 @@ class BaseShader: if to_socket_type == 'RGBA' and from_socket_type == 'VECTOR': converted_var = self.define_variable( - 'vec4', 'auto_insert_VecToColor' + 'vec4', 'converted_' + str(src_variable) ) self.append_code_line( ('{} = vec4(clamp({}, vec3(0.0, 0.0, 0.0),' @@ -251,7 +277,7 @@ class BaseShader: if to_socket_type == 'VECTOR' and from_socket_type == 'RGBA': converted_var = self.define_variable( - 'vec3', 'auto_insert_ColorToVec' + 'vec3', 'converted_' + str(src_variable) ) self.append_code_line( '{} = {}.xyz;', (converted_var, src_variable) @@ -288,6 +314,7 @@ class BaseShader: def zup_to_yup(self, var_to_convert): """Convert a vec3 from z-up space to y-up space""" assert var_to_convert.type == 'vec3' + self.append_comment_line("convert from z-up to y-up") self.append_code_line( '{} = mat3(vec3(1, 0, 0), vec3(0, 0, -1), vec3(0, 1, 0)) * {};', (var_to_convert, var_to_convert) @@ -296,6 +323,7 @@ class BaseShader: def yup_to_zup(self, var_to_convert): """Convert a vec3 from y-up space to z-up space""" assert var_to_convert.type == 'vec3' + self.append_comment_line("convert from y-up to z-up") self.append_code_line( '{} = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * {};', (var_to_convert, var_to_convert) @@ -328,26 +356,28 @@ class FragmentShader(BaseShader): def invert_view_mat(self): """Return inverted view matrix""" if self._invert_view_mat is None: - self._invert_view_mat = self.define_variable( - 'mat4', 'inverted_view_matrix' - ) - self.append_code_line( - '{} = inverse({});', - (self._invert_view_mat, Variable('mat4', 'INV_CAMERA_MATRIX')) - ) + self._invert_view_mat = Variable('mat4', 'inverted_view_matrix') + self.append_code_lines_left([ + 'mat4 {};'.format(str(self._invert_view_mat)), + '{} = inverse({});'.format( + str(self._invert_view_mat), + str(Variable('mat4', 'INV_CAMERA_MATRIX')) + ) + ]) return self._invert_view_mat @property def invert_model_mat(self): """Return inverted model matrix""" if self._invert_model_mat is None: - self._invert_model_mat = self.define_variable( - 'mat4', 'inverted_model_matrix' - ) - self.append_code_line( - '{} = inverse({});', - (self._invert_model_mat, Variable('mat4', 'WORLD_MATRIX')) - ) + self._invert_model_mat = Variable('mat4', 'inverted_model_matrix') + self.append_code_lines_left([ + 'mat4 {};'.format(str(self._invert_model_mat)), + '{} = inverse({});'.format( + str(self._invert_model_mat), + str(Variable('mat4', 'WORLD_MATRIX')) + ) + ]) return self._invert_model_mat def add_bsdf_surface(self, bsdf_output): @@ -361,12 +391,19 @@ class FragmentShader(BaseShader): '{} = {};'.format(name.upper(), str(var)) ) # XXX: transmission for thick object is not supported in godot - # transmission_var = bsdf_output.get_attribute('transmission') - # if transmission_var is not None: - # self.append_code_line( - # 'TRANSMISSION = vec3(1.0, 1.0, 1.0) * {};' - # (transmission_var,) - # ) + transmission_var = bsdf_output.get_attribute('transmission') + if transmission_var is not None: + self.append_comment_line("transmission usually does not work..") + self.append_code_line( + '// TRANSMISSION = vec3(1.0, 1.0, 1.0) * {};', + (transmission_var,) + ) + + self.append_comment_line("uncomment it only when you set diffuse " + "mode to oren nayar") + self.append_comment_line( + 'ROUGHNESS = oren_nayar_rougness' + ) tangent = bsdf_output.get_attribute('tangent') anisotropy = bsdf_output.get_attribute('anisotropy') @@ -426,6 +463,7 @@ class FragmentShader(BaseShader): """Convert a vec3 from view space to model space, note that conversion is done in y-up space""" assert var_to_convert.type == 'vec3' + self.append_comment_line("convert from view space to model space") if is_direction: self.append_code_line( '{} = normalize({} * ({} * vec4({}, 0.0))).xyz;', @@ -443,6 +481,7 @@ class FragmentShader(BaseShader): """Convert a vec3 from model space to view space, note that conversion is done in y-up space""" assert var_to_convert.type == 'vec3' + self.append_comment_line("convert from model space to view space") view_mat = Variable('mat4', 'INV_CAMERA_MATRIX') model_mat = Variable('mat4', 'WORLD_MATRIX') if is_direction: @@ -460,6 +499,7 @@ class FragmentShader(BaseShader): """Convert a vec3 from view space to world space, note that it is done in y-up space""" assert var_to_convert.type == 'vec3' + self.append_comment_line("convert from view space to world space") if is_direction: self.append_code_line( '{} = normalize({} * vec4({}, 0.0)).xyz;', @@ -475,6 +515,7 @@ class FragmentShader(BaseShader): """Convert a vec3 from world space to view space, note that it is done in y-up space""" assert var_to_convert.type == 'vec3' + self.append_comment_line("convert from world space to view space") view_mat = Variable('mat4', 'INV_CAMERA_MATRIX') if is_direction: self.append_code_line( @@ -558,7 +599,7 @@ class ShaderGlobals: self._uniform_var_count, uni_base_name, ) - var_name = re.sub(r'\W', '', raw_var_name) + var_name = _clear_variable_name(raw_var_name) new_var = Variable(uni_type, var_name) if hint is not None: def_str = 'uniform {} {} : {};'.format(uni_type, var_name, hint) diff --git a/tests/reference_exports/material_cycle/material_anistropy.escn b/tests/reference_exports/material_cycle/material_anistropy.escn index 3a1f323..7cd4734 100644 --- a/tests/reference_exports/material_cycle/material_anistropy.escn +++ b/tests/reference_exports/material_cycle/material_anistropy.escn @@ -26,7 +26,7 @@ void node_bsdf_principled(vec4 color, float subsurface, vec4 subsurface_color, sss_strength_out = subsurface; metallic_out = metallic; specular_out = pow((IOR - 1.0)/(IOR + 1.0), 2)/0.08; - roughness_out = sqrt(roughness); + roughness_out = roughness; clearcoat_out = clearcoat * (1.0 - transmission); clearcoat_gloss_out = 1.0 - clearcoat_roughness; anisotropy_out = clamp(anisotropy, 0.0, 1.0); @@ -42,49 +42,61 @@ void vertex() { void fragment() { - vec4 var1_PrincipledBSDF_BaseColor; - var1_PrincipledBSDF_BaseColor = vec4(0.800000011920929, 0.800000011920929, 0.800000011920929, 1.0); - float var2_PrincipledBSDF_Subsurface; - var2_PrincipledBSDF_Subsurface = 0.0; - vec4 var3_PrincipledBSDF_SubsurfaceColor; - var3_PrincipledBSDF_SubsurfaceColor = vec4(0.699999988079071, 0.10000000149011612, 0.10000000149011612, 1.0); - float var4_PrincipledBSDF_Metallic; - var4_PrincipledBSDF_Metallic = 1.0; - float var5_PrincipledBSDF_Specular; - var5_PrincipledBSDF_Specular = 0.5; - float var6_PrincipledBSDF_Roughness; - var6_PrincipledBSDF_Roughness = 0.12921348214149475; - float var7_PrincipledBSDF_Clearcoat; - var7_PrincipledBSDF_Clearcoat = 0.0; - float var8_PrincipledBSDF_ClearcoatRoughness; - var8_PrincipledBSDF_ClearcoatRoughness = 0.029999999329447746; - float var9_PrincipledBSDF_Anisotropic; - var9_PrincipledBSDF_Anisotropic = 1.0; - float var10_PrincipledBSDF_Transmission; - var10_PrincipledBSDF_Transmission = 0.0; - float var11_PrincipledBSDF_IOR; - var11_PrincipledBSDF_IOR = 1.4500000476837158; - vec3 var12_PrincipledBSDF_output_albedo; - float var13_PrincipledBSDF_output_sss_strength; - float var14_PrincipledBSDF_output_metallic; - float var15_PrincipledBSDF_output_specular; - float var16_PrincipledBSDF_output_roughness; - float var17_PrincipledBSDF_output_clearcoat; - float var18_PrincipledBSDF_output_clearcoat_gloss; - float var19_PrincipledBSDF_output_anisotropy; - float var20_PrincipledBSDF_output_transmission; - float var21_PrincipledBSDF_output_ior; - node_bsdf_principled(var1_PrincipledBSDF_BaseColor, var2_PrincipledBSDF_Subsurface, var3_PrincipledBSDF_SubsurfaceColor, var4_PrincipledBSDF_Metallic, var5_PrincipledBSDF_Specular, var6_PrincipledBSDF_Roughness, var7_PrincipledBSDF_Clearcoat, var8_PrincipledBSDF_ClearcoatRoughness, var9_PrincipledBSDF_Anisotropic, var10_PrincipledBSDF_Transmission, var11_PrincipledBSDF_IOR, var12_PrincipledBSDF_output_albedo, var13_PrincipledBSDF_output_sss_strength, var14_PrincipledBSDF_output_metallic, var15_PrincipledBSDF_output_specular, var16_PrincipledBSDF_output_roughness, var17_PrincipledBSDF_output_clearcoat, var18_PrincipledBSDF_output_clearcoat_gloss, var19_PrincipledBSDF_output_anisotropy, var20_PrincipledBSDF_output_transmission, var21_PrincipledBSDF_output_ior); + // node: Tangent + // type: ShaderNodeTangent + + // node: Principled BSDF + // type: ShaderNodeBsdfPrincipled + vec4 var1_BaseColor; + var1_BaseColor = vec4(0.800000011920929, 0.800000011920929, 0.800000011920929, 1.0); + float var2_Subsurface; + var2_Subsurface = 0.0; + vec4 var3_SubsurfaceColor; + var3_SubsurfaceColor = vec4(0.699999988079071, 0.10000000149011612, 0.10000000149011612, 1.0); + float var4_Metallic; + var4_Metallic = 1.0; + float var5_Specular; + var5_Specular = 0.5; + float var6_Roughness; + var6_Roughness = 0.12921348214149475; + float var7_Clearcoat; + var7_Clearcoat = 0.0; + float var8_ClearcoatRoughness; + var8_ClearcoatRoughness = 0.029999999329447746; + float var9_Anisotropic; + var9_Anisotropic = 1.0; + float var10_Transmission; + var10_Transmission = 0.0; + float var11_IOR; + var11_IOR = 1.4500000476837158; + vec3 var12_out_albedo; + float var13_out_sss_strength; + float var14_out_metallic; + float var15_out_specular; + float var16_out_roughness; + float var17_out_clearcoat; + float var18_out_clearcoat_gloss; + float var19_out_anisotropy; + float var20_out_transmission; + float var21_out_ior; + node_bsdf_principled(var1_BaseColor, var2_Subsurface, var3_SubsurfaceColor, var4_Metallic, var5_Specular, var6_Roughness, var7_Clearcoat, var8_ClearcoatRoughness, var9_Anisotropic, var10_Transmission, var11_IOR, var12_out_albedo, var13_out_sss_strength, var14_out_metallic, var15_out_specular, var16_out_roughness, var17_out_clearcoat, var18_out_clearcoat_gloss, var19_out_anisotropy, var20_out_transmission, var21_out_ior); + // convert from z-up to y-up TANGENT = mat3(vec3(1, 0, 0), vec3(0, 0, -1), vec3(0, 1, 0)) * TANGENT; + // convert from world space to view space TANGENT = normalize(INV_CAMERA_MATRIX * vec4(TANGENT, 0.0)).xyz; - ALBEDO = var12_PrincipledBSDF_output_albedo; - SSS_STRENGTH = var13_PrincipledBSDF_output_sss_strength; - SPECULAR = var15_PrincipledBSDF_output_specular; - METALLIC = var14_PrincipledBSDF_output_metallic; - ROUGHNESS = var16_PrincipledBSDF_output_roughness; - CLEARCOAT = var17_PrincipledBSDF_output_clearcoat; - CLEARCOAT_GLOSS = var18_PrincipledBSDF_output_clearcoat_gloss; - ANISOTROPY = var19_PrincipledBSDF_output_anisotropy; + + ALBEDO = var12_out_albedo; + SSS_STRENGTH = var13_out_sss_strength; + SPECULAR = var15_out_specular; + METALLIC = var14_out_metallic; + ROUGHNESS = var16_out_roughness; + CLEARCOAT = var17_out_clearcoat; + CLEARCOAT_GLOSS = var18_out_clearcoat_gloss; + // transmission usually does not work.. + // TRANSMISSION = vec3(1.0, 1.0, 1.0) * var20_out_transmission; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness + ANISOTROPY = var19_out_anisotropy; TANGENT = normalize(cross(cross(TANGENT, NORMAL), NORMAL)); BINORMAL = cross(TANGENT, NORMAL); } @@ -141,7 +153,7 @@ void node_bsdf_principled(vec4 color, float subsurface, vec4 subsurface_color, sss_strength_out = subsurface; metallic_out = metallic; specular_out = pow((IOR - 1.0)/(IOR + 1.0), 2)/0.08; - roughness_out = sqrt(roughness); + roughness_out = roughness; clearcoat_out = clearcoat * (1.0 - transmission); clearcoat_gloss_out = 1.0 - clearcoat_roughness; anisotropy_out = clamp(anisotropy, 0.0, 1.0); @@ -157,58 +169,72 @@ void vertex() { void fragment() { - vec3 var1_TextureCoordinate_Object; - var1_TextureCoordinate_Object = VERTEX; - mat4 var2_inverted_model_matrix; - var2_inverted_model_matrix = inverse(WORLD_MATRIX); - mat4 var3_inverted_view_matrix; - var3_inverted_view_matrix = inverse(INV_CAMERA_MATRIX); - var1_TextureCoordinate_Object = (var2_inverted_model_matrix * (var3_inverted_view_matrix * vec4(var1_TextureCoordinate_Object, 1.0))).xyz; - var1_TextureCoordinate_Object = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var1_TextureCoordinate_Object; - vec4 var4_PrincipledBSDF_BaseColor; - var4_PrincipledBSDF_BaseColor = vec4(0.800000011920929, 0.800000011920929, 0.800000011920929, 1.0); - float var5_PrincipledBSDF_Subsurface; - var5_PrincipledBSDF_Subsurface = 0.0; - vec4 var6_PrincipledBSDF_SubsurfaceColor; - var6_PrincipledBSDF_SubsurfaceColor = vec4(0.699999988079071, 0.10000000149011612, 0.10000000149011612, 1.0); - float var7_PrincipledBSDF_Metallic; - var7_PrincipledBSDF_Metallic = 1.0; - float var8_PrincipledBSDF_Specular; - var8_PrincipledBSDF_Specular = 0.5; - float var9_PrincipledBSDF_Roughness; - var9_PrincipledBSDF_Roughness = 0.12921348214149475; - float var10_PrincipledBSDF_Clearcoat; - var10_PrincipledBSDF_Clearcoat = 0.0; - float var11_PrincipledBSDF_ClearcoatRoughness; - var11_PrincipledBSDF_ClearcoatRoughness = 0.029999999329447746; - float var12_PrincipledBSDF_Anisotropic; - var12_PrincipledBSDF_Anisotropic = 1.0; - float var13_PrincipledBSDF_Transmission; - var13_PrincipledBSDF_Transmission = 0.0; - float var14_PrincipledBSDF_IOR; - var14_PrincipledBSDF_IOR = 1.4500000476837158; - vec3 var15_PrincipledBSDF_output_albedo; - float var16_PrincipledBSDF_output_sss_strength; - float var17_PrincipledBSDF_output_metallic; - float var18_PrincipledBSDF_output_specular; - float var19_PrincipledBSDF_output_roughness; - float var20_PrincipledBSDF_output_clearcoat; - float var21_PrincipledBSDF_output_clearcoat_gloss; - float var22_PrincipledBSDF_output_anisotropy; - float var23_PrincipledBSDF_output_transmission; - float var24_PrincipledBSDF_output_ior; - node_bsdf_principled(var4_PrincipledBSDF_BaseColor, var5_PrincipledBSDF_Subsurface, var6_PrincipledBSDF_SubsurfaceColor, var7_PrincipledBSDF_Metallic, var8_PrincipledBSDF_Specular, var9_PrincipledBSDF_Roughness, var10_PrincipledBSDF_Clearcoat, var11_PrincipledBSDF_ClearcoatRoughness, var12_PrincipledBSDF_Anisotropic, var13_PrincipledBSDF_Transmission, var14_PrincipledBSDF_IOR, var15_PrincipledBSDF_output_albedo, var16_PrincipledBSDF_output_sss_strength, var17_PrincipledBSDF_output_metallic, var18_PrincipledBSDF_output_specular, var19_PrincipledBSDF_output_roughness, var20_PrincipledBSDF_output_clearcoat, var21_PrincipledBSDF_output_clearcoat_gloss, var22_PrincipledBSDF_output_anisotropy, var23_PrincipledBSDF_output_transmission, var24_PrincipledBSDF_output_ior); - var1_TextureCoordinate_Object = mat3(vec3(1, 0, 0), vec3(0, 0, -1), vec3(0, 1, 0)) * var1_TextureCoordinate_Object; - var1_TextureCoordinate_Object = normalize(INV_CAMERA_MATRIX * vec4(var1_TextureCoordinate_Object, 0.0)).xyz; - ALBEDO = var15_PrincipledBSDF_output_albedo; - SSS_STRENGTH = var16_PrincipledBSDF_output_sss_strength; - SPECULAR = var18_PrincipledBSDF_output_specular; - METALLIC = var17_PrincipledBSDF_output_metallic; - ROUGHNESS = var19_PrincipledBSDF_output_roughness; - CLEARCOAT = var20_PrincipledBSDF_output_clearcoat; - CLEARCOAT_GLOSS = var21_PrincipledBSDF_output_clearcoat_gloss; - ANISOTROPY = var22_PrincipledBSDF_output_anisotropy; - TANGENT = normalize(cross(cross(var1_TextureCoordinate_Object, NORMAL), NORMAL)); + mat4 inverted_view_matrix; + inverted_view_matrix = inverse(INV_CAMERA_MATRIX); + mat4 inverted_model_matrix; + inverted_model_matrix = inverse(WORLD_MATRIX); + // node: Texture Coordinate + // type: ShaderNodeTexCoord + vec3 var1_Object; + var1_Object = VERTEX; + // convert from view space to model space + var1_Object = (inverted_model_matrix * (inverted_view_matrix * vec4(var1_Object, 1.0))).xyz; + // convert from y-up to z-up + var1_Object = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var1_Object; + + // node: Principled BSDF + // type: ShaderNodeBsdfPrincipled + vec4 var2_BaseColor; + var2_BaseColor = vec4(0.800000011920929, 0.800000011920929, 0.800000011920929, 1.0); + float var3_Subsurface; + var3_Subsurface = 0.0; + vec4 var4_SubsurfaceColor; + var4_SubsurfaceColor = vec4(0.699999988079071, 0.10000000149011612, 0.10000000149011612, 1.0); + float var5_Metallic; + var5_Metallic = 1.0; + float var6_Specular; + var6_Specular = 0.5; + float var7_Roughness; + var7_Roughness = 0.12921348214149475; + float var8_Clearcoat; + var8_Clearcoat = 0.0; + float var9_ClearcoatRoughness; + var9_ClearcoatRoughness = 0.029999999329447746; + float var10_Anisotropic; + var10_Anisotropic = 1.0; + float var11_Transmission; + var11_Transmission = 0.0; + float var12_IOR; + var12_IOR = 1.4500000476837158; + vec3 var13_out_albedo; + float var14_out_sss_strength; + float var15_out_metallic; + float var16_out_specular; + float var17_out_roughness; + float var18_out_clearcoat; + float var19_out_clearcoat_gloss; + float var20_out_anisotropy; + float var21_out_transmission; + float var22_out_ior; + node_bsdf_principled(var2_BaseColor, var3_Subsurface, var4_SubsurfaceColor, var5_Metallic, var6_Specular, var7_Roughness, var8_Clearcoat, var9_ClearcoatRoughness, var10_Anisotropic, var11_Transmission, var12_IOR, var13_out_albedo, var14_out_sss_strength, var15_out_metallic, var16_out_specular, var17_out_roughness, var18_out_clearcoat, var19_out_clearcoat_gloss, var20_out_anisotropy, var21_out_transmission, var22_out_ior); + // convert from z-up to y-up + var1_Object = mat3(vec3(1, 0, 0), vec3(0, 0, -1), vec3(0, 1, 0)) * var1_Object; + // convert from world space to view space + var1_Object = normalize(INV_CAMERA_MATRIX * vec4(var1_Object, 0.0)).xyz; + + ALBEDO = var13_out_albedo; + SSS_STRENGTH = var14_out_sss_strength; + SPECULAR = var16_out_specular; + METALLIC = var15_out_metallic; + ROUGHNESS = var17_out_roughness; + CLEARCOAT = var18_out_clearcoat; + CLEARCOAT_GLOSS = var19_out_clearcoat_gloss; + // transmission usually does not work.. + // TRANSMISSION = vec3(1.0, 1.0, 1.0) * var21_out_transmission; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness + ANISOTROPY = var20_out_anisotropy; + TANGENT = normalize(cross(cross(var1_Object, NORMAL), NORMAL)); BINORMAL = cross(TANGENT, NORMAL); } " diff --git a/tests/reference_exports/material_cycle/material_cycle.escn b/tests/reference_exports/material_cycle/material_cycle.escn index 330ed78..4cfd8a2 100644 --- a/tests/reference_exports/material_cycle/material_cycle.escn +++ b/tests/reference_exports/material_cycle/material_cycle.escn @@ -23,17 +23,21 @@ void vertex() { void fragment() { - vec4 var1_DiffuseBSDF_Color; - var1_DiffuseBSDF_Color = vec4(0.3409999907016754, 0.3409999907016754, 0.3409999907016754, 1.0); - float var2_DiffuseBSDF_Roughness; - var2_DiffuseBSDF_Roughness = 0.0; - vec3 var3_DiffuseBSDF_output_albedo; - float var4_DiffuseBSDF_output_specular; - float var5_DiffuseBSDF_output_roughness; - node_bsdf_diffuse(var1_DiffuseBSDF_Color, var2_DiffuseBSDF_Roughness, var3_DiffuseBSDF_output_albedo, var4_DiffuseBSDF_output_specular, var5_DiffuseBSDF_output_roughness); - ALBEDO = var3_DiffuseBSDF_output_albedo; - SPECULAR = var4_DiffuseBSDF_output_specular; - ROUGHNESS = var5_DiffuseBSDF_output_roughness; + // node: Diffuse BSDF + // type: ShaderNodeBsdfDiffuse + vec4 var1_Color; + var1_Color = vec4(0.3409999907016754, 0.3409999907016754, 0.3409999907016754, 1.0); + float var2_Roughness; + var2_Roughness = 0.0; + vec3 var3_out_albedo; + float var4_out_specular; + float var5_out_oren_nayar_roughness; + node_bsdf_diffuse(var1_Color, var2_Roughness, var3_out_albedo, var4_out_specular, var5_out_oren_nayar_roughness); + + ALBEDO = var3_out_albedo; + SPECULAR = var4_out_specular; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness } " @@ -81,7 +85,7 @@ void node_bsdf_diffuse(vec4 color, float roughness, out vec3 albedo, void node_bsdf_glossy(vec4 color, float roughness, out vec3 albedo, out float metallic_out, out float roughness_out){ albedo = color.rgb; - roughness_out = sqrt(roughness); + roughness_out = roughness; metallic_out = 1.0; } @@ -93,30 +97,39 @@ void vertex() { void fragment() { - vec4 var1_DiffuseBSDF_Color; - var1_DiffuseBSDF_Color = vec4(0.011042675003409386, 0.011042675003409386, 0.011042675003409386, 1.0); - float var2_DiffuseBSDF_Roughness; - var2_DiffuseBSDF_Roughness = 0.0; - vec3 var3_DiffuseBSDF_output_albedo; - float var4_DiffuseBSDF_output_specular; - float var5_DiffuseBSDF_output_roughness; - node_bsdf_diffuse(var1_DiffuseBSDF_Color, var2_DiffuseBSDF_Roughness, var3_DiffuseBSDF_output_albedo, var4_DiffuseBSDF_output_specular, var5_DiffuseBSDF_output_roughness); - vec4 var6_GlossyBSDF_Color; - var6_GlossyBSDF_Color = vec4(0.800000011920929, 0.800000011920929, 0.800000011920929, 1.0); - float var7_GlossyBSDF_Roughness; - var7_GlossyBSDF_Roughness = 0.0; - vec3 var8_GlossyBSDF_output_albedo; - float var9_GlossyBSDF_output_metallic; - float var10_GlossyBSDF_output_roughness; - node_bsdf_glossy(var6_GlossyBSDF_Color, var7_GlossyBSDF_Roughness, var8_GlossyBSDF_output_albedo, var9_GlossyBSDF_output_metallic, var10_GlossyBSDF_output_roughness); - vec3 var11_MixShader_albedo; - var11_MixShader_albedo = mix(var3_DiffuseBSDF_output_albedo, var8_GlossyBSDF_output_albedo, 0.1818181872367859); - float var12_MixShader_roughness; - var12_MixShader_roughness = mix(var5_DiffuseBSDF_output_roughness, var10_GlossyBSDF_output_roughness, 0.1818181872367859); - ALBEDO = var11_MixShader_albedo; - SPECULAR = var4_DiffuseBSDF_output_specular; - METALLIC = var9_GlossyBSDF_output_metallic; - ROUGHNESS = var12_MixShader_roughness; + // node: Diffuse BSDF + // type: ShaderNodeBsdfDiffuse + vec4 var1_Color; + var1_Color = vec4(0.011042675003409386, 0.011042675003409386, 0.011042675003409386, 1.0); + float var2_Roughness; + var2_Roughness = 0.0; + vec3 var3_out_albedo; + float var4_out_specular; + float var5_out_oren_nayar_roughness; + node_bsdf_diffuse(var1_Color, var2_Roughness, var3_out_albedo, var4_out_specular, var5_out_oren_nayar_roughness); + + // node: Glossy BSDF + // type: ShaderNodeBsdfGlossy + vec4 var6_Color; + var6_Color = vec4(0.800000011920929, 0.800000011920929, 0.800000011920929, 1.0); + float var7_Roughness; + var7_Roughness = 0.0; + vec3 var8_out_albedo; + float var9_out_metallic; + float var10_out_roughness; + node_bsdf_glossy(var6_Color, var7_Roughness, var8_out_albedo, var9_out_metallic, var10_out_roughness); + + // node: Mix Shader + // type: ShaderNodeMixShader + vec3 var11_albedo; + var11_albedo = mix(var3_out_albedo, var8_out_albedo, 0.1818181872367859); + + ALBEDO = var11_albedo; + SPECULAR = var4_out_specular; + METALLIC = var9_out_metallic; + ROUGHNESS = var10_out_roughness; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness } " @@ -168,17 +181,21 @@ void vertex() { void fragment() { - vec4 var1_DiffuseBSDF_Color; - var1_DiffuseBSDF_Color = vec4(0.05347035825252533, 0.05347035825252533, 0.05347035825252533, 1.0); - float var2_DiffuseBSDF_Roughness; - var2_DiffuseBSDF_Roughness = 0.0; - vec3 var3_DiffuseBSDF_output_albedo; - float var4_DiffuseBSDF_output_specular; - float var5_DiffuseBSDF_output_roughness; - node_bsdf_diffuse(var1_DiffuseBSDF_Color, var2_DiffuseBSDF_Roughness, var3_DiffuseBSDF_output_albedo, var4_DiffuseBSDF_output_specular, var5_DiffuseBSDF_output_roughness); - ALBEDO = var3_DiffuseBSDF_output_albedo; - SPECULAR = var4_DiffuseBSDF_output_specular; - ROUGHNESS = var5_DiffuseBSDF_output_roughness; + // node: Diffuse BSDF + // type: ShaderNodeBsdfDiffuse + vec4 var1_Color; + var1_Color = vec4(0.05347035825252533, 0.05347035825252533, 0.05347035825252533, 1.0); + float var2_Roughness; + var2_Roughness = 0.0; + vec3 var3_out_albedo; + float var4_out_specular; + float var5_out_oren_nayar_roughness; + node_bsdf_diffuse(var1_Color, var2_Roughness, var3_out_albedo, var4_out_specular, var5_out_oren_nayar_roughness); + + ALBEDO = var3_out_albedo; + SPECULAR = var4_out_specular; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness } " @@ -230,17 +247,21 @@ void vertex() { void fragment() { - vec4 var1_DiffuseBSDF_Color; - var1_DiffuseBSDF_Color = vec4(0.8000000715255737, 0.0, 0.0, 1.0); - float var2_DiffuseBSDF_Roughness; - var2_DiffuseBSDF_Roughness = 0.0; - vec3 var3_DiffuseBSDF_output_albedo; - float var4_DiffuseBSDF_output_specular; - float var5_DiffuseBSDF_output_roughness; - node_bsdf_diffuse(var1_DiffuseBSDF_Color, var2_DiffuseBSDF_Roughness, var3_DiffuseBSDF_output_albedo, var4_DiffuseBSDF_output_specular, var5_DiffuseBSDF_output_roughness); - ALBEDO = var3_DiffuseBSDF_output_albedo; - SPECULAR = var4_DiffuseBSDF_output_specular; - ROUGHNESS = var5_DiffuseBSDF_output_roughness; + // node: Diffuse BSDF + // type: ShaderNodeBsdfDiffuse + vec4 var1_Color; + var1_Color = vec4(0.8000000715255737, 0.0, 0.0, 1.0); + float var2_Roughness; + var2_Roughness = 0.0; + vec3 var3_out_albedo; + float var4_out_specular; + float var5_out_oren_nayar_roughness; + node_bsdf_diffuse(var1_Color, var2_Roughness, var3_out_albedo, var4_out_specular, var5_out_oren_nayar_roughness); + + ALBEDO = var3_out_albedo; + SPECULAR = var4_out_specular; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness } " @@ -324,25 +345,32 @@ void vertex() { void fragment() { - vec4 var1_GlassBSDF_Color; - var1_GlassBSDF_Color = vec4(0.0, 1.0, 1.0, 1.0); - float var2_GlassBSDF_Roughness; - var2_GlassBSDF_Roughness = 0.48304590582847595; - float var3_GlassBSDF_IOR; - var3_GlassBSDF_IOR = 1.4500000476837158; - vec3 var4_GlassBSDF_output_albedo; - float var5_GlassBSDF_output_alpha; - float var6_GlassBSDF_output_specular; - float var7_GlassBSDF_output_roughness; - float var8_GlassBSDF_output_transmission; - float var9_GlassBSDF_output_ior; - node_bsdf_glass(var1_GlassBSDF_Color, var2_GlassBSDF_Roughness, var3_GlassBSDF_IOR, var4_GlassBSDF_output_albedo, var5_GlassBSDF_output_alpha, var6_GlassBSDF_output_specular, var7_GlassBSDF_output_roughness, var8_GlassBSDF_output_transmission, var9_GlassBSDF_output_ior); - ALBEDO = var4_GlassBSDF_output_albedo; - SPECULAR = var6_GlassBSDF_output_specular; - ROUGHNESS = var7_GlassBSDF_output_roughness; - refraction_fresnel(VERTEX, NORMAL, var9_GlassBSDF_output_ior, var5_GlassBSDF_output_alpha); - EMISSION += textureLod(SCREEN_TEXTURE, SCREEN_UV - NORMAL.xy * uni1_refraction_offset, ROUGHNESS).rgb * (1.0 - var5_GlassBSDF_output_alpha); - ALBEDO *= var5_GlassBSDF_output_alpha; + // node: Glass BSDF + // type: ShaderNodeBsdfGlass + vec4 var1_Color; + var1_Color = vec4(0.0, 1.0, 1.0, 1.0); + float var2_Roughness; + var2_Roughness = 0.48304590582847595; + float var3_IOR; + var3_IOR = 1.4500000476837158; + vec3 var4_out_albedo; + float var5_out_alpha; + float var6_out_specular; + float var7_out_roughness; + float var8_out_transmission; + float var9_out_ior; + node_bsdf_glass(var1_Color, var2_Roughness, var3_IOR, var4_out_albedo, var5_out_alpha, var6_out_specular, var7_out_roughness, var8_out_transmission, var9_out_ior); + + ALBEDO = var4_out_albedo; + SPECULAR = var6_out_specular; + ROUGHNESS = var7_out_roughness; + // transmission usually does not work.. + // TRANSMISSION = vec3(1.0, 1.0, 1.0) * var8_out_transmission; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness + refraction_fresnel(VERTEX, NORMAL, var9_out_ior, var5_out_alpha); + EMISSION += textureLod(SCREEN_TEXTURE, SCREEN_UV - NORMAL.xy * uni1_refraction_offset, ROUGHNESS).rgb * (1.0 - var5_out_alpha); + ALBEDO *= var5_out_alpha; ALPHA = 1.0; } " @@ -383,7 +411,7 @@ render_mode blend_mix,depth_draw_always,cull_back,diffuse_burley,specular_schlic void node_bsdf_glossy(vec4 color, float roughness, out vec3 albedo, out float metallic_out, out float roughness_out){ albedo = color.rgb; - roughness_out = sqrt(roughness); + roughness_out = roughness; metallic_out = 1.0; } @@ -395,17 +423,22 @@ void vertex() { void fragment() { - vec4 var1_GlossyBSDF_Color; - var1_GlossyBSDF_Color = vec4(0.6672981381416321, 0.6672981381416321, 0.6672981381416321, 1.0); - float var2_GlossyBSDF_Roughness; - var2_GlossyBSDF_Roughness = 0.0; - vec3 var3_GlossyBSDF_output_albedo; - float var4_GlossyBSDF_output_metallic; - float var5_GlossyBSDF_output_roughness; - node_bsdf_glossy(var1_GlossyBSDF_Color, var2_GlossyBSDF_Roughness, var3_GlossyBSDF_output_albedo, var4_GlossyBSDF_output_metallic, var5_GlossyBSDF_output_roughness); - ALBEDO = var3_GlossyBSDF_output_albedo; - METALLIC = var4_GlossyBSDF_output_metallic; - ROUGHNESS = var5_GlossyBSDF_output_roughness; + // node: Glossy BSDF + // type: ShaderNodeBsdfGlossy + vec4 var1_Color; + var1_Color = vec4(0.6672981381416321, 0.6672981381416321, 0.6672981381416321, 1.0); + float var2_Roughness; + var2_Roughness = 0.0; + vec3 var3_out_albedo; + float var4_out_metallic; + float var5_out_roughness; + node_bsdf_glossy(var1_Color, var2_Roughness, var3_out_albedo, var4_out_metallic, var5_out_roughness); + + ALBEDO = var3_out_albedo; + METALLIC = var4_out_metallic; + ROUGHNESS = var5_out_roughness; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness } " @@ -445,7 +478,7 @@ void node_bsdf_principled(vec4 color, float subsurface, vec4 subsurface_color, sss_strength_out = subsurface; metallic_out = metallic; specular_out = pow((IOR - 1.0)/(IOR + 1.0), 2)/0.08; - roughness_out = sqrt(roughness); + roughness_out = roughness; clearcoat_out = clearcoat * (1.0 - transmission); clearcoat_gloss_out = 1.0 - clearcoat_roughness; anisotropy_out = clamp(anisotropy, 0.0, 1.0); @@ -461,54 +494,66 @@ void vertex() { void fragment() { - vec3 var1_TextureCoordinate_Normal; - var1_TextureCoordinate_Normal = NORMAL; - mat4 var2_inverted_model_matrix; - var2_inverted_model_matrix = inverse(WORLD_MATRIX); - mat4 var3_inverted_view_matrix; - var3_inverted_view_matrix = inverse(INV_CAMERA_MATRIX); - var1_TextureCoordinate_Normal = normalize(var2_inverted_model_matrix * (var3_inverted_view_matrix * vec4(var1_TextureCoordinate_Normal, 0.0))).xyz; - var1_TextureCoordinate_Normal = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var1_TextureCoordinate_Normal; - vec4 var4_PrincipledBSDF_BaseColor; - var4_PrincipledBSDF_BaseColor = vec4(0.025226209312677383, 0.11296848952770233, 0.8000000715255737, 1.0); - float var5_auto_insert_RGBtoBW; - node_rgb_to_bw(vec4(var1_TextureCoordinate_Normal, 1.0), var5_auto_insert_RGBtoBW); - vec4 var6_PrincipledBSDF_SubsurfaceColor; - var6_PrincipledBSDF_SubsurfaceColor = vec4(0.699999988079071, 0.10000000149011612, 0.10000000149011612, 1.0); - float var7_PrincipledBSDF_Metallic; - var7_PrincipledBSDF_Metallic = 0.0; - float var8_PrincipledBSDF_Specular; - var8_PrincipledBSDF_Specular = 0.5; - float var9_PrincipledBSDF_Roughness; - var9_PrincipledBSDF_Roughness = 0.5; - float var10_PrincipledBSDF_Clearcoat; - var10_PrincipledBSDF_Clearcoat = 0.0; - float var11_PrincipledBSDF_ClearcoatRoughness; - var11_PrincipledBSDF_ClearcoatRoughness = 0.029999999329447746; - float var12_PrincipledBSDF_Anisotropic; - var12_PrincipledBSDF_Anisotropic = 0.0; - float var13_PrincipledBSDF_Transmission; - var13_PrincipledBSDF_Transmission = 0.0; - float var14_PrincipledBSDF_IOR; - var14_PrincipledBSDF_IOR = 1.4500000476837158; - vec3 var15_PrincipledBSDF_output_albedo; - float var16_PrincipledBSDF_output_sss_strength; - float var17_PrincipledBSDF_output_metallic; - float var18_PrincipledBSDF_output_specular; - float var19_PrincipledBSDF_output_roughness; - float var20_PrincipledBSDF_output_clearcoat; - float var21_PrincipledBSDF_output_clearcoat_gloss; - float var22_PrincipledBSDF_output_anisotropy; - float var23_PrincipledBSDF_output_transmission; - float var24_PrincipledBSDF_output_ior; - node_bsdf_principled(var4_PrincipledBSDF_BaseColor, var5_auto_insert_RGBtoBW, var6_PrincipledBSDF_SubsurfaceColor, var7_PrincipledBSDF_Metallic, var8_PrincipledBSDF_Specular, var9_PrincipledBSDF_Roughness, var10_PrincipledBSDF_Clearcoat, var11_PrincipledBSDF_ClearcoatRoughness, var12_PrincipledBSDF_Anisotropic, var13_PrincipledBSDF_Transmission, var14_PrincipledBSDF_IOR, var15_PrincipledBSDF_output_albedo, var16_PrincipledBSDF_output_sss_strength, var17_PrincipledBSDF_output_metallic, var18_PrincipledBSDF_output_specular, var19_PrincipledBSDF_output_roughness, var20_PrincipledBSDF_output_clearcoat, var21_PrincipledBSDF_output_clearcoat_gloss, var22_PrincipledBSDF_output_anisotropy, var23_PrincipledBSDF_output_transmission, var24_PrincipledBSDF_output_ior); - ALBEDO = var15_PrincipledBSDF_output_albedo; - SSS_STRENGTH = var16_PrincipledBSDF_output_sss_strength; - SPECULAR = var18_PrincipledBSDF_output_specular; - METALLIC = var17_PrincipledBSDF_output_metallic; - ROUGHNESS = var19_PrincipledBSDF_output_roughness; - CLEARCOAT = var20_PrincipledBSDF_output_clearcoat; - CLEARCOAT_GLOSS = var21_PrincipledBSDF_output_clearcoat_gloss; + mat4 inverted_view_matrix; + inverted_view_matrix = inverse(INV_CAMERA_MATRIX); + mat4 inverted_model_matrix; + inverted_model_matrix = inverse(WORLD_MATRIX); + // node: Texture Coordinate + // type: ShaderNodeTexCoord + vec3 var1_Normal; + var1_Normal = NORMAL; + // convert from view space to model space + var1_Normal = normalize(inverted_model_matrix * (inverted_view_matrix * vec4(var1_Normal, 0.0))).xyz; + // convert from y-up to z-up + var1_Normal = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var1_Normal; + + // node: Principled BSDF + // type: ShaderNodeBsdfPrincipled + vec4 var2_BaseColor; + var2_BaseColor = vec4(0.025226209312677383, 0.11296848952770233, 0.8000000715255737, 1.0); + float var3_converted_var1_Normal; + node_rgb_to_bw(vec4(var1_Normal, 1.0), var3_converted_var1_Normal); + vec4 var4_SubsurfaceColor; + var4_SubsurfaceColor = vec4(0.699999988079071, 0.10000000149011612, 0.10000000149011612, 1.0); + float var5_Metallic; + var5_Metallic = 0.0; + float var6_Specular; + var6_Specular = 0.5; + float var7_Roughness; + var7_Roughness = 0.5; + float var8_Clearcoat; + var8_Clearcoat = 0.0; + float var9_ClearcoatRoughness; + var9_ClearcoatRoughness = 0.029999999329447746; + float var10_Anisotropic; + var10_Anisotropic = 0.0; + float var11_Transmission; + var11_Transmission = 0.0; + float var12_IOR; + var12_IOR = 1.4500000476837158; + vec3 var13_out_albedo; + float var14_out_sss_strength; + float var15_out_metallic; + float var16_out_specular; + float var17_out_roughness; + float var18_out_clearcoat; + float var19_out_clearcoat_gloss; + float var20_out_anisotropy; + float var21_out_transmission; + float var22_out_ior; + node_bsdf_principled(var2_BaseColor, var3_converted_var1_Normal, var4_SubsurfaceColor, var5_Metallic, var6_Specular, var7_Roughness, var8_Clearcoat, var9_ClearcoatRoughness, var10_Anisotropic, var11_Transmission, var12_IOR, var13_out_albedo, var14_out_sss_strength, var15_out_metallic, var16_out_specular, var17_out_roughness, var18_out_clearcoat, var19_out_clearcoat_gloss, var20_out_anisotropy, var21_out_transmission, var22_out_ior); + + ALBEDO = var13_out_albedo; + SSS_STRENGTH = var14_out_sss_strength; + SPECULAR = var16_out_specular; + METALLIC = var15_out_metallic; + ROUGHNESS = var17_out_roughness; + CLEARCOAT = var18_out_clearcoat; + CLEARCOAT_GLOSS = var19_out_clearcoat_gloss; + // transmission usually does not work.. + // TRANSMISSION = vec3(1.0, 1.0, 1.0) * var21_out_transmission; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness } " @@ -540,17 +585,24 @@ void vertex() { void fragment() { - vec4 var1_auto_insert_VecToColor; - var1_auto_insert_VecToColor = vec4(clamp(vec3(VERTEX.xy, -VERTEX.z), vec3(0.0, 0.0, 0.0),vec3(1.0, 1.0, 1.0)).xyz, 1.0); - float var2_DiffuseBSDF_Roughness; - var2_DiffuseBSDF_Roughness = 0.0; - vec3 var3_DiffuseBSDF_output_albedo; - float var4_DiffuseBSDF_output_specular; - float var5_DiffuseBSDF_output_roughness; - node_bsdf_diffuse(var1_auto_insert_VecToColor, var2_DiffuseBSDF_Roughness, var3_DiffuseBSDF_output_albedo, var4_DiffuseBSDF_output_specular, var5_DiffuseBSDF_output_roughness); - ALBEDO = var3_DiffuseBSDF_output_albedo; - SPECULAR = var4_DiffuseBSDF_output_specular; - ROUGHNESS = var5_DiffuseBSDF_output_roughness; + // node: Texture Coordinate + // type: ShaderNodeTexCoord + + // node: Diffuse BSDF + // type: ShaderNodeBsdfDiffuse + vec4 var1_converted_vec3VERTEXxyVERTEXz; + var1_converted_vec3VERTEXxyVERTEXz = vec4(clamp(vec3(VERTEX.xy, -VERTEX.z), vec3(0.0, 0.0, 0.0),vec3(1.0, 1.0, 1.0)).xyz, 1.0); + float var2_Roughness; + var2_Roughness = 0.0; + vec3 var3_out_albedo; + float var4_out_specular; + float var5_out_oren_nayar_roughness; + node_bsdf_diffuse(var1_converted_vec3VERTEXxyVERTEXz, var2_Roughness, var3_out_albedo, var4_out_specular, var5_out_oren_nayar_roughness); + + ALBEDO = var3_out_albedo; + SPECULAR = var4_out_specular; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness } " @@ -582,17 +634,24 @@ void vertex() { void fragment() { - vec4 var1_auto_insert_VecToColor; - var1_auto_insert_VecToColor = vec4(clamp(vec3(SCREEN_UV, 0.0), vec3(0.0, 0.0, 0.0),vec3(1.0, 1.0, 1.0)).xyz, 1.0); - float var2_DiffuseBSDF_Roughness; - var2_DiffuseBSDF_Roughness = 0.0; - vec3 var3_DiffuseBSDF_output_albedo; - float var4_DiffuseBSDF_output_specular; - float var5_DiffuseBSDF_output_roughness; - node_bsdf_diffuse(var1_auto_insert_VecToColor, var2_DiffuseBSDF_Roughness, var3_DiffuseBSDF_output_albedo, var4_DiffuseBSDF_output_specular, var5_DiffuseBSDF_output_roughness); - ALBEDO = var3_DiffuseBSDF_output_albedo; - SPECULAR = var4_DiffuseBSDF_output_specular; - ROUGHNESS = var5_DiffuseBSDF_output_roughness; + // node: Texture Coordinate + // type: ShaderNodeTexCoord + + // node: Diffuse BSDF + // type: ShaderNodeBsdfDiffuse + vec4 var1_converted_vec3SCREEN_UV00; + var1_converted_vec3SCREEN_UV00 = vec4(clamp(vec3(SCREEN_UV, 0.0), vec3(0.0, 0.0, 0.0),vec3(1.0, 1.0, 1.0)).xyz, 1.0); + float var2_Roughness; + var2_Roughness = 0.0; + vec3 var3_out_albedo; + float var4_out_specular; + float var5_out_oren_nayar_roughness; + node_bsdf_diffuse(var1_converted_vec3SCREEN_UV00, var2_Roughness, var3_out_albedo, var4_out_specular, var5_out_oren_nayar_roughness); + + ALBEDO = var3_out_albedo; + SPECULAR = var4_out_specular; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness } " @@ -624,20 +683,28 @@ void vertex() { void fragment() { - vec3 var1_TextureCoordinate_Reflection; - var1_TextureCoordinate_Reflection = (inverse(INV_CAMERA_MATRIX) * vec4(reflect(normalize(VERTEX), NORMAL), 0.0)).xyz; - var1_TextureCoordinate_Reflection = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var1_TextureCoordinate_Reflection; - vec4 var2_auto_insert_VecToColor; - var2_auto_insert_VecToColor = vec4(clamp(var1_TextureCoordinate_Reflection, vec3(0.0, 0.0, 0.0),vec3(1.0, 1.0, 1.0)).xyz, 1.0); - float var3_DiffuseBSDF_Roughness; - var3_DiffuseBSDF_Roughness = 0.0; - vec3 var4_DiffuseBSDF_output_albedo; - float var5_DiffuseBSDF_output_specular; - float var6_DiffuseBSDF_output_roughness; - node_bsdf_diffuse(var2_auto_insert_VecToColor, var3_DiffuseBSDF_Roughness, var4_DiffuseBSDF_output_albedo, var5_DiffuseBSDF_output_specular, var6_DiffuseBSDF_output_roughness); - ALBEDO = var4_DiffuseBSDF_output_albedo; - SPECULAR = var5_DiffuseBSDF_output_specular; - ROUGHNESS = var6_DiffuseBSDF_output_roughness; + // node: Texture Coordinate + // type: ShaderNodeTexCoord + vec3 var1_Reflection; + var1_Reflection = (inverse(INV_CAMERA_MATRIX) * vec4(reflect(normalize(VERTEX), NORMAL), 0.0)).xyz; + // convert from y-up to z-up + var1_Reflection = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var1_Reflection; + + // node: Diffuse BSDF + // type: ShaderNodeBsdfDiffuse + vec4 var2_converted_var1_Reflection; + var2_converted_var1_Reflection = vec4(clamp(var1_Reflection, vec3(0.0, 0.0, 0.0),vec3(1.0, 1.0, 1.0)).xyz, 1.0); + float var3_Roughness; + var3_Roughness = 0.0; + vec3 var4_out_albedo; + float var5_out_specular; + float var6_out_oren_nayar_roughness; + node_bsdf_diffuse(var2_converted_var1_Reflection, var3_Roughness, var4_out_albedo, var5_out_specular, var6_out_oren_nayar_roughness); + + ALBEDO = var4_out_albedo; + SPECULAR = var5_out_specular; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness } " @@ -669,25 +736,34 @@ void vertex() { void fragment() { - vec3 var1_TextureCoordinate_Object; - var1_TextureCoordinate_Object = VERTEX; - mat4 var2_inverted_model_matrix; - var2_inverted_model_matrix = inverse(WORLD_MATRIX); - mat4 var3_inverted_view_matrix; - var3_inverted_view_matrix = inverse(INV_CAMERA_MATRIX); - var1_TextureCoordinate_Object = (var2_inverted_model_matrix * (var3_inverted_view_matrix * vec4(var1_TextureCoordinate_Object, 1.0))).xyz; - var1_TextureCoordinate_Object = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var1_TextureCoordinate_Object; - vec4 var4_auto_insert_VecToColor; - var4_auto_insert_VecToColor = vec4(clamp(var1_TextureCoordinate_Object, vec3(0.0, 0.0, 0.0),vec3(1.0, 1.0, 1.0)).xyz, 1.0); - float var5_DiffuseBSDF_Roughness; - var5_DiffuseBSDF_Roughness = 0.0; - vec3 var6_DiffuseBSDF_output_albedo; - float var7_DiffuseBSDF_output_specular; - float var8_DiffuseBSDF_output_roughness; - node_bsdf_diffuse(var4_auto_insert_VecToColor, var5_DiffuseBSDF_Roughness, var6_DiffuseBSDF_output_albedo, var7_DiffuseBSDF_output_specular, var8_DiffuseBSDF_output_roughness); - ALBEDO = var6_DiffuseBSDF_output_albedo; - SPECULAR = var7_DiffuseBSDF_output_specular; - ROUGHNESS = var8_DiffuseBSDF_output_roughness; + mat4 inverted_view_matrix; + inverted_view_matrix = inverse(INV_CAMERA_MATRIX); + mat4 inverted_model_matrix; + inverted_model_matrix = inverse(WORLD_MATRIX); + // node: Texture Coordinate + // type: ShaderNodeTexCoord + vec3 var1_Object; + var1_Object = VERTEX; + // convert from view space to model space + var1_Object = (inverted_model_matrix * (inverted_view_matrix * vec4(var1_Object, 1.0))).xyz; + // convert from y-up to z-up + var1_Object = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var1_Object; + + // node: Diffuse BSDF + // type: ShaderNodeBsdfDiffuse + vec4 var2_converted_var1_Object; + var2_converted_var1_Object = vec4(clamp(var1_Object, vec3(0.0, 0.0, 0.0),vec3(1.0, 1.0, 1.0)).xyz, 1.0); + float var3_Roughness; + var3_Roughness = 0.0; + vec3 var4_out_albedo; + float var5_out_specular; + float var6_out_oren_nayar_roughness; + node_bsdf_diffuse(var2_converted_var1_Object, var3_Roughness, var4_out_albedo, var5_out_specular, var6_out_oren_nayar_roughness); + + ALBEDO = var4_out_albedo; + SPECULAR = var5_out_specular; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness } " @@ -737,41 +813,65 @@ void vertex() { void fragment() { - vec3 var1_TextureCoordinate_Object; - var1_TextureCoordinate_Object = VERTEX; - mat4 var2_inverted_model_matrix; - var2_inverted_model_matrix = inverse(WORLD_MATRIX); - mat4 var3_inverted_view_matrix; - var3_inverted_view_matrix = inverse(INV_CAMERA_MATRIX); - var1_TextureCoordinate_Object = (var2_inverted_model_matrix * (var3_inverted_view_matrix * vec4(var1_TextureCoordinate_Object, 1.0))).xyz; - var1_TextureCoordinate_Object = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var1_TextureCoordinate_Object; - float var4_SeparateXYZ_X; - float var5_SeparateXYZ_Y; - float var6_SeparateXYZ_Z; - node_separate_xyz(var1_TextureCoordinate_Object, var4_SeparateXYZ_X, var5_SeparateXYZ_Y, var6_SeparateXYZ_Z); - float var7_Math002_Value_001; - var7_Math002_Value_001 = 0.10000000149011612; - float var8_Math002_Value; - node_math_multiply_no_clamp(var4_SeparateXYZ_X, var7_Math002_Value_001, var8_Math002_Value); - float var9_Math001_Value_001; - var9_Math001_Value_001 = 1.0; - float var10_Math001_Value; - node_math_multiply_no_clamp(var5_SeparateXYZ_Y, var9_Math001_Value_001, var10_Math001_Value); - float var11_Math_Value_001; - var11_Math_Value_001 = 0.10000000149011612; - float var12_Math_Value; - node_math_multiply_no_clamp(var6_SeparateXYZ_Z, var11_Math_Value_001, var12_Math_Value); - vec4 var13_CombineRGB_Image; - node_combine_rgb(var8_Math002_Value, var10_Math001_Value, var12_Math_Value, var13_CombineRGB_Image); - float var14_DiffuseBSDF_Roughness; - var14_DiffuseBSDF_Roughness = 0.0; - vec3 var15_DiffuseBSDF_output_albedo; - float var16_DiffuseBSDF_output_specular; - float var17_DiffuseBSDF_output_roughness; - node_bsdf_diffuse(var13_CombineRGB_Image, var14_DiffuseBSDF_Roughness, var15_DiffuseBSDF_output_albedo, var16_DiffuseBSDF_output_specular, var17_DiffuseBSDF_output_roughness); - ALBEDO = var15_DiffuseBSDF_output_albedo; - SPECULAR = var16_DiffuseBSDF_output_specular; - ROUGHNESS = var17_DiffuseBSDF_output_roughness; + mat4 inverted_view_matrix; + inverted_view_matrix = inverse(INV_CAMERA_MATRIX); + mat4 inverted_model_matrix; + inverted_model_matrix = inverse(WORLD_MATRIX); + // node: Texture Coordinate + // type: ShaderNodeTexCoord + vec3 var1_Object; + var1_Object = VERTEX; + // convert from view space to model space + var1_Object = (inverted_model_matrix * (inverted_view_matrix * vec4(var1_Object, 1.0))).xyz; + // convert from y-up to z-up + var1_Object = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var1_Object; + + // node: Separate XYZ + // type: ShaderNodeSeparateXYZ + float var2_X; + float var3_Y; + float var4_Z; + node_separate_xyz(var1_Object, var2_X, var3_Y, var4_Z); + + // node: Math.002 + // type: ShaderNodeMath + float var5_Value_001; + var5_Value_001 = 0.10000000149011612; + float var6_Value; + node_math_multiply_no_clamp(var2_X, var5_Value_001, var6_Value); + + // node: Math.001 + // type: ShaderNodeMath + float var7_Value_001; + var7_Value_001 = 1.0; + float var8_Value; + node_math_multiply_no_clamp(var3_Y, var7_Value_001, var8_Value); + + // node: Math + // type: ShaderNodeMath + float var9_Value_001; + var9_Value_001 = 0.10000000149011612; + float var10_Value; + node_math_multiply_no_clamp(var4_Z, var9_Value_001, var10_Value); + + // node: Combine RGB + // type: ShaderNodeCombineRGB + vec4 var11_Image; + node_combine_rgb(var6_Value, var8_Value, var10_Value, var11_Image); + + // node: Diffuse BSDF + // type: ShaderNodeBsdfDiffuse + float var12_Roughness; + var12_Roughness = 0.0; + vec3 var13_out_albedo; + float var14_out_specular; + float var15_out_oren_nayar_roughness; + node_bsdf_diffuse(var11_Image, var12_Roughness, var13_out_albedo, var14_out_specular, var15_out_oren_nayar_roughness); + + ALBEDO = var13_out_albedo; + SPECULAR = var14_out_specular; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness } " @@ -799,7 +899,7 @@ void node_bsdf_diffuse(vec4 color, float roughness, out vec3 albedo, void node_bsdf_glossy(vec4 color, float roughness, out vec3 albedo, out float metallic_out, out float roughness_out){ albedo = color.rgb; - roughness_out = sqrt(roughness); + roughness_out = roughness; metallic_out = 1.0; } @@ -811,30 +911,39 @@ void vertex() { void fragment() { - vec4 var1_DiffuseBSDF_Color; - var1_DiffuseBSDF_Color = vec4(0.8000000715255737, 0.003039679490029812, 0.009835286065936089, 1.0); - float var2_DiffuseBSDF_Roughness; - var2_DiffuseBSDF_Roughness = 0.0; - vec3 var3_DiffuseBSDF_output_albedo; - float var4_DiffuseBSDF_output_specular; - float var5_DiffuseBSDF_output_roughness; - node_bsdf_diffuse(var1_DiffuseBSDF_Color, var2_DiffuseBSDF_Roughness, var3_DiffuseBSDF_output_albedo, var4_DiffuseBSDF_output_specular, var5_DiffuseBSDF_output_roughness); - vec4 var6_GlossyBSDF_Color; - var6_GlossyBSDF_Color = vec4(0.019991951063275337, 0.02466939389705658, 0.8000000715255737, 1.0); - float var7_GlossyBSDF_Roughness; - var7_GlossyBSDF_Roughness = 0.0; - vec3 var8_GlossyBSDF_output_albedo; - float var9_GlossyBSDF_output_metallic; - float var10_GlossyBSDF_output_roughness; - node_bsdf_glossy(var6_GlossyBSDF_Color, var7_GlossyBSDF_Roughness, var8_GlossyBSDF_output_albedo, var9_GlossyBSDF_output_metallic, var10_GlossyBSDF_output_roughness); - vec3 var11_AddShader_albedo; - var11_AddShader_albedo = var3_DiffuseBSDF_output_albedo + var8_GlossyBSDF_output_albedo; - float var12_AddShader_roughness; - var12_AddShader_roughness = mix(var5_DiffuseBSDF_output_roughness, var10_GlossyBSDF_output_roughness, 0.5); - ALBEDO = var11_AddShader_albedo; - SPECULAR = var4_DiffuseBSDF_output_specular; - METALLIC = var9_GlossyBSDF_output_metallic; - ROUGHNESS = var12_AddShader_roughness; + // node: Diffuse BSDF + // type: ShaderNodeBsdfDiffuse + vec4 var1_Color; + var1_Color = vec4(0.8000000715255737, 0.003039679490029812, 0.009835286065936089, 1.0); + float var2_Roughness; + var2_Roughness = 0.0; + vec3 var3_out_albedo; + float var4_out_specular; + float var5_out_oren_nayar_roughness; + node_bsdf_diffuse(var1_Color, var2_Roughness, var3_out_albedo, var4_out_specular, var5_out_oren_nayar_roughness); + + // node: Glossy BSDF + // type: ShaderNodeBsdfGlossy + vec4 var6_Color; + var6_Color = vec4(0.019991951063275337, 0.02466939389705658, 0.8000000715255737, 1.0); + float var7_Roughness; + var7_Roughness = 0.0; + vec3 var8_out_albedo; + float var9_out_metallic; + float var10_out_roughness; + node_bsdf_glossy(var6_Color, var7_Roughness, var8_out_albedo, var9_out_metallic, var10_out_roughness); + + // node: Add Shader + // type: ShaderNodeAddShader + vec3 var11_albedo; + var11_albedo = mix(var3_out_albedo, var8_out_albedo, 0.5); + + ALBEDO = var11_albedo; + SPECULAR = var4_out_specular; + METALLIC = var9_out_metallic; + ROUGHNESS = var10_out_roughness; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness } " @@ -866,19 +975,26 @@ void vertex() { void fragment() { - vec4 var1_DiffuseBSDF_Color; - var1_DiffuseBSDF_Color = vec4(0.800000011920929, 0.800000011920929, 0.800000011920929, 1.0); - float var2_DiffuseBSDF_Roughness; - var2_DiffuseBSDF_Roughness = 0.0; - vec3 var3_DiffuseBSDF_output_albedo; - float var4_DiffuseBSDF_output_specular; - float var5_DiffuseBSDF_output_roughness; - node_bsdf_diffuse(var1_DiffuseBSDF_Color, var2_DiffuseBSDF_Roughness, var3_DiffuseBSDF_output_albedo, var4_DiffuseBSDF_output_specular, var5_DiffuseBSDF_output_roughness); - vec3 var6_MixShader_albedo; - var6_MixShader_albedo = mix(var3_DiffuseBSDF_output_albedo, vec3(0.0, 0.0, 0.0), 1.0); - ALBEDO = var6_MixShader_albedo; - SPECULAR = var4_DiffuseBSDF_output_specular; - ROUGHNESS = var5_DiffuseBSDF_output_roughness; + // node: Diffuse BSDF + // type: ShaderNodeBsdfDiffuse + vec4 var1_Color; + var1_Color = vec4(0.800000011920929, 0.800000011920929, 0.800000011920929, 1.0); + float var2_Roughness; + var2_Roughness = 0.0; + vec3 var3_out_albedo; + float var4_out_specular; + float var5_out_oren_nayar_roughness; + node_bsdf_diffuse(var1_Color, var2_Roughness, var3_out_albedo, var4_out_specular, var5_out_oren_nayar_roughness); + + // node: Mix Shader + // type: ShaderNodeMixShader + vec3 var6_albedo; + var6_albedo = mix(var3_out_albedo, vec3(0.0, 0.0, 0.0), 1.0); + + ALBEDO = var6_albedo; + SPECULAR = var4_out_specular; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness } " @@ -915,25 +1031,35 @@ void vertex() { void fragment() { - vec4 var1_DiffuseBSDF_Color; - var1_DiffuseBSDF_Color = vec4(0.04174342006444931, 0.060984428972005844, 0.8000000715255737, 1.0); - float var2_DiffuseBSDF_Roughness; - var2_DiffuseBSDF_Roughness = 0.0; - vec3 var3_DiffuseBSDF_output_albedo; - float var4_DiffuseBSDF_output_specular; - float var5_DiffuseBSDF_output_roughness; - node_bsdf_diffuse(var1_DiffuseBSDF_Color, var2_DiffuseBSDF_Roughness, var3_DiffuseBSDF_output_albedo, var4_DiffuseBSDF_output_specular, var5_DiffuseBSDF_output_roughness); - vec4 var6_TransparentBSDF_Color; - var6_TransparentBSDF_Color = vec4(1.0, 1.0, 1.0, 1.0); - float var7_TransparentBSDF_output_alpha; - node_bsdf_transparent(var6_TransparentBSDF_Color, var7_TransparentBSDF_output_alpha); - float var8_MixShader_alpha; - var8_MixShader_alpha = mix(1.0, var7_TransparentBSDF_output_alpha, 0.5); - ALBEDO = var3_DiffuseBSDF_output_albedo; - SPECULAR = var4_DiffuseBSDF_output_specular; - ROUGHNESS = var5_DiffuseBSDF_output_roughness; - EMISSION += textureLod(SCREEN_TEXTURE, SCREEN_UV - NORMAL.xy * uni1_refraction_offset, ROUGHNESS).rgb * (1.0 - var8_MixShader_alpha); - ALBEDO *= var8_MixShader_alpha; + // node: Diffuse BSDF + // type: ShaderNodeBsdfDiffuse + vec4 var1_Color; + var1_Color = vec4(0.04174342006444931, 0.060984428972005844, 0.8000000715255737, 1.0); + float var2_Roughness; + var2_Roughness = 0.0; + vec3 var3_out_albedo; + float var4_out_specular; + float var5_out_oren_nayar_roughness; + node_bsdf_diffuse(var1_Color, var2_Roughness, var3_out_albedo, var4_out_specular, var5_out_oren_nayar_roughness); + + // node: Transparent BSDF + // type: ShaderNodeBsdfTransparent + vec4 var6_Color; + var6_Color = vec4(1.0, 1.0, 1.0, 1.0); + float var7_out_alpha; + node_bsdf_transparent(var6_Color, var7_out_alpha); + + // node: Mix Shader + // type: ShaderNodeMixShader + float var8_alpha; + var8_alpha = mix(1.0, var7_out_alpha, 0.5); + + ALBEDO = var3_out_albedo; + SPECULAR = var4_out_specular; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness + EMISSION += textureLod(SCREEN_TEXTURE, SCREEN_UV - NORMAL.xy * uni1_refraction_offset, ROUGHNESS).rgb * (1.0 - var8_alpha); + ALBEDO *= var8_alpha; ALPHA = 1.0; } " @@ -1004,7 +1130,7 @@ void node_bsdf_principled(vec4 color, float subsurface, vec4 subsurface_color, sss_strength_out = subsurface; metallic_out = metallic; specular_out = pow((IOR - 1.0)/(IOR + 1.0), 2)/0.08; - roughness_out = sqrt(roughness); + roughness_out = roughness; clearcoat_out = clearcoat * (1.0 - transmission); clearcoat_gloss_out = 1.0 - clearcoat_roughness; anisotropy_out = clamp(anisotropy, 0.0, 1.0); @@ -1020,58 +1146,76 @@ void vertex() { void fragment() { - vec3 var1_TextureCoordinate_Object; - var1_TextureCoordinate_Object = VERTEX; - mat4 var2_inverted_model_matrix; - var2_inverted_model_matrix = inverse(WORLD_MATRIX); - mat4 var3_inverted_view_matrix; - var3_inverted_view_matrix = inverse(INV_CAMERA_MATRIX); - var1_TextureCoordinate_Object = (var2_inverted_model_matrix * (var3_inverted_view_matrix * vec4(var1_TextureCoordinate_Object, 1.0))).xyz; - var1_TextureCoordinate_Object = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var1_TextureCoordinate_Object; - float var4_auto_insert_RGBtoBW; - node_rgb_to_bw(vec4(var1_TextureCoordinate_Object, 1.0), var4_auto_insert_RGBtoBW); - float var5_Math_Value_001; - var5_Math_Value_001 = 0.0; - float var6_Math_Value; - node_math_add_clamp(var4_auto_insert_RGBtoBW, var5_Math_Value_001, var6_Math_Value); - vec4 var7_auto_insert_VecToColor; - var7_auto_insert_VecToColor = vec4(clamp(var1_TextureCoordinate_Object, vec3(0.0, 0.0, 0.0),vec3(1.0, 1.0, 1.0)).xyz, 1.0); - vec4 var8_PrincipledBSDF_SubsurfaceColor; - var8_PrincipledBSDF_SubsurfaceColor = vec4(0.699999988079071, 0.10000000149011612, 0.10000000149011612, 1.0); - float var9_PrincipledBSDF_Metallic; - var9_PrincipledBSDF_Metallic = 0.0; - float var10_PrincipledBSDF_Specular; - var10_PrincipledBSDF_Specular = 0.5; - float var11_PrincipledBSDF_Roughness; - var11_PrincipledBSDF_Roughness = 0.5; - float var12_PrincipledBSDF_Clearcoat; - var12_PrincipledBSDF_Clearcoat = 0.0; - float var13_PrincipledBSDF_ClearcoatRoughness; - var13_PrincipledBSDF_ClearcoatRoughness = 0.029999999329447746; - float var14_PrincipledBSDF_Anisotropic; - var14_PrincipledBSDF_Anisotropic = 0.0; - float var15_PrincipledBSDF_Transmission; - var15_PrincipledBSDF_Transmission = 0.0; - float var16_PrincipledBSDF_IOR; - var16_PrincipledBSDF_IOR = 1.4500000476837158; - vec3 var17_PrincipledBSDF_output_albedo; - float var18_PrincipledBSDF_output_sss_strength; - float var19_PrincipledBSDF_output_metallic; - float var20_PrincipledBSDF_output_specular; - float var21_PrincipledBSDF_output_roughness; - float var22_PrincipledBSDF_output_clearcoat; - float var23_PrincipledBSDF_output_clearcoat_gloss; - float var24_PrincipledBSDF_output_anisotropy; - float var25_PrincipledBSDF_output_transmission; - float var26_PrincipledBSDF_output_ior; - node_bsdf_principled(var7_auto_insert_VecToColor, var6_Math_Value, var8_PrincipledBSDF_SubsurfaceColor, var9_PrincipledBSDF_Metallic, var10_PrincipledBSDF_Specular, var11_PrincipledBSDF_Roughness, var12_PrincipledBSDF_Clearcoat, var13_PrincipledBSDF_ClearcoatRoughness, var14_PrincipledBSDF_Anisotropic, var15_PrincipledBSDF_Transmission, var16_PrincipledBSDF_IOR, var17_PrincipledBSDF_output_albedo, var18_PrincipledBSDF_output_sss_strength, var19_PrincipledBSDF_output_metallic, var20_PrincipledBSDF_output_specular, var21_PrincipledBSDF_output_roughness, var22_PrincipledBSDF_output_clearcoat, var23_PrincipledBSDF_output_clearcoat_gloss, var24_PrincipledBSDF_output_anisotropy, var25_PrincipledBSDF_output_transmission, var26_PrincipledBSDF_output_ior); - ALBEDO = var17_PrincipledBSDF_output_albedo; - SSS_STRENGTH = var18_PrincipledBSDF_output_sss_strength; - SPECULAR = var20_PrincipledBSDF_output_specular; - METALLIC = var19_PrincipledBSDF_output_metallic; - ROUGHNESS = var21_PrincipledBSDF_output_roughness; - CLEARCOAT = var22_PrincipledBSDF_output_clearcoat; - CLEARCOAT_GLOSS = var23_PrincipledBSDF_output_clearcoat_gloss; + mat4 inverted_view_matrix; + inverted_view_matrix = inverse(INV_CAMERA_MATRIX); + mat4 inverted_model_matrix; + inverted_model_matrix = inverse(WORLD_MATRIX); + // node: Texture Coordinate + // type: ShaderNodeTexCoord + vec3 var1_Object; + var1_Object = VERTEX; + // convert from view space to model space + var1_Object = (inverted_model_matrix * (inverted_view_matrix * vec4(var1_Object, 1.0))).xyz; + // convert from y-up to z-up + var1_Object = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var1_Object; + + // node: Reroute + // type: NodeReroute + + // node: Math + // type: ShaderNodeMath + float var2_converted_var1_Object; + node_rgb_to_bw(vec4(var1_Object, 1.0), var2_converted_var1_Object); + float var3_Value_001; + var3_Value_001 = 0.0; + float var4_Value; + node_math_add_clamp(var2_converted_var1_Object, var3_Value_001, var4_Value); + + // node: Principled BSDF + // type: ShaderNodeBsdfPrincipled + vec4 var5_converted_var1_Object; + var5_converted_var1_Object = vec4(clamp(var1_Object, vec3(0.0, 0.0, 0.0),vec3(1.0, 1.0, 1.0)).xyz, 1.0); + vec4 var6_SubsurfaceColor; + var6_SubsurfaceColor = vec4(0.699999988079071, 0.10000000149011612, 0.10000000149011612, 1.0); + float var7_Metallic; + var7_Metallic = 0.0; + float var8_Specular; + var8_Specular = 0.5; + float var9_Roughness; + var9_Roughness = 0.5; + float var10_Clearcoat; + var10_Clearcoat = 0.0; + float var11_ClearcoatRoughness; + var11_ClearcoatRoughness = 0.029999999329447746; + float var12_Anisotropic; + var12_Anisotropic = 0.0; + float var13_Transmission; + var13_Transmission = 0.0; + float var14_IOR; + var14_IOR = 1.4500000476837158; + vec3 var15_out_albedo; + float var16_out_sss_strength; + float var17_out_metallic; + float var18_out_specular; + float var19_out_roughness; + float var20_out_clearcoat; + float var21_out_clearcoat_gloss; + float var22_out_anisotropy; + float var23_out_transmission; + float var24_out_ior; + node_bsdf_principled(var5_converted_var1_Object, var4_Value, var6_SubsurfaceColor, var7_Metallic, var8_Specular, var9_Roughness, var10_Clearcoat, var11_ClearcoatRoughness, var12_Anisotropic, var13_Transmission, var14_IOR, var15_out_albedo, var16_out_sss_strength, var17_out_metallic, var18_out_specular, var19_out_roughness, var20_out_clearcoat, var21_out_clearcoat_gloss, var22_out_anisotropy, var23_out_transmission, var24_out_ior); + + ALBEDO = var15_out_albedo; + SSS_STRENGTH = var16_out_sss_strength; + SPECULAR = var18_out_specular; + METALLIC = var17_out_metallic; + ROUGHNESS = var19_out_roughness; + CLEARCOAT = var20_out_clearcoat; + CLEARCOAT_GLOSS = var21_out_clearcoat_gloss; + // transmission usually does not work.. + // TRANSMISSION = vec3(1.0, 1.0, 1.0) * var23_out_transmission; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness } " @@ -1103,17 +1247,21 @@ void vertex() { void fragment() { - vec4 var1_DiffuseBSDF_Color; - var1_DiffuseBSDF_Color = vec4(0.7874122262001038, 0.7874122262001038, 0.7874122262001038, 1.0); - float var2_DiffuseBSDF_Roughness; - var2_DiffuseBSDF_Roughness = 0.0; - vec3 var3_DiffuseBSDF_output_albedo; - float var4_DiffuseBSDF_output_specular; - float var5_DiffuseBSDF_output_roughness; - node_bsdf_diffuse(var1_DiffuseBSDF_Color, var2_DiffuseBSDF_Roughness, var3_DiffuseBSDF_output_albedo, var4_DiffuseBSDF_output_specular, var5_DiffuseBSDF_output_roughness); - ALBEDO = var3_DiffuseBSDF_output_albedo; - SPECULAR = var4_DiffuseBSDF_output_specular; - ROUGHNESS = var5_DiffuseBSDF_output_roughness; + // node: Diffuse BSDF + // type: ShaderNodeBsdfDiffuse + vec4 var1_Color; + var1_Color = vec4(0.7874122262001038, 0.7874122262001038, 0.7874122262001038, 1.0); + float var2_Roughness; + var2_Roughness = 0.0; + vec3 var3_out_albedo; + float var4_out_specular; + float var5_out_oren_nayar_roughness; + node_bsdf_diffuse(var1_Color, var2_Roughness, var3_out_albedo, var4_out_specular, var5_out_oren_nayar_roughness); + + ALBEDO = var3_out_albedo; + SPECULAR = var4_out_specular; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness } " diff --git a/tests/reference_exports/material_cycle/material_normal.escn b/tests/reference_exports/material_cycle/material_normal.escn index 1243143..8bca051 100644 --- a/tests/reference_exports/material_cycle/material_normal.escn +++ b/tests/reference_exports/material_cycle/material_normal.escn @@ -9,7 +9,7 @@ resource_name = "Shader Nodetree" code = "shader_type spatial; render_mode blend_mix,depth_draw_always,cull_back,diffuse_burley,specular_schlick_ggx; -uniform sampler2D uni1_ImageTexturetexture_image : hint_normal; +uniform sampler2D uni1_Normal_OGLpng : hint_normal; void node_tex_image(vec3 co, sampler2D ima, out vec4 color, out float alpha) { @@ -43,29 +43,47 @@ void vertex() { void fragment() { - vec4 var1_ImageTexture_Color; - float var2_ImageTexture_Alpha; - node_tex_image(vec3(UV, 0.0), uni1_ImageTexturetexture_image, var1_ImageTexture_Color, var2_ImageTexture_Alpha); - vec3 var3_NormalMap_out_normal; - node_normal_map_tangent(1.0, var1_ImageTexture_Color, NORMAL, TANGENT, BINORMAL, var3_NormalMap_out_normal); - mat4 var4_inverted_view_matrix; - var4_inverted_view_matrix = inverse(INV_CAMERA_MATRIX); - var3_NormalMap_out_normal = normalize(var4_inverted_view_matrix * vec4(var3_NormalMap_out_normal, 0.0)).xyz; - var3_NormalMap_out_normal = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var3_NormalMap_out_normal; - vec4 var5_DiffuseBSDF_Color; - var5_DiffuseBSDF_Color = vec4(0.800000011920929, 0.800000011920929, 0.800000011920929, 1.0); - float var6_DiffuseBSDF_Roughness; - var6_DiffuseBSDF_Roughness = 0.0; - vec3 var7_DiffuseBSDF_output_albedo; - float var8_DiffuseBSDF_output_specular; - float var9_DiffuseBSDF_output_roughness; - node_bsdf_diffuse(var5_DiffuseBSDF_Color, var6_DiffuseBSDF_Roughness, var7_DiffuseBSDF_output_albedo, var8_DiffuseBSDF_output_specular, var9_DiffuseBSDF_output_roughness); - var3_NormalMap_out_normal = mat3(vec3(1, 0, 0), vec3(0, 0, -1), vec3(0, 1, 0)) * var3_NormalMap_out_normal; - var3_NormalMap_out_normal = normalize(INV_CAMERA_MATRIX * vec4(var3_NormalMap_out_normal, 0.0)).xyz; - ALBEDO = var7_DiffuseBSDF_output_albedo; - SPECULAR = var8_DiffuseBSDF_output_specular; - ROUGHNESS = var9_DiffuseBSDF_output_roughness; - NORMAL = var3_NormalMap_out_normal; + mat4 inverted_view_matrix; + inverted_view_matrix = inverse(INV_CAMERA_MATRIX); + // node: Texture Coordinate + // type: ShaderNodeTexCoord + + // node: Image Texture + // type: ShaderNodeTexImage + // texture image from node Image Texture + vec4 var1_Color; + float var2_Alpha; + node_tex_image(vec3(UV, 0.0), uni1_Normal_OGLpng, var1_Color, var2_Alpha); + + // node: Normal Map + // type: ShaderNodeNormalMap + vec3 var3_out_normal; + node_normal_map_tangent(1.0, var1_Color, NORMAL, TANGENT, BINORMAL, var3_out_normal); + // convert from view space to world space + var3_out_normal = normalize(inverted_view_matrix * vec4(var3_out_normal, 0.0)).xyz; + // convert from y-up to z-up + var3_out_normal = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var3_out_normal; + + // node: Diffuse BSDF + // type: ShaderNodeBsdfDiffuse + vec4 var4_Color; + var4_Color = vec4(0.800000011920929, 0.800000011920929, 0.800000011920929, 1.0); + float var5_Roughness; + var5_Roughness = 0.0; + vec3 var6_out_albedo; + float var7_out_specular; + float var8_out_oren_nayar_roughness; + node_bsdf_diffuse(var4_Color, var5_Roughness, var6_out_albedo, var7_out_specular, var8_out_oren_nayar_roughness); + // convert from z-up to y-up + var3_out_normal = mat3(vec3(1, 0, 0), vec3(0, 0, -1), vec3(0, 1, 0)) * var3_out_normal; + // convert from world space to view space + var3_out_normal = normalize(INV_CAMERA_MATRIX * vec4(var3_out_normal, 0.0)).xyz; + + ALBEDO = var6_out_albedo; + SPECULAR = var7_out_specular; + NORMAL = var3_out_normal; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness } " @@ -73,7 +91,7 @@ void fragment() { resource_name = "" shader = SubResource(1) -shader_param/uni1_ImageTexturetexture_image = ExtResource(1) +shader_param/uni1_Normal_OGLpng = ExtResource(1) [sub_resource id=3 type="ArrayMesh"] @@ -130,27 +148,39 @@ void vertex() { void fragment() { - vec3 var1_TextureCoordinate_Normal; - var1_TextureCoordinate_Normal = NORMAL; - mat4 var2_inverted_model_matrix; - var2_inverted_model_matrix = inverse(WORLD_MATRIX); - mat4 var3_inverted_view_matrix; - var3_inverted_view_matrix = inverse(INV_CAMERA_MATRIX); - var1_TextureCoordinate_Normal = normalize(var2_inverted_model_matrix * (var3_inverted_view_matrix * vec4(var1_TextureCoordinate_Normal, 0.0))).xyz; - var1_TextureCoordinate_Normal = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var1_TextureCoordinate_Normal; - vec3 var4_Mapping_Vector; - node_mapping(var1_TextureCoordinate_Normal, mat4(vec4(0.9770439267158508, -0.033913709223270416, -0.01857101544737816, -0.0), vec4(0.14079418778419495, 0.2036508023738861, -0.021205507218837738, 0.0), vec4(0.15988115966320038, 0.027910366654396057, 0.13216260075569153, -0.0), vec4(-6.83930778503418, 0.23739595711231232, 0.1299971044063568, 1.0)), vec3(0.0, 0.0, 0.0), vec3(1.0, 1.0, 1.0), 0.0, 0.0, var4_Mapping_Vector); - vec4 var5_auto_insert_VecToColor; - var5_auto_insert_VecToColor = vec4(clamp(var4_Mapping_Vector, vec3(0.0, 0.0, 0.0),vec3(1.0, 1.0, 1.0)).xyz, 1.0); - float var6_DiffuseBSDF_Roughness; - var6_DiffuseBSDF_Roughness = 0.0; - vec3 var7_DiffuseBSDF_output_albedo; - float var8_DiffuseBSDF_output_specular; - float var9_DiffuseBSDF_output_roughness; - node_bsdf_diffuse(var5_auto_insert_VecToColor, var6_DiffuseBSDF_Roughness, var7_DiffuseBSDF_output_albedo, var8_DiffuseBSDF_output_specular, var9_DiffuseBSDF_output_roughness); - ALBEDO = var7_DiffuseBSDF_output_albedo; - SPECULAR = var8_DiffuseBSDF_output_specular; - ROUGHNESS = var9_DiffuseBSDF_output_roughness; + mat4 inverted_view_matrix; + inverted_view_matrix = inverse(INV_CAMERA_MATRIX); + mat4 inverted_model_matrix; + inverted_model_matrix = inverse(WORLD_MATRIX); + // node: Texture Coordinate + // type: ShaderNodeTexCoord + vec3 var1_Normal; + var1_Normal = NORMAL; + // convert from view space to model space + var1_Normal = normalize(inverted_model_matrix * (inverted_view_matrix * vec4(var1_Normal, 0.0))).xyz; + // convert from y-up to z-up + var1_Normal = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var1_Normal; + + // node: Mapping + // type: ShaderNodeMapping + vec3 var2_Vector; + node_mapping(var1_Normal, mat4(vec4(0.9770439267158508, -0.033913709223270416, -0.01857101544737816, -0.0), vec4(0.14079418778419495, 0.2036508023738861, -0.021205507218837738, 0.0), vec4(0.15988115966320038, 0.027910366654396057, 0.13216260075569153, -0.0), vec4(-6.83930778503418, 0.23739595711231232, 0.1299971044063568, 1.0)), vec3(0.0, 0.0, 0.0), vec3(1.0, 1.0, 1.0), 0.0, 0.0, var2_Vector); + + // node: Diffuse BSDF + // type: ShaderNodeBsdfDiffuse + vec4 var3_converted_var2_Vector; + var3_converted_var2_Vector = vec4(clamp(var2_Vector, vec3(0.0, 0.0, 0.0),vec3(1.0, 1.0, 1.0)).xyz, 1.0); + float var4_Roughness; + var4_Roughness = 0.0; + vec3 var5_out_albedo; + float var6_out_specular; + float var7_out_oren_nayar_roughness; + node_bsdf_diffuse(var3_converted_var2_Vector, var4_Roughness, var5_out_albedo, var6_out_specular, var7_out_oren_nayar_roughness); + + ALBEDO = var5_out_albedo; + SPECULAR = var6_out_specular; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness } " @@ -214,27 +244,39 @@ void vertex() { void fragment() { - vec3 var1_TextureCoordinate_Normal; - var1_TextureCoordinate_Normal = NORMAL; - mat4 var2_inverted_model_matrix; - var2_inverted_model_matrix = inverse(WORLD_MATRIX); - mat4 var3_inverted_view_matrix; - var3_inverted_view_matrix = inverse(INV_CAMERA_MATRIX); - var1_TextureCoordinate_Normal = normalize(var2_inverted_model_matrix * (var3_inverted_view_matrix * vec4(var1_TextureCoordinate_Normal, 0.0))).xyz; - var1_TextureCoordinate_Normal = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var1_TextureCoordinate_Normal; - vec3 var4_Mapping_Vector; - node_mapping(var1_TextureCoordinate_Normal, mat4(vec4(16.43028450012207, 0.0, -2.3676400184631348, 0.0), vec4(0.13027772307395935, 3.894315481185913, 0.9040648937225342, 0.0), vec4(0.13886050879955292, -0.22835084795951843, 0.9636252522468567, 0.0), vec4(0.0, 0.0, 0.0, 1.0)), vec3(0.0, 0.0, 0.0), vec3(1.0, 1.0, 1.0), 0.0, 0.0, var4_Mapping_Vector); - vec4 var5_auto_insert_VecToColor; - var5_auto_insert_VecToColor = vec4(clamp(var4_Mapping_Vector, vec3(0.0, 0.0, 0.0),vec3(1.0, 1.0, 1.0)).xyz, 1.0); - float var6_DiffuseBSDF_Roughness; - var6_DiffuseBSDF_Roughness = 0.0; - vec3 var7_DiffuseBSDF_output_albedo; - float var8_DiffuseBSDF_output_specular; - float var9_DiffuseBSDF_output_roughness; - node_bsdf_diffuse(var5_auto_insert_VecToColor, var6_DiffuseBSDF_Roughness, var7_DiffuseBSDF_output_albedo, var8_DiffuseBSDF_output_specular, var9_DiffuseBSDF_output_roughness); - ALBEDO = var7_DiffuseBSDF_output_albedo; - SPECULAR = var8_DiffuseBSDF_output_specular; - ROUGHNESS = var9_DiffuseBSDF_output_roughness; + mat4 inverted_view_matrix; + inverted_view_matrix = inverse(INV_CAMERA_MATRIX); + mat4 inverted_model_matrix; + inverted_model_matrix = inverse(WORLD_MATRIX); + // node: Texture Coordinate + // type: ShaderNodeTexCoord + vec3 var1_Normal; + var1_Normal = NORMAL; + // convert from view space to model space + var1_Normal = normalize(inverted_model_matrix * (inverted_view_matrix * vec4(var1_Normal, 0.0))).xyz; + // convert from y-up to z-up + var1_Normal = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var1_Normal; + + // node: Mapping + // type: ShaderNodeMapping + vec3 var2_Vector; + node_mapping(var1_Normal, mat4(vec4(16.43028450012207, 0.0, -2.3676400184631348, 0.0), vec4(0.13027772307395935, 3.894315481185913, 0.9040648937225342, 0.0), vec4(0.13886050879955292, -0.22835084795951843, 0.9636252522468567, 0.0), vec4(0.0, 0.0, 0.0, 1.0)), vec3(0.0, 0.0, 0.0), vec3(1.0, 1.0, 1.0), 0.0, 0.0, var2_Vector); + + // node: Diffuse BSDF + // type: ShaderNodeBsdfDiffuse + vec4 var3_converted_var2_Vector; + var3_converted_var2_Vector = vec4(clamp(var2_Vector, vec3(0.0, 0.0, 0.0),vec3(1.0, 1.0, 1.0)).xyz, 1.0); + float var4_Roughness; + var4_Roughness = 0.0; + vec3 var5_out_albedo; + float var6_out_specular; + float var7_out_oren_nayar_roughness; + node_bsdf_diffuse(var3_converted_var2_Vector, var4_Roughness, var5_out_albedo, var6_out_specular, var7_out_oren_nayar_roughness); + + ALBEDO = var5_out_albedo; + SPECULAR = var6_out_specular; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness } " @@ -278,28 +320,40 @@ void vertex() { void fragment() { - vec3 var1_TextureCoordinate_Normal; - var1_TextureCoordinate_Normal = NORMAL; - mat4 var2_inverted_model_matrix; - var2_inverted_model_matrix = inverse(WORLD_MATRIX); - mat4 var3_inverted_view_matrix; - var3_inverted_view_matrix = inverse(INV_CAMERA_MATRIX); - var1_TextureCoordinate_Normal = normalize(var2_inverted_model_matrix * (var3_inverted_view_matrix * vec4(var1_TextureCoordinate_Normal, 0.0))).xyz; - var1_TextureCoordinate_Normal = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var1_TextureCoordinate_Normal; - vec3 var4_Mapping_Vector; - node_mapping(var1_TextureCoordinate_Normal, mat4(vec4(1.0, 0.0, 0.0, 0.0), vec4(0.0, -4.371138828673793e-08, 1.0, 0.0), vec4(0.0, -1.0, -4.371138828673793e-08, 0.0), vec4(0.0, 0.0, 0.0, 1.0)), vec3(0.0, 0.0, 0.0), vec3(1.0, 1.0, 1.0), 0.0, 0.0, var4_Mapping_Vector); - var4_Mapping_Vector = normalize(var4_Mapping_Vector); - vec4 var5_auto_insert_VecToColor; - var5_auto_insert_VecToColor = vec4(clamp(var4_Mapping_Vector, vec3(0.0, 0.0, 0.0),vec3(1.0, 1.0, 1.0)).xyz, 1.0); - float var6_DiffuseBSDF_Roughness; - var6_DiffuseBSDF_Roughness = 0.0; - vec3 var7_DiffuseBSDF_output_albedo; - float var8_DiffuseBSDF_output_specular; - float var9_DiffuseBSDF_output_roughness; - node_bsdf_diffuse(var5_auto_insert_VecToColor, var6_DiffuseBSDF_Roughness, var7_DiffuseBSDF_output_albedo, var8_DiffuseBSDF_output_specular, var9_DiffuseBSDF_output_roughness); - ALBEDO = var7_DiffuseBSDF_output_albedo; - SPECULAR = var8_DiffuseBSDF_output_specular; - ROUGHNESS = var9_DiffuseBSDF_output_roughness; + mat4 inverted_view_matrix; + inverted_view_matrix = inverse(INV_CAMERA_MATRIX); + mat4 inverted_model_matrix; + inverted_model_matrix = inverse(WORLD_MATRIX); + // node: Texture Coordinate + // type: ShaderNodeTexCoord + vec3 var1_Normal; + var1_Normal = NORMAL; + // convert from view space to model space + var1_Normal = normalize(inverted_model_matrix * (inverted_view_matrix * vec4(var1_Normal, 0.0))).xyz; + // convert from y-up to z-up + var1_Normal = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var1_Normal; + + // node: Mapping + // type: ShaderNodeMapping + vec3 var2_Vector; + node_mapping(var1_Normal, mat4(vec4(1.0, 0.0, 0.0, 0.0), vec4(0.0, -4.371138828673793e-08, 1.0, 0.0), vec4(0.0, -1.0, -4.371138828673793e-08, 0.0), vec4(0.0, 0.0, 0.0, 1.0)), vec3(0.0, 0.0, 0.0), vec3(1.0, 1.0, 1.0), 0.0, 0.0, var2_Vector); + var2_Vector = normalize(var2_Vector); + + // node: Diffuse BSDF + // type: ShaderNodeBsdfDiffuse + vec4 var3_converted_var2_Vector; + var3_converted_var2_Vector = vec4(clamp(var2_Vector, vec3(0.0, 0.0, 0.0),vec3(1.0, 1.0, 1.0)).xyz, 1.0); + float var4_Roughness; + var4_Roughness = 0.0; + vec3 var5_out_albedo; + float var6_out_specular; + float var7_out_oren_nayar_roughness; + node_bsdf_diffuse(var3_converted_var2_Vector, var4_Roughness, var5_out_albedo, var6_out_specular, var7_out_oren_nayar_roughness); + + ALBEDO = var5_out_albedo; + SPECULAR = var6_out_specular; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness } " @@ -343,27 +397,39 @@ void vertex() { void fragment() { - vec3 var1_TextureCoordinate_Object; - var1_TextureCoordinate_Object = VERTEX; - mat4 var2_inverted_model_matrix; - var2_inverted_model_matrix = inverse(WORLD_MATRIX); - mat4 var3_inverted_view_matrix; - var3_inverted_view_matrix = inverse(INV_CAMERA_MATRIX); - var1_TextureCoordinate_Object = (var2_inverted_model_matrix * (var3_inverted_view_matrix * vec4(var1_TextureCoordinate_Object, 1.0))).xyz; - var1_TextureCoordinate_Object = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var1_TextureCoordinate_Object; - vec3 var4_Mapping_Vector; - node_mapping(var1_TextureCoordinate_Object, mat4(vec4(14.399999618530273, 0.0, 0.0, 0.0), vec4(0.0, -4.371138828673793e-08, 1.0, 0.0), vec4(0.0, -1.0, -4.371138828673793e-08, 0.0), vec4(8.80000114440918, -3.999999761581421, 0.0, 1.0)), vec3(0.0, 0.0, 0.0), vec3(1.0, 1.0, 1.0), 0.0, 0.0, var4_Mapping_Vector); - vec4 var5_auto_insert_VecToColor; - var5_auto_insert_VecToColor = vec4(clamp(var4_Mapping_Vector, vec3(0.0, 0.0, 0.0),vec3(1.0, 1.0, 1.0)).xyz, 1.0); - float var6_DiffuseBSDF_Roughness; - var6_DiffuseBSDF_Roughness = 0.0; - vec3 var7_DiffuseBSDF_output_albedo; - float var8_DiffuseBSDF_output_specular; - float var9_DiffuseBSDF_output_roughness; - node_bsdf_diffuse(var5_auto_insert_VecToColor, var6_DiffuseBSDF_Roughness, var7_DiffuseBSDF_output_albedo, var8_DiffuseBSDF_output_specular, var9_DiffuseBSDF_output_roughness); - ALBEDO = var7_DiffuseBSDF_output_albedo; - SPECULAR = var8_DiffuseBSDF_output_specular; - ROUGHNESS = var9_DiffuseBSDF_output_roughness; + mat4 inverted_view_matrix; + inverted_view_matrix = inverse(INV_CAMERA_MATRIX); + mat4 inverted_model_matrix; + inverted_model_matrix = inverse(WORLD_MATRIX); + // node: Texture Coordinate + // type: ShaderNodeTexCoord + vec3 var1_Object; + var1_Object = VERTEX; + // convert from view space to model space + var1_Object = (inverted_model_matrix * (inverted_view_matrix * vec4(var1_Object, 1.0))).xyz; + // convert from y-up to z-up + var1_Object = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var1_Object; + + // node: Mapping + // type: ShaderNodeMapping + vec3 var2_Vector; + node_mapping(var1_Object, mat4(vec4(14.399999618530273, 0.0, 0.0, 0.0), vec4(0.0, -4.371138828673793e-08, 1.0, 0.0), vec4(0.0, -1.0, -4.371138828673793e-08, 0.0), vec4(8.80000114440918, -3.999999761581421, 0.0, 1.0)), vec3(0.0, 0.0, 0.0), vec3(1.0, 1.0, 1.0), 0.0, 0.0, var2_Vector); + + // node: Diffuse BSDF + // type: ShaderNodeBsdfDiffuse + vec4 var3_converted_var2_Vector; + var3_converted_var2_Vector = vec4(clamp(var2_Vector, vec3(0.0, 0.0, 0.0),vec3(1.0, 1.0, 1.0)).xyz, 1.0); + float var4_Roughness; + var4_Roughness = 0.0; + vec3 var5_out_albedo; + float var6_out_specular; + float var7_out_oren_nayar_roughness; + node_bsdf_diffuse(var3_converted_var2_Vector, var4_Roughness, var5_out_albedo, var6_out_specular, var7_out_oren_nayar_roughness); + + ALBEDO = var5_out_albedo; + SPECULAR = var6_out_specular; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness } " @@ -402,7 +468,7 @@ surfaces/0 = { resource_name = "Shader Nodetree" code = "shader_type spatial; render_mode blend_mix,depth_draw_always,cull_back,diffuse_burley,specular_schlick_ggx; -uniform sampler2D uni1_ImageTexturetexture_image : hint_normal; +uniform sampler2D uni1_Normal_OGLpng : hint_normal; void node_tex_image(vec3 co, sampler2D ima, out vec4 color, out float alpha) { @@ -435,28 +501,45 @@ void vertex() { void fragment() { - vec4 var1_ImageTexture_Color; - float var2_ImageTexture_Alpha; - node_tex_image(vec3(UV, 0.0), uni1_ImageTexturetexture_image, var1_ImageTexture_Color, var2_ImageTexture_Alpha); - vec3 var3_NormalMap_out_normal; - mat4 var4_inverted_view_matrix; - var4_inverted_view_matrix = inverse(INV_CAMERA_MATRIX); - node_normal_map_object(8.0, var1_ImageTexture_Color, NORMAL, var4_inverted_view_matrix, WORLD_MATRIX, var3_NormalMap_out_normal); - var3_NormalMap_out_normal = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var3_NormalMap_out_normal; - vec4 var5_DiffuseBSDF_Color; - var5_DiffuseBSDF_Color = vec4(0.800000011920929, 0.800000011920929, 0.800000011920929, 1.0); - float var6_DiffuseBSDF_Roughness; - var6_DiffuseBSDF_Roughness = 0.0; - vec3 var7_DiffuseBSDF_output_albedo; - float var8_DiffuseBSDF_output_specular; - float var9_DiffuseBSDF_output_roughness; - node_bsdf_diffuse(var5_DiffuseBSDF_Color, var6_DiffuseBSDF_Roughness, var7_DiffuseBSDF_output_albedo, var8_DiffuseBSDF_output_specular, var9_DiffuseBSDF_output_roughness); - var3_NormalMap_out_normal = mat3(vec3(1, 0, 0), vec3(0, 0, -1), vec3(0, 1, 0)) * var3_NormalMap_out_normal; - var3_NormalMap_out_normal = normalize(INV_CAMERA_MATRIX * vec4(var3_NormalMap_out_normal, 0.0)).xyz; - ALBEDO = var7_DiffuseBSDF_output_albedo; - SPECULAR = var8_DiffuseBSDF_output_specular; - ROUGHNESS = var9_DiffuseBSDF_output_roughness; - NORMAL = var3_NormalMap_out_normal; + mat4 inverted_view_matrix; + inverted_view_matrix = inverse(INV_CAMERA_MATRIX); + // node: Texture Coordinate + // type: ShaderNodeTexCoord + + // node: Image Texture + // type: ShaderNodeTexImage + // texture image from node Image Texture + vec4 var1_Color; + float var2_Alpha; + node_tex_image(vec3(UV, 0.0), uni1_Normal_OGLpng, var1_Color, var2_Alpha); + + // node: Normal Map + // type: ShaderNodeNormalMap + vec3 var3_out_normal; + node_normal_map_object(8.0, var1_Color, NORMAL, inverted_view_matrix, WORLD_MATRIX, var3_out_normal); + // convert from y-up to z-up + var3_out_normal = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var3_out_normal; + + // node: Diffuse BSDF + // type: ShaderNodeBsdfDiffuse + vec4 var4_Color; + var4_Color = vec4(0.800000011920929, 0.800000011920929, 0.800000011920929, 1.0); + float var5_Roughness; + var5_Roughness = 0.0; + vec3 var6_out_albedo; + float var7_out_specular; + float var8_out_oren_nayar_roughness; + node_bsdf_diffuse(var4_Color, var5_Roughness, var6_out_albedo, var7_out_specular, var8_out_oren_nayar_roughness); + // convert from z-up to y-up + var3_out_normal = mat3(vec3(1, 0, 0), vec3(0, 0, -1), vec3(0, 1, 0)) * var3_out_normal; + // convert from world space to view space + var3_out_normal = normalize(INV_CAMERA_MATRIX * vec4(var3_out_normal, 0.0)).xyz; + + ALBEDO = var6_out_albedo; + SPECULAR = var7_out_specular; + NORMAL = var3_out_normal; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness } " @@ -464,7 +547,7 @@ void fragment() { resource_name = "" shader = SubResource(15) -shader_param/uni1_ImageTexturetexture_image = ExtResource(1) +shader_param/uni1_Normal_OGLpng = ExtResource(1) [sub_resource id=17 type="ArrayMesh"] @@ -491,7 +574,7 @@ surfaces/0 = { resource_name = "Shader Nodetree" code = "shader_type spatial; render_mode blend_mix,depth_draw_always,cull_back,diffuse_burley,specular_schlick_ggx; -uniform sampler2D uni1_ImageTexturetexture_image : hint_normal; +uniform sampler2D uni1_Normal_OGLpng : hint_normal; void node_tex_image(vec3 co, sampler2D ima, out vec4 color, out float alpha) { @@ -523,28 +606,45 @@ void vertex() { void fragment() { - vec4 var1_ImageTexture_Color; - float var2_ImageTexture_Alpha; - node_tex_image(vec3(UV, 0.0), uni1_ImageTexturetexture_image, var1_ImageTexture_Color, var2_ImageTexture_Alpha); - vec3 var3_NormalMap_out_normal; - mat4 var4_inverted_view_matrix; - var4_inverted_view_matrix = inverse(INV_CAMERA_MATRIX); - node_normal_map_world(8.0, var1_ImageTexture_Color, NORMAL, var4_inverted_view_matrix, var3_NormalMap_out_normal); - var3_NormalMap_out_normal = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var3_NormalMap_out_normal; - vec4 var5_DiffuseBSDF_Color; - var5_DiffuseBSDF_Color = vec4(0.800000011920929, 0.800000011920929, 0.800000011920929, 1.0); - float var6_DiffuseBSDF_Roughness; - var6_DiffuseBSDF_Roughness = 0.0; - vec3 var7_DiffuseBSDF_output_albedo; - float var8_DiffuseBSDF_output_specular; - float var9_DiffuseBSDF_output_roughness; - node_bsdf_diffuse(var5_DiffuseBSDF_Color, var6_DiffuseBSDF_Roughness, var7_DiffuseBSDF_output_albedo, var8_DiffuseBSDF_output_specular, var9_DiffuseBSDF_output_roughness); - var3_NormalMap_out_normal = mat3(vec3(1, 0, 0), vec3(0, 0, -1), vec3(0, 1, 0)) * var3_NormalMap_out_normal; - var3_NormalMap_out_normal = normalize(INV_CAMERA_MATRIX * vec4(var3_NormalMap_out_normal, 0.0)).xyz; - ALBEDO = var7_DiffuseBSDF_output_albedo; - SPECULAR = var8_DiffuseBSDF_output_specular; - ROUGHNESS = var9_DiffuseBSDF_output_roughness; - NORMAL = var3_NormalMap_out_normal; + mat4 inverted_view_matrix; + inverted_view_matrix = inverse(INV_CAMERA_MATRIX); + // node: UV Map + // type: ShaderNodeUVMap + + // node: Image Texture + // type: ShaderNodeTexImage + // texture image from node Image Texture + vec4 var1_Color; + float var2_Alpha; + node_tex_image(vec3(UV, 0.0), uni1_Normal_OGLpng, var1_Color, var2_Alpha); + + // node: Normal Map + // type: ShaderNodeNormalMap + vec3 var3_out_normal; + node_normal_map_world(8.0, var1_Color, NORMAL, inverted_view_matrix, var3_out_normal); + // convert from y-up to z-up + var3_out_normal = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var3_out_normal; + + // node: Diffuse BSDF + // type: ShaderNodeBsdfDiffuse + vec4 var4_Color; + var4_Color = vec4(0.800000011920929, 0.800000011920929, 0.800000011920929, 1.0); + float var5_Roughness; + var5_Roughness = 0.0; + vec3 var6_out_albedo; + float var7_out_specular; + float var8_out_oren_nayar_roughness; + node_bsdf_diffuse(var4_Color, var5_Roughness, var6_out_albedo, var7_out_specular, var8_out_oren_nayar_roughness); + // convert from z-up to y-up + var3_out_normal = mat3(vec3(1, 0, 0), vec3(0, 0, -1), vec3(0, 1, 0)) * var3_out_normal; + // convert from world space to view space + var3_out_normal = normalize(INV_CAMERA_MATRIX * vec4(var3_out_normal, 0.0)).xyz; + + ALBEDO = var6_out_albedo; + SPECULAR = var7_out_specular; + NORMAL = var3_out_normal; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness } " @@ -552,7 +652,7 @@ void fragment() { resource_name = "" shader = SubResource(18) -shader_param/uni1_ImageTexturetexture_image = ExtResource(1) +shader_param/uni1_Normal_OGLpng = ExtResource(1) [sub_resource id=20 type="ArrayMesh"] @@ -579,7 +679,7 @@ surfaces/0 = { resource_name = "Shader Nodetree" code = "shader_type spatial; render_mode blend_mix,depth_draw_always,cull_back,diffuse_burley,specular_schlick_ggx; -uniform sampler2D uni1_ImageTexture001texture_image; +uniform sampler2D uni1_bumppng; void node_tex_image(vec3 co, sampler2D ima, out vec4 color, out float alpha) { @@ -635,31 +735,49 @@ void vertex() { void fragment() { - vec4 var1_ImageTexture001_Color; - float var2_ImageTexture001_Alpha; - node_tex_image(vec3(UV, 0.0), uni1_ImageTexture001texture_image, var1_ImageTexture001_Color, var2_ImageTexture001_Alpha); - float var3_auto_insert_RGBtoBW; - node_rgb_to_bw(var1_ImageTexture001_Color, var3_auto_insert_RGBtoBW); - vec3 var4_Bump_out_normal; - node_bump(1.0, 0.10000000149011612, var3_auto_insert_RGBtoBW, NORMAL, VERTEX, 0.0, var4_Bump_out_normal); - mat4 var5_inverted_view_matrix; - var5_inverted_view_matrix = inverse(INV_CAMERA_MATRIX); - var4_Bump_out_normal = normalize(var5_inverted_view_matrix * vec4(var4_Bump_out_normal, 0.0)).xyz; - var4_Bump_out_normal = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var4_Bump_out_normal; - vec4 var6_DiffuseBSDF_Color; - var6_DiffuseBSDF_Color = vec4(0.800000011920929, 0.800000011920929, 0.800000011920929, 1.0); - float var7_DiffuseBSDF_Roughness; - var7_DiffuseBSDF_Roughness = 0.0; - vec3 var8_DiffuseBSDF_output_albedo; - float var9_DiffuseBSDF_output_specular; - float var10_DiffuseBSDF_output_roughness; - node_bsdf_diffuse(var6_DiffuseBSDF_Color, var7_DiffuseBSDF_Roughness, var8_DiffuseBSDF_output_albedo, var9_DiffuseBSDF_output_specular, var10_DiffuseBSDF_output_roughness); - var4_Bump_out_normal = mat3(vec3(1, 0, 0), vec3(0, 0, -1), vec3(0, 1, 0)) * var4_Bump_out_normal; - var4_Bump_out_normal = normalize(INV_CAMERA_MATRIX * vec4(var4_Bump_out_normal, 0.0)).xyz; - ALBEDO = var8_DiffuseBSDF_output_albedo; - SPECULAR = var9_DiffuseBSDF_output_specular; - ROUGHNESS = var10_DiffuseBSDF_output_roughness; - NORMAL = var4_Bump_out_normal; + mat4 inverted_view_matrix; + inverted_view_matrix = inverse(INV_CAMERA_MATRIX); + // node: Texture Coordinate + // type: ShaderNodeTexCoord + + // node: Image Texture.001 + // type: ShaderNodeTexImage + // texture image from node Image Texture.001 + vec4 var1_Color; + float var2_Alpha; + node_tex_image(vec3(UV, 0.0), uni1_bumppng, var1_Color, var2_Alpha); + + // node: Bump + // type: ShaderNodeBump + float var3_converted_var1_Color; + node_rgb_to_bw(var1_Color, var3_converted_var1_Color); + vec3 var4_out_normal; + node_bump(1.0, 0.10000000149011612, var3_converted_var1_Color, NORMAL, VERTEX, 0.0, var4_out_normal); + // convert from view space to world space + var4_out_normal = normalize(inverted_view_matrix * vec4(var4_out_normal, 0.0)).xyz; + // convert from y-up to z-up + var4_out_normal = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var4_out_normal; + + // node: Diffuse BSDF + // type: ShaderNodeBsdfDiffuse + vec4 var5_Color; + var5_Color = vec4(0.800000011920929, 0.800000011920929, 0.800000011920929, 1.0); + float var6_Roughness; + var6_Roughness = 0.0; + vec3 var7_out_albedo; + float var8_out_specular; + float var9_out_oren_nayar_roughness; + node_bsdf_diffuse(var5_Color, var6_Roughness, var7_out_albedo, var8_out_specular, var9_out_oren_nayar_roughness); + // convert from z-up to y-up + var4_out_normal = mat3(vec3(1, 0, 0), vec3(0, 0, -1), vec3(0, 1, 0)) * var4_out_normal; + // convert from world space to view space + var4_out_normal = normalize(INV_CAMERA_MATRIX * vec4(var4_out_normal, 0.0)).xyz; + + ALBEDO = var7_out_albedo; + SPECULAR = var8_out_specular; + NORMAL = var4_out_normal; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness } " @@ -667,7 +785,7 @@ void fragment() { resource_name = "" shader = SubResource(21) -shader_param/uni1_ImageTexture001texture_image = ExtResource(2) +shader_param/uni1_bumppng = ExtResource(2) [sub_resource id=23 type="ArrayMesh"] diff --git a/tests/reference_exports/material_cycle/material_unpack_texture.escn b/tests/reference_exports/material_cycle/material_unpack_texture.escn index 7165286..48a39ac 100644 --- a/tests/reference_exports/material_cycle/material_unpack_texture.escn +++ b/tests/reference_exports/material_cycle/material_unpack_texture.escn @@ -6,7 +6,7 @@ resource_name = "Shader Nodetree" code = "shader_type spatial; render_mode blend_mix,depth_draw_always,cull_back,diffuse_burley,specular_schlick_ggx; -uniform sampler2D uni1_ImageTexturetexture_image; +uniform sampler2D uni1_brick_4_diff_1kjpg; void node_tex_image(vec3 co, sampler2D ima, out vec4 color, out float alpha) { @@ -30,18 +30,29 @@ void vertex() { void fragment() { - vec4 var1_ImageTexture_Color; - float var2_ImageTexture_Alpha; - node_tex_image(vec3(UV, 0.0), uni1_ImageTexturetexture_image, var1_ImageTexture_Color, var2_ImageTexture_Alpha); - float var3_DiffuseBSDF_Roughness; - var3_DiffuseBSDF_Roughness = 0.0; - vec3 var4_DiffuseBSDF_output_albedo; - float var5_DiffuseBSDF_output_specular; - float var6_DiffuseBSDF_output_roughness; - node_bsdf_diffuse(var1_ImageTexture_Color, var3_DiffuseBSDF_Roughness, var4_DiffuseBSDF_output_albedo, var5_DiffuseBSDF_output_specular, var6_DiffuseBSDF_output_roughness); - ALBEDO = var4_DiffuseBSDF_output_albedo; - SPECULAR = var5_DiffuseBSDF_output_specular; - ROUGHNESS = var6_DiffuseBSDF_output_roughness; + // node: Texture Coordinate + // type: ShaderNodeTexCoord + + // node: Image Texture + // type: ShaderNodeTexImage + // texture image from node Image Texture + vec4 var1_Color; + float var2_Alpha; + node_tex_image(vec3(UV, 0.0), uni1_brick_4_diff_1kjpg, var1_Color, var2_Alpha); + + // node: Diffuse BSDF + // type: ShaderNodeBsdfDiffuse + float var3_Roughness; + var3_Roughness = 0.0; + vec3 var4_out_albedo; + float var5_out_specular; + float var6_out_oren_nayar_roughness; + node_bsdf_diffuse(var1_Color, var3_Roughness, var4_out_albedo, var5_out_specular, var6_out_oren_nayar_roughness); + + ALBEDO = var4_out_albedo; + SPECULAR = var5_out_specular; + // uncomment it only when you set diffuse mode to oren nayar + // ROUGHNESS = oren_nayar_rougness } " @@ -49,7 +60,7 @@ void fragment() { resource_name = "" shader = SubResource(1) -shader_param/uni1_ImageTexturetexture_image = ExtResource(1) +shader_param/uni1_brick_4_diff_1kjpg = ExtResource(1) [sub_resource id=3 type="ArrayMesh"]