瀏覽代碼

format generated shader code better

Jason0214 6 年之前
父節點
當前提交
40268e95f5

+ 3 - 0
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()

+ 45 - 63
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(

+ 1 - 1
io_scene_godot/converters/material_node_tree/shader_functions.py

@@ -147,7 +147,7 @@ void node_bsdf_diffuse(vec4 color, float roughness, out vec3 albedo,
         output_sockets=[
             "albedo",
             "specular",
-            "roughness",
+            "oren_nayar_roughness",
         ]
     ),
 

+ 67 - 25
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 = var_name = _clear_variable_name(raw_var_name)
         new_var = Variable(var_type, var_name)
         self._append_defination_code(new_var)
         return new_var
@@ -174,7 +201,7 @@ class BaseShader:
             node.name,
             socket.identifier
         )
-        var_name = re.sub(r'\W', '', raw_var_name)
+        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 +250,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))
@@ -251,7 +278,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 +315,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 +324,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 +357,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 +392,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 +464,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 +482,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 +500,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 +516,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 +600,7 @@ class ShaderGlobals:
             self._uniform_var_count,
             uni_base_name,
         )
-        var_name = re.sub(r'\W', '', raw_var_name)
+        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)

+ 91 - 65
tests/reference_exports/material_cycle/material_anistropy.escn

@@ -42,6 +42,11 @@ void vertex() {
 
 
 void fragment() {
+	// node: Tangent
+	// type: ShaderNodeTangent
+	
+	// node: Principled BSDF
+	// type: ShaderNodeBsdfPrincipled
 	vec4 var1_PrincipledBSDF_BaseColor;
 	var1_PrincipledBSDF_BaseColor = vec4(0.800000011920929, 0.800000011920929, 0.800000011920929, 1.0);
 	float var2_PrincipledBSDF_Subsurface;
@@ -64,27 +69,34 @@ void fragment() {
 	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);
+	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_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_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);
 }
@@ -157,57 +169,71 @@ void vertex() {
 
 
 void fragment() {
+	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_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;
+	// convert from view space to model space
+	var1_TextureCoordinate_Object = (inverted_model_matrix * (inverted_view_matrix * vec4(var1_TextureCoordinate_Object, 1.0))).xyz;
+	// convert from y-up to z-up
 	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);
+	
+	// node: Principled BSDF
+	// type: ShaderNodeBsdfPrincipled
+	vec4 var2_PrincipledBSDF_BaseColor;
+	var2_PrincipledBSDF_BaseColor = vec4(0.800000011920929, 0.800000011920929, 0.800000011920929, 1.0);
+	float var3_PrincipledBSDF_Subsurface;
+	var3_PrincipledBSDF_Subsurface = 0.0;
+	vec4 var4_PrincipledBSDF_SubsurfaceColor;
+	var4_PrincipledBSDF_SubsurfaceColor = vec4(0.699999988079071, 0.10000000149011612, 0.10000000149011612, 1.0);
+	float var5_PrincipledBSDF_Metallic;
+	var5_PrincipledBSDF_Metallic = 1.0;
+	float var6_PrincipledBSDF_Specular;
+	var6_PrincipledBSDF_Specular = 0.5;
+	float var7_PrincipledBSDF_Roughness;
+	var7_PrincipledBSDF_Roughness = 0.12921348214149475;
+	float var8_PrincipledBSDF_Clearcoat;
+	var8_PrincipledBSDF_Clearcoat = 0.0;
+	float var9_PrincipledBSDF_ClearcoatRoughness;
+	var9_PrincipledBSDF_ClearcoatRoughness = 0.029999999329447746;
+	float var10_PrincipledBSDF_Anisotropic;
+	var10_PrincipledBSDF_Anisotropic = 1.0;
+	float var11_PrincipledBSDF_Transmission;
+	var11_PrincipledBSDF_Transmission = 0.0;
+	float var12_PrincipledBSDF_IOR;
+	var12_PrincipledBSDF_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_PrincipledBSDF_BaseColor, var3_PrincipledBSDF_Subsurface, var4_PrincipledBSDF_SubsurfaceColor, var5_PrincipledBSDF_Metallic, var6_PrincipledBSDF_Specular, var7_PrincipledBSDF_Roughness, var8_PrincipledBSDF_Clearcoat, var9_PrincipledBSDF_ClearcoatRoughness, var10_PrincipledBSDF_Anisotropic, var11_PrincipledBSDF_Transmission, var12_PrincipledBSDF_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_TextureCoordinate_Object = mat3(vec3(1, 0, 0), vec3(0, 0, -1), vec3(0, 1, 0)) * var1_TextureCoordinate_Object;
+	// convert from world space to view space
 	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;
+	
+	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_TextureCoordinate_Object, NORMAL), NORMAL));
 	BINORMAL = cross(TANGENT, NORMAL);
 }

