From 827cbac99eedf7c04e009274f1d2fbd52628ff1e Mon Sep 17 00:00:00 2001 From: Rodz Labs Date: Sun, 3 Oct 2021 14:21:38 +0200 Subject: [PATCH] Added 3D PBR material node --- addons/material_maker/nodes/material_3d.mmg | 194 ++++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 addons/material_maker/nodes/material_3d.mmg diff --git a/addons/material_maker/nodes/material_3d.mmg b/addons/material_maker/nodes/material_3d.mmg new file mode 100644 index 00000000..efa6d110 --- /dev/null +++ b/addons/material_maker/nodes/material_3d.mmg @@ -0,0 +1,194 @@ +{ + "export": { + + }, + "name": "material_3d", + "node_position": { + "x": 0, + "y": 0 + }, + "parameters": { + "albedo_color": { + "a": 1, + "b": 1, + "g": 1, + "r": 1, + "type": "Color" + }, + "ao": 1, + "emission_energy": 1, + "metallic": 0, + "roughness": 1, + "world": true + }, + "seed": 0, + "seed_locked": false, + "shader_model": { + "code": "", + "custom": "", + "exports": { + "Godot": { + "export_extension": "tres", + "files": [ + { + "file_name": "$(path_prefix).tres", + "template": "[gd_resource type=\"ShaderMaterial\" load_steps=2 format=2]\n[ext_resource path=\"$(file_prefix).shader\" type=\"Shader\" id=1]\n$begin_buffers\n[ext_resource path=\"res://$(file_prefix)_texture_$(buffer_index).png\" type=\"Texture\" id=$(expr:$(buffer_index)+1)]\n$end_buffers\n[resource]\nshader = ExtResource( 1 )\n$begin_buffers\nshader_param/texture_$(buffer_index) = ExtResource( $(expr:$(buffer_index)+1) )\n$end_buffers\n", + "type": "template" + }, + { + "file_name": "$(path_prefix).shader", + "template": "shader_type spatial;\nrender_mode blend_mix,depth_draw_alpha_prepass,cull_back,diffuse_burley,specular_schlick_ggx;\n\nvarying vec3 texcoords_3d;\n\n$definitions\n\nvoid vertex() {\n$if $(param:world)\n\ttexcoords_3d = (vec4(VERTEX, 1.0)*WORLD_MATRIX).xyz;\n$else\n\ttexcoords_3d = VERTEX;\n$fi\n}\n\nvoid fragment() {\n\tfloat _seed_variation_ = 0.0;\n$begin_generate\n\tALBEDO = $albedo_color.rgb*$albedo_tex(vec4(texcoords_3d, 0.0));\n\tMETALLIC = $metallic*$metallic_tex(vec4(texcoords_3d, 0.0));\n\tROUGHNESS = $roughness*$roughness_tex(vec4(texcoords_3d, 0.0));\n\tSPECULAR = 0.5;\n\tEMISSION = $emission_energy*$emission_tex(vec4(texcoords_3d, 0.0));\n\tAO = $ao_tex(vec4(texcoords_3d, 0.0));\n\tAO_LIGHT_AFFECT = $ao;\n$end_generate\n}\n", + "type": "template" + }, + { + "file_name": "$(path_prefix)_texture_$(buffer_index).png", + "type": "buffers" + } + ] + }, + "Unity": { + "export_extension": "mat", + "files": [ + { + "file_name": "$(path_prefix).shader", + "template": "Shader \"Custom/NewSurfaceShader\"\n{\n Properties {\n$begin_buffers\n\t texture_$(buffer_index) (\"Texture $(buffer_index)\", 2D) = \"white\" {}\n$end_buffers\n\t _MainTex (\"Foo\", 2D) = \"white\" {}\n }\n SubShader {\n Tags { \"RenderType\"=\"Opaque\" }\n LOD 200\n CGPROGRAM\n #pragma surface surf Standard fullforwardshadows\n #pragma target 3.0\n\t\t\n sampler2D _MainTex;\n struct Input {\n float2 uv_MainTex;\n };\n UNITY_INSTANCING_BUFFER_START(Props)\n UNITY_INSTANCING_BUFFER_END(Props)\n\t\t\n$definitions hlsl,rename_buffers,unity\n\t\t\n void surf (Input IN, inout SurfaceOutputStandard o) {\n\t\t\tfloat2 uv = IN.uv_MainTex;\n$begin_generate hlsl,rename_buffers,unity\n\t\t\to.Albedo = $albedo_tex(uv).rgb*$albedo_color.rgb;\n o.Metallic = $metallic_tex(uv)*$metallic;\n o.Smoothness = 1.0-$roughness_tex(uv)*$roughness;\n o.Alpha = 1.0;\n\t\t\to.Normal = $normal_tex(uv)*vec3(-1.0, 1.0, -1.0)+vec3(1.0, 0.0, 1.0);\n$end_generate\n }\n ENDCG\n }\n FallBack \"Diffuse\"\n}\n", + "type": "template" + }, + { + "file_name": "$(path_prefix)_texture_$(buffer_index).png", + "type": "buffers" + }, + { + "file_name": "$(path_prefix)_texture_$(buffer_index).png.meta", + "template": "fileFormatVersion: 2\nguid: $uid(tex_$(buffer_index))\nTextureImporter:\n internalIDToNameTable: []\n externalObjects: {}\n serializedVersion: 11\n mipmaps:\n mipMapMode: 0\n enableMipMap: 1\n sRGBTexture: 1\n linearTexture: 0\n fadeOut: 0\n borderMipMap: 0\n mipMapsPreserveCoverage: 0\n alphaTestReferenceValue: 0.5\n mipMapFadeDistanceStart: 1\n mipMapFadeDistanceEnd: 3\n bumpmap:\n convertToNormalMap: 0\n externalNormalMap: 0\n heightScale: 0.25\n normalMapFilter: 0\n isReadable: 0\n streamingMipmaps: 0\n streamingMipmapsPriority: 0\n vTOnly: 0\n grayScaleToAlpha: 0\n generateCubemap: 6\n cubemapConvolution: 0\n seamlessCubemap: 0\n textureFormat: 1\n maxTextureSize: 2048\n textureSettings:\n serializedVersion: 2\n filterMode: -1\n aniso: -1\n mipBias: -100\n wrapU: -1\n wrapV: -1\n wrapW: -1\n nPOTScale: 1\n lightmap: 0\n compressionQuality: 50\n spriteMode: 0\n spriteExtrude: 1\n spriteMeshType: 1\n alignment: 0\n spritePivot: {x: 0.5, y: 0.5}\n spritePixelsToUnits: 100\n spriteBorder: {x: 0, y: 0, z: 0, w: 0}\n spriteGenerateFallbackPhysicsShape: 1\n alphaUsage: 1\n alphaIsTransparency: 0\n spriteTessellationDetail: -1\n textureType: 0\n textureShape: 1\n singleChannelComponent: 0\n flipbookRows: 1\n flipbookColumns: 1\n maxTextureSizeSet: 0\n compressionQualitySet: 0\n textureFormatSet: 0\n ignorePngGamma: 0\n applyGammaDecoding: 0\n platformSettings:\n - serializedVersion: 3\n buildTarget: DefaultTexturePlatform\n maxTextureSize: 2048\n resizeAlgorithm: 0\n textureFormat: -1\n textureCompression: 1\n compressionQuality: 50\n crunchedCompression: 0\n allowsAlphaSplitting: 0\n overridden: 0\n androidETC2FallbackOverride: 0\n forceMaximumCompressionQuality_BC6H_BC7: 0\n spriteSheet:\n serializedVersion: 2\n sprites: []\n outline: []\n physicsShape: []\n bones: []\n spriteID: \n internalID: 0\n vertices: []\n indices: \n edges: []\n weights: []\n secondaryTextures: []\n spritePackingTag: \n pSDRemoveMatte: 0\n pSDShowRemoveMatteOption: 0\n userData: \n assetBundleName: \n assetBundleVariant: \n", + "type": "buffer_templates" + }, + { + "file_name": "$(path_prefix).mat", + "template": "%YAML 1.1\n%TAG !u! tag:unity3d.com,2011:\n--- !u!21 &2100000\nMaterial:\n serializedVersion: 6\n m_ObjectHideFlags: 0\n m_CorrespondingSourceObject: {fileID: 0}\n m_PrefabInstance: {fileID: 0}\n m_PrefabAsset: {fileID: 0}\n m_Name: test2\n m_Shader: {fileID: 4800000, guid: $uid(shader), type: 3}\n m_ShaderKeywords: \n m_LightmapFlags: 4\n m_EnableInstancingVariants: 0\n m_DoubleSidedGI: 0\n m_CustomRenderQueue: -1\n stringTagMap: {}\n disabledShaderPasses: []\n m_SavedProperties:\n serializedVersion: 3\n m_TexEnvs:\n - _MainTex:\n m_Texture: {fileID: 2800000, guid: 6c5d2d4e94384751a0ce7d6619e0d49a, type: 3}\n m_Scale: {x: 1, y: 1}\n m_Offset: {x: 0, y: 0}\n$begin_buffers\n - texture_$(buffer_index):\n m_Texture: {fileID: 2800000, guid: $uid(tex_$(buffer_index)), type: 3}\n m_Scale: {x: 1, y: 1}\n m_Offset: {x: 0, y: 0}\n$end_buffers\n m_BuildTextureStacks: []\n", + "type": "template" + }, + { + "file_name": "$(path_prefix).shader.meta", + "template": "fileFormatVersion: 2\nguid: $uid(shader)\nShaderImporter:\n externalObjects: {}\n defaultTextures: []\n nonModifiableTextures: []\n preprocessorOverride: 0\n userData: \n assetBundleName: \n assetBundleVariant: \n", + "type": "template" + } + ] + }, + "Unreal": { + "export_extension": "mm2ue", + "files": [ + { + "file_name": "$(path_prefix).mm2ue", + "template": "/*\nInstructions to setup this material:\n- copy material_dynamic.uasset and open the copy\n$begin_buffers\n- create a TextureObject for $(file_prefix)_texture_$(buffer_index).png in the graph\n and a new input for texture_$(buffer_index) in the custom node, and connect them\n$end_buffers\n- copy the shader code below and paste it into the Custom node\n*/\nstruct Functions {\n$definitions hlsl,rename_buffers,unreal\n\tfixed4 generated_shader(float2 uv, out float metallic, out float roughness, out float3 normal) {\n$begin_generate hlsl,rename_buffers,unreal\n // sample the generated texture\n\t\tfixed4 rv = tofloat4($albedo_tex(uv), 1.0)*$albedo_color;\n\t\tmetallic = $metallic_tex(uv)*$metallic;\n\t\troughness = $roughness_tex(uv)*$roughness;\n\t\tnormal = $normal_tex(uv)*float3(-1.0, -1.0, -1.0)+float3(1.0, 1.0, 1.0);\n return rv;\n$end_generate\n }\n};\nFunctions f;\nfixed4 albedo = f.generated_shader(TexCoords, metallic, roughness, normal);\nreturn albedo;\n", + "type": "template" + }, + { + "file_name": "$(path_prefix)_texture_$(buffer_index).png", + "type": "buffers" + } + ] + } + }, + "global": "", + "inputs": [ + { + "default": "vec3(1.0)", + "group_size": 5, + "label": "", + "name": "albedo_tex", + "type": "tex3d" + }, + { + "default": "1.0", + "label": "", + "name": "metallic_tex", + "type": "tex3d_gs" + }, + { + "default": "1.0", + "label": "", + "name": "roughness_tex", + "type": "tex3d_gs" + }, + { + "default": "vec3(0.0)", + "label": "", + "name": "emission_tex", + "type": "tex3d" + }, + { + "default": "1.0", + "label": "", + "name": "ao_tex", + "type": "tex3d_gs" + } + ], + "instance": "", + "name": "3D PBR Material", + "outputs": [ + + ], + "parameters": [ + { + "default": { + "a": 1, + "b": 1, + "g": 1, + "r": 1 + }, + "label": "Albedo", + "name": "albedo_color", + "type": "color" + }, + { + "control": "None", + "default": 1, + "label": "Metallic", + "max": 1, + "min": 0, + "name": "metallic", + "step": 0.01, + "type": "float" + }, + { + "control": "None", + "default": 1, + "label": "Roughness", + "max": 1, + "min": 0, + "name": "roughness", + "step": 0.01, + "type": "float" + }, + { + "control": "None", + "default": 1, + "label": "Emission", + "max": 1, + "min": 0, + "name": "emission_energy", + "step": 0.01, + "type": "float" + }, + { + "control": "None", + "default": 1, + "label": "Ambient occlusion", + "max": 1, + "min": 0, + "name": "ao", + "step": 0.01, + "type": "float" + }, + { + "default": true, + "label": "World", + "name": "world", + "type": "boolean" + } + ], + "preview_shader": "shader_type spatial;\nrender_mode blend_mix,depth_draw_alpha_prepass,cull_back,diffuse_burley,specular_schlick_ggx;\n\nvarying vec3 texcoords_3d;\n\n$definitions\n\nvoid vertex() {\n$if $(param:world)\n\ttexcoords_3d = (vec4(VERTEX, 1.0)*WORLD_MATRIX).xyz;\n$else\n\ttexcoords_3d = VERTEX;\n$fi\n}\n\nvoid fragment() {\n\tfloat _seed_variation_ = 0.0;\n$begin_generate\n\tALBEDO = $albedo_color.rgb*$albedo_tex(vec4(texcoords_3d, 0.0));\n\tMETALLIC = $metallic*$metallic_tex(vec4(texcoords_3d, 0.0));\n\tROUGHNESS = $roughness*$roughness_tex(vec4(texcoords_3d, 0.0));\n\tSPECULAR = 0.5;\n\tEMISSION = $emission_energy*$emission_tex(vec4(texcoords_3d, 0.0));\n\tAO = $ao_tex(vec4(texcoords_3d, 0.0));\n\tAO_LIGHT_AFFECT = $ao;\n$end_generate\n}\n" + }, + "type": "material_export" +} \ No newline at end of file