+ 413 - 265
tests/reference_exports/material_cycle/material_cycle.escn

@@ -23,17 +23,21 @@ void vertex() {
 
 
 void fragment() {
+	// node: Diffuse BSDF
+	// type: ShaderNodeBsdfDiffuse
 	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;
+	vec3 var3_out_albedo;
+	float var4_out_specular;
+	float var5_out_oren_nayar_roughness;
+	node_bsdf_diffuse(var1_DiffuseBSDF_Color, var2_DiffuseBSDF_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
 }
 "
 
@@ -117,25 +121,32 @@ void vertex() {
 
 
 void fragment() {
+	// node: Glass BSDF
+	// type: ShaderNodeBsdfGlass
 	vec4 var1_GlassBSDF_Color;
 	var1_GlassBSDF_Color = vec4(0.0, 1.0, 1.0, 1.0);
 	float var2_GlassBSDF_Roughness;
 	var2_GlassBSDF_Roughness = 0.23333333432674408;
 	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;
+	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_GlassBSDF_Color, var2_GlassBSDF_Roughness, var3_GlassBSDF_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;
 }
 "
@@ -168,17 +179,21 @@ void vertex() {
 
 
 void fragment() {
+	// node: Diffuse BSDF
+	// type: ShaderNodeBsdfDiffuse
 	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;
+	vec3 var3_out_albedo;
+	float var4_out_specular;
+	float var5_out_oren_nayar_roughness;
+	node_bsdf_diffuse(var1_DiffuseBSDF_Color, var2_DiffuseBSDF_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
 }
 "
 
@@ -238,30 +253,39 @@ void vertex() {
 
 
 void fragment() {
+	// node: Diffuse BSDF
+	// type: ShaderNodeBsdfDiffuse
 	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);
+	vec3 var3_out_albedo;
+	float var4_out_specular;
+	float var5_out_oren_nayar_roughness;
+	node_bsdf_diffuse(var1_DiffuseBSDF_Color, var2_DiffuseBSDF_Roughness, var3_out_albedo, var4_out_specular, var5_out_oren_nayar_roughness);
+	
+	// node: Glossy BSDF
+	// type: ShaderNodeBsdfGlossy
 	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;
+	vec3 var8_out_albedo;
+	float var9_out_metallic;
+	float var10_out_roughness;
+	node_bsdf_glossy(var6_GlossyBSDF_Color, var7_GlossyBSDF_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
 }
 "
 
@@ -313,17 +337,21 @@ void vertex() {
 
 
 void fragment() {
+	// node: Diffuse BSDF
+	// type: ShaderNodeBsdfDiffuse
 	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;
+	vec3 var3_out_albedo;
+	float var4_out_specular;
+	float var5_out_oren_nayar_roughness;
+	node_bsdf_diffuse(var1_DiffuseBSDF_Color, var2_DiffuseBSDF_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
 }
 "
 
@@ -395,17 +423,22 @@ void vertex() {
 
 
 void fragment() {
+	// node: Glossy BSDF
+	// type: ShaderNodeBsdfGlossy
 	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;
+	vec3 var3_out_albedo;
+	float var4_out_metallic;
+	float var5_out_roughness;
+	node_bsdf_glossy(var1_GlossyBSDF_Color, var2_GlossyBSDF_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
 }
 "
 
@@ -461,54 +494,66 @@ void vertex() {
 
 
 void fragment() {
+	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_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;
+	// convert from view space to model space
+	var1_TextureCoordinate_Normal = normalize(inverted_model_matrix * (inverted_view_matrix * vec4(var1_TextureCoordinate_Normal, 0.0))).xyz;
+	// convert from y-up to z-up
 	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;
+	
+	// node: Principled BSDF
+	// type: ShaderNodeBsdfPrincipled
+	vec4 var2_PrincipledBSDF_BaseColor;
+	var2_PrincipledBSDF_BaseColor = vec4(0.025226209312677383, 0.11296848952770233, 0.8000000715255737, 1.0);
+	float var3_converted_var1_TextureCoordinate_Normal;
+	node_rgb_to_bw(vec4(var1_TextureCoordinate_Normal, 1.0), var3_converted_var1_TextureCoordinate_Normal);
+	vec4 var4_PrincipledBSDF_SubsurfaceColor;
+	var4_PrincipledBSDF_SubsurfaceColor = vec4(0.699999988079071, 0.10000000149011612, 0.10000000149011612, 1.0);
+	float var5_PrincipledBSDF_Metallic;
+	var5_PrincipledBSDF_Metallic = 0.0;
+	float var6_PrincipledBSDF_Specular;
+	var6_PrincipledBSDF_Specular = 0.5;
+	float var7_PrincipledBSDF_Roughness;
+	var7_PrincipledBSDF_Roughness = 0.5;
+	float var8_PrincipledBSDF_Clearcoat;
+	var8_PrincipledBSDF_Clearcoat = 0.0;
+	float var9_PrincipledBSDF_ClearcoatRoughness;
+	var9_PrincipledBSDF_ClearcoatRoughness = 0.029999999329447746;
+	float var10_PrincipledBSDF_Anisotropic;
+	var10_PrincipledBSDF_Anisotropic = 0.0;
+	float var11_PrincipledBSDF_Transmission;
+	var11_PrincipledBSDF_Transmission = 0.0;
+	float var12_PrincipledBSDF_IOR;
+	var12_PrincipledBSDF_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_PrincipledBSDF_BaseColor, var3_converted_var1_TextureCoordinate_Normal, var4_PrincipledBSDF_SubsurfaceColor, var5_PrincipledBSDF_Metallic, var6_PrincipledBSDF_Specular, var7_PrincipledBSDF_Roughness, var8_PrincipledBSDF_Clearcoat, var9_PrincipledBSDF_ClearcoatRoughness, var10_PrincipledBSDF_Anisotropic, var11_PrincipledBSDF_Transmission, var12_PrincipledBSDF_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() {
+	// node: Texture Coordinate
+	// type: ShaderNodeTexCoord
+	
+	// node: Diffuse BSDF
+	// type: ShaderNodeBsdfDiffuse
 	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;
+	vec3 var3_out_albedo;
+	float var4_out_specular;
+	float var5_out_oren_nayar_roughness;
+	node_bsdf_diffuse(var1_auto_insert_VecToColor, var2_DiffuseBSDF_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() {
+	// node: Texture Coordinate
+	// type: ShaderNodeTexCoord
+	
+	// node: Diffuse BSDF
+	// type: ShaderNodeBsdfDiffuse
 	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;
+	vec3 var3_out_albedo;
+	float var4_out_specular;
+	float var5_out_oren_nayar_roughness;
+	node_bsdf_diffuse(var1_auto_insert_VecToColor, var2_DiffuseBSDF_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() {
+	// node: Texture Coordinate
+	// type: ShaderNodeTexCoord
 	vec3 var1_TextureCoordinate_Reflection;
 	var1_TextureCoordinate_Reflection = (inverse(INV_CAMERA_MATRIX) * vec4(reflect(normalize(VERTEX), NORMAL), 0.0)).xyz;
+	// convert from y-up to z-up
 	var1_TextureCoordinate_Reflection = mat3(vec3(1, 0, 0), vec3(0, 0, 1), vec3(0, -1, 0)) * var1_TextureCoordinate_Reflection;
+	
+	// node: Diffuse BSDF
+	// type: ShaderNodeBsdfDiffuse
 	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;
+	vec3 var4_out_albedo;
+	float var5_out_specular;
+	float var6_out_oren_nayar_roughness;
+	node_bsdf_diffuse(var2_auto_insert_VecToColor, var3_DiffuseBSDF_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() {
+	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_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;
+	// convert from view space to model space
+	var1_TextureCoordinate_Object = (inverted_model_matrix * (inverted_view_matrix * vec4(var1_TextureCoordinate_Object, 1.0))).xyz;
+	// convert from y-up to z-up
 	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;
+	
+	// node: Diffuse BSDF
+	// type: ShaderNodeBsdfDiffuse
+	vec4 var2_auto_insert_VecToColor;
+	var2_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 var3_DiffuseBSDF_Roughness;
+	var3_DiffuseBSDF_Roughness = 0.0;
+	vec3 var4_out_albedo;
+	float var5_out_specular;
+	float var6_out_oren_nayar_roughness;
+	node_bsdf_diffuse(var2_auto_insert_VecToColor, var3_DiffuseBSDF_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() {
+	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_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;
+	// convert from view space to model space
+	var1_TextureCoordinate_Object = (inverted_model_matrix * (inverted_view_matrix * vec4(var1_TextureCoordinate_Object, 1.0))).xyz;
+	// convert from y-up to z-up
 	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;
+	
+	// node: Separate XYZ
+	// type: ShaderNodeSeparateXYZ
+	float var2_SeparateXYZ_X;
+	float var3_SeparateXYZ_Y;
+	float var4_SeparateXYZ_Z;
+	node_separate_xyz(var1_TextureCoordinate_Object, var2_SeparateXYZ_X, var3_SeparateXYZ_Y, var4_SeparateXYZ_Z);
+	
+	// node: Math.002
+	// type: ShaderNodeMath
+	float var5_Math002_Value_001;
+	var5_Math002_Value_001 = 0.10000000149011612;
+	float var6_Math002_Value;
+	node_math_multiply_no_clamp(var2_SeparateXYZ_X, var5_Math002_Value_001, var6_Math002_Value);
+	
+	// node: Math.001
+	// type: ShaderNodeMath
+	float var7_Math001_Value_001;
+	var7_Math001_Value_001 = 1.0;
+	float var8_Math001_Value;
+	node_math_multiply_no_clamp(var3_SeparateXYZ_Y, var7_Math001_Value_001, var8_Math001_Value);
+	
+	// node: Math
+	// type: ShaderNodeMath
+	float var9_Math_Value_001;
+	var9_Math_Value_001 = 0.10000000149011612;
+	float var10_Math_Value;
+	node_math_multiply_no_clamp(var4_SeparateXYZ_Z, var9_Math_Value_001, var10_Math_Value);
+	
+	// node: Combine RGB
+	// type: ShaderNodeCombineRGB
+	vec4 var11_CombineRGB_Image;
+	node_combine_rgb(var6_Math002_Value, var8_Math001_Value, var10_Math_Value, var11_CombineRGB_Image);
+	
+	// node: Diffuse BSDF
+	// type: ShaderNodeBsdfDiffuse
+	float var12_DiffuseBSDF_Roughness;
+	var12_DiffuseBSDF_Roughness = 0.0;
+	vec3 var13_out_albedo;
+	float var14_out_specular;
+	float var15_out_oren_nayar_roughness;
+	node_bsdf_diffuse(var11_CombineRGB_Image, var12_DiffuseBSDF_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
 }
 "
 
@@ -811,30 +911,39 @@ void vertex() {
 
 
 void fragment() {
+	// node: Diffuse BSDF
+	// type: ShaderNodeBsdfDiffuse
 	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);
+	vec3 var3_out_albedo;
+	float var4_out_specular;
+	float var5_out_oren_nayar_roughness;
+	node_bsdf_diffuse(var1_DiffuseBSDF_Color, var2_DiffuseBSDF_Roughness, var3_out_albedo, var4_out_specular, var5_out_oren_nayar_roughness);
+	
+	// node: Glossy BSDF
+	// type: ShaderNodeBsdfGlossy
 	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;
+	vec3 var8_out_albedo;
+	float var9_out_metallic;
+	float var10_out_roughness;
+	node_bsdf_glossy(var6_GlossyBSDF_Color, var7_GlossyBSDF_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() {
+	// node: Diffuse BSDF
+	// type: ShaderNodeBsdfDiffuse
 	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;
+	vec3 var3_out_albedo;
+	float var4_out_specular;
+	float var5_out_oren_nayar_roughness;
+	node_bsdf_diffuse(var1_DiffuseBSDF_Color, var2_DiffuseBSDF_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() {
+	// node: Diffuse BSDF
+	// type: ShaderNodeBsdfDiffuse
 	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);
+	vec3 var3_out_albedo;
+	float var4_out_specular;
+	float var5_out_oren_nayar_roughness;
+	node_bsdf_diffuse(var1_DiffuseBSDF_Color, var2_DiffuseBSDF_Roughness, var3_out_albedo, var4_out_specular, var5_out_oren_nayar_roughness);
+	
+	// node: Transparent BSDF
+	// type: ShaderNodeBsdfTransparent
 	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;
+	float var7_out_alpha;
+	node_bsdf_transparent(var6_TransparentBSDF_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;
 }
 "
@@ -966,17 +1092,21 @@ void vertex() {
 
 
 void fragment() {
+	// node: Diffuse BSDF
+	// type: ShaderNodeBsdfDiffuse
 	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;
+	vec3 var3_out_albedo;
+	float var4_out_specular;
+	float var5_out_oren_nayar_roughness;
+	node_bsdf_diffuse(var1_DiffuseBSDF_Color, var2_DiffuseBSDF_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
 }
 "
 
@@ -1107,58 +1237,76 @@ void vertex() {
 
 
 void fragment() {
+	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_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;
+	// convert from view space to model space
+	var1_TextureCoordinate_Object = (inverted_model_matrix * (inverted_view_matrix * vec4(var1_TextureCoordinate_Object, 1.0))).xyz;
+	// convert from y-up to z-up
 	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;
+	
+	// node: Reroute
+	// type: NodeReroute
+	
+	// node: Math
+	// type: ShaderNodeMath
+	float var2_converted_var1_TextureCoordinate_Object;
+	node_rgb_to_bw(vec4(var1_TextureCoordinate_Object, 1.0), var2_converted_var1_TextureCoordinate_Object);
+	float var3_Math_Value_001;
+	var3_Math_Value_001 = 0.0;
+	float var4_Math_Value;
+	node_math_add_clamp(var2_converted_var1_TextureCoordinate_Object, var3_Math_Value_001, var4_Math_Value);
+	
+	// node: Principled BSDF
+	// type: ShaderNodeBsdfPrincipled
+	vec4 var5_auto_insert_VecToColor;
+	var5_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 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_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_auto_insert_VecToColor, var4_Math_Value, 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_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
 }
 "
 

+ 307 - 178
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() {
+	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_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;
+	node_tex_image(vec3(UV, 0.0), uni1_Normal_OGLpng, var1_ImageTexture_Color, var2_ImageTexture_Alpha);
+	
+	// node: Normal Map
+	// type: ShaderNodeNormalMap
+	vec3 var3_out_normal;
+	node_normal_map_tangent(1.0, var1_ImageTexture_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_DiffuseBSDF_Color;
+	var4_DiffuseBSDF_Color = vec4(0.800000011920929, 0.800000011920929, 0.800000011920929, 1.0);
+	float var5_DiffuseBSDF_Roughness;
+	var5_DiffuseBSDF_Roughness = 0.0;
+	vec3 var6_out_albedo;
+	float var7_out_specular;
+	float var8_out_oren_nayar_roughness;
+	node_bsdf_diffuse(var4_DiffuseBSDF_Color, var5_DiffuseBSDF_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() {
+	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_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;
+	// convert from view space to model space
+	var1_TextureCoordinate_Normal = normalize(inverted_model_matrix * (inverted_view_matrix * vec4(var1_TextureCoordinate_Normal, 0.0))).xyz;
+	// convert from y-up to z-up
 	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;
+	
+	// node: Mapping
+	// type: ShaderNodeMapping
+	vec3 var2_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, var2_Mapping_Vector);
+	
+	// node: Diffuse BSDF
+	// type: ShaderNodeBsdfDiffuse
+	vec4 var3_auto_insert_VecToColor;
+	var3_auto_insert_VecToColor = vec4(clamp(var2_Mapping_Vector, vec3(0.0, 0.0, 0.0),vec3(1.0, 1.0, 1.0)).xyz, 1.0);
+	float var4_DiffuseBSDF_Roughness;
+	var4_DiffuseBSDF_Roughness = 0.0;
+	vec3 var5_out_albedo;
+	float var6_out_specular;
+	float var7_out_oren_nayar_roughness;
+	node_bsdf_diffuse(var3_auto_insert_VecToColor, var4_DiffuseBSDF_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() {
+	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_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;
+	// convert from view space to model space
+	var1_TextureCoordinate_Normal = normalize(inverted_model_matrix * (inverted_view_matrix * vec4(var1_TextureCoordinate_Normal, 0.0))).xyz;
+	// convert from y-up to z-up
 	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;
+	
+	// node: Mapping
+	// type: ShaderNodeMapping
+	vec3 var2_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, var2_Mapping_Vector);
+	
+	// node: Diffuse BSDF
+	// type: ShaderNodeBsdfDiffuse
+	vec4 var3_auto_insert_VecToColor;
+	var3_auto_insert_VecToColor = vec4(clamp(var2_Mapping_Vector, vec3(0.0, 0.0, 0.0),vec3(1.0, 1.0, 1.0)).xyz, 1.0);
+	float var4_DiffuseBSDF_Roughness;
+	var4_DiffuseBSDF_Roughness = 0.0;
+	vec3 var5_out_albedo;
+	float var6_out_specular;
+	float var7_out_oren_nayar_roughness;
+	node_bsdf_diffuse(var3_auto_insert_VecToColor, var4_DiffuseBSDF_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() {
+	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_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;
+	// convert from view space to model space
+	var1_TextureCoordinate_Normal = normalize(inverted_model_matrix * (inverted_view_matrix * vec4(var1_TextureCoordinate_Normal, 0.0))).xyz;
+	// convert from y-up to z-up
 	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;
+	
+	// node: Mapping
+	// type: ShaderNodeMapping
+	vec3 var2_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, var2_Mapping_Vector);
+	var2_Mapping_Vector = normalize(var2_Mapping_Vector);
+	
+	// node: Diffuse BSDF
+	// type: ShaderNodeBsdfDiffuse
+	vec4 var3_auto_insert_VecToColor;
+	var3_auto_insert_VecToColor = vec4(clamp(var2_Mapping_Vector, vec3(0.0, 0.0, 0.0),vec3(1.0, 1.0, 1.0)).xyz, 1.0);
+	float var4_DiffuseBSDF_Roughness;
+	var4_DiffuseBSDF_Roughness = 0.0;
+	vec3 var5_out_albedo;
+	float var6_out_specular;
+	float var7_out_oren_nayar_roughness;
+	node_bsdf_diffuse(var3_auto_insert_VecToColor, var4_DiffuseBSDF_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() {
+	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_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;
+	// convert from view space to model space
+	var1_TextureCoordinate_Object = (inverted_model_matrix * (inverted_view_matrix * vec4(var1_TextureCoordinate_Object, 1.0))).xyz;
+	// convert from y-up to z-up
 	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;
+	
+	// node: Mapping
+	// type: ShaderNodeMapping
+	vec3 var2_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, var2_Mapping_Vector);
+	
+	// node: Diffuse BSDF
+	// type: ShaderNodeBsdfDiffuse
+	vec4 var3_auto_insert_VecToColor;
+	var3_auto_insert_VecToColor = vec4(clamp(var2_Mapping_Vector, vec3(0.0, 0.0, 0.0),vec3(1.0, 1.0, 1.0)).xyz, 1.0);
+	float var4_DiffuseBSDF_Roughness;
+	var4_DiffuseBSDF_Roughness = 0.0;
+	vec3 var5_out_albedo;
+	float var6_out_specular;
+	float var7_out_oren_nayar_roughness;
+	node_bsdf_diffuse(var3_auto_insert_VecToColor, var4_DiffuseBSDF_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
 }
 "
 
@@ -377,7 +443,7 @@ shader = SubResource(11)
 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_bumppng;
 
 
 void node_bsdf_diffuse(vec4 color, float roughness, out vec3 albedo,
@@ -433,23 +499,34 @@ void vertex() {
 
 
 void fragment() {
+	// node: Diffuse BSDF
+	// type: ShaderNodeBsdfDiffuse
 	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);
-	ALBEDO = var3_DiffuseBSDF_output_albedo;
-	SPECULAR = var4_DiffuseBSDF_output_specular;
-	ROUGHNESS = var5_DiffuseBSDF_output_roughness;
+	vec3 var3_out_albedo;
+	float var4_out_specular;
+	float var5_out_oren_nayar_roughness;
+	node_bsdf_diffuse(var1_DiffuseBSDF_Color, var2_DiffuseBSDF_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
+	// node: Texture Coordinate
+	// type: ShaderNodeTexCoord
+	
+	// node: Image Texture
+	// type: ShaderNodeTexImage
+	// texture image from node Image Texture
 	vec4 var6_ImageTexture_Color;
 	float var7_ImageTexture_Alpha;
-	node_tex_image(vec3(UV, 0.0), uni1_ImageTexturetexture_image, var6_ImageTexture_Color, var7_ImageTexture_Alpha);
-	float var8_auto_insert_RGBtoBW;
-	node_rgb_to_bw(var6_ImageTexture_Color, var8_auto_insert_RGBtoBW);
-	node_bump(1.0, 0.1, var8_auto_insert_RGBtoBW, NORMAL, VERTEX, 0.0, NORMAL);
+	node_tex_image(vec3(UV, 0.0), uni1_bumppng, var6_ImageTexture_Color, var7_ImageTexture_Alpha);
+	
+	float var8_converted_var6_ImageTexture_Color;
+	node_rgb_to_bw(var6_ImageTexture_Color, var8_converted_var6_ImageTexture_Color);
+	node_bump(1.0, 0.1, var8_converted_var6_ImageTexture_Color, NORMAL, VERTEX, 0.0, NORMAL);
 }
 "
 
@@ -457,7 +534,7 @@ void fragment() {
 
 resource_name = ""
 shader = SubResource(13)
-shader_param/uni1_ImageTexturetexture_image = ExtResource(2)
+shader_param/uni1_bumppng = ExtResource(2)
 
 [sub_resource id=15 type="ArrayMesh"]
 
@@ -484,7 +561,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) {
@@ -517,28 +594,45 @@ void vertex() {
 
 
 void fragment() {
+	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_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;
+	node_tex_image(vec3(UV, 0.0), uni1_Normal_OGLpng, var1_ImageTexture_Color, var2_ImageTexture_Alpha);
+	
+	// node: Normal Map
+	// type: ShaderNodeNormalMap
+	vec3 var3_out_normal;
+	node_normal_map_object(8.0, var1_ImageTexture_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_DiffuseBSDF_Color;
+	var4_DiffuseBSDF_Color = vec4(0.800000011920929, 0.800000011920929, 0.800000011920929, 1.0);
+	float var5_DiffuseBSDF_Roughness;
+	var5_DiffuseBSDF_Roughness = 0.0;
+	vec3 var6_out_albedo;
+	float var7_out_specular;
+	float var8_out_oren_nayar_roughness;
+	node_bsdf_diffuse(var4_DiffuseBSDF_Color, var5_DiffuseBSDF_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
 }
 "
 
@@ -546,7 +640,7 @@ void fragment() {
 
 resource_name = ""
 shader = SubResource(16)
-shader_param/uni1_ImageTexturetexture_image = ExtResource(1)
+shader_param/uni1_Normal_OGLpng = ExtResource(1)
 
 [sub_resource id=18 type="ArrayMesh"]
 
@@ -573,7 +667,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) {
@@ -605,28 +699,45 @@ void vertex() {
 
 
 void fragment() {
+	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_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;
+	node_tex_image(vec3(UV, 0.0), uni1_Normal_OGLpng, var1_ImageTexture_Color, var2_ImageTexture_Alpha);
+	
+	// node: Normal Map
+	// type: ShaderNodeNormalMap
+	vec3 var3_out_normal;
+	node_normal_map_world(8.0, var1_ImageTexture_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_DiffuseBSDF_Color;
+	var4_DiffuseBSDF_Color = vec4(0.800000011920929, 0.800000011920929, 0.800000011920929, 1.0);
+	float var5_DiffuseBSDF_Roughness;
+	var5_DiffuseBSDF_Roughness = 0.0;
+	vec3 var6_out_albedo;
+	float var7_out_specular;
+	float var8_out_oren_nayar_roughness;
+	node_bsdf_diffuse(var4_DiffuseBSDF_Color, var5_DiffuseBSDF_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
 }
 "
 
@@ -634,7 +745,7 @@ void fragment() {
 
 resource_name = ""
 shader = SubResource(19)
-shader_param/uni1_ImageTexturetexture_image = ExtResource(1)
+shader_param/uni1_Normal_OGLpng = ExtResource(1)
 
 [sub_resource id=21 type="ArrayMesh"]
 
@@ -661,7 +772,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) {
@@ -717,31 +828,49 @@ void vertex() {
 
 
 void fragment() {
+	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_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;
+	node_tex_image(vec3(UV, 0.0), uni1_bumppng, var1_ImageTexture001_Color, var2_ImageTexture001_Alpha);
+	
+	// node: Bump
+	// type: ShaderNodeBump
+	float var3_converted_var1_ImageTexture001_Color;
+	node_rgb_to_bw(var1_ImageTexture001_Color, var3_converted_var1_ImageTexture001_Color);
+	vec3 var4_out_normal;
+	node_bump(1.0, 0.10000000149011612, var3_converted_var1_ImageTexture001_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_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_out_albedo;
+	float var8_out_specular;
+	float var9_out_oren_nayar_roughness;
+	node_bsdf_diffuse(var5_DiffuseBSDF_Color, var6_DiffuseBSDF_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
 }
 "
 
@@ -749,7 +878,7 @@ void fragment() {
 
 resource_name = ""
 shader = SubResource(22)
-shader_param/uni1_ImageTexture001texture_image = ExtResource(2)
+shader_param/uni1_bumppng = ExtResource(2)
 
 [sub_resource id=24 type="ArrayMesh"]
 

+ 21 - 10
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() {
+	// node: Texture Coordinate
+	// type: ShaderNodeTexCoord
+	
+	// node: Image Texture
+	// type: ShaderNodeTexImage
+	// texture image from node Image Texture
 	vec4 var1_ImageTexture_Color;
 	float var2_ImageTexture_Alpha;
-	node_tex_image(vec3(UV, 0.0), uni1_ImageTexturetexture_image, var1_ImageTexture_Color, var2_ImageTexture_Alpha);
+	node_tex_image(vec3(UV, 0.0), uni1_brick_4_diff_1kjpg, var1_ImageTexture_Color, var2_ImageTexture_Alpha);
+	
+	// node: Diffuse BSDF
+	// type: ShaderNodeBsdfDiffuse
 	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;
+	vec3 var4_out_albedo;
+	float var5_out_specular;
+	float var6_out_oren_nayar_roughness;
+	node_bsdf_diffuse(var1_ImageTexture_Color, var3_DiffuseBSDF_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"]