From 42b41851875808fda26677053df6975176ff74bb Mon Sep 17 00:00:00 2001 From: Lubos Lenco Date: Wed, 20 Dec 2017 15:37:58 +0100 Subject: [PATCH] Reduce shader count --- Shaders/blend_pass/blend_pass.json | 6 +- Shaders/bloom_pass/bloom_pass.json | 3 +- .../blur_adaptive_pass.json | 15 ++-- Shaders/blur_edge_pass/blur_edge_pass.json | 12 +-- Shaders/blur_gaus_pass/blur_gaus_pass.json | 9 +-- Shaders/blur_pass/blur_pass.json | 12 +-- .../blur_shadow_pass/blur_shadow_pass.json | 12 +-- Shaders/combine_pass/combine_pass.json | 3 +- Shaders/copy_pass/copy_pass.json | 6 +- Shaders/debug_normals/debug_normals.json | 3 +- Shaders/debug_velocity/debug_velocity.json | 3 +- Shaders/deferred_light/deferred_light.json | 3 +- .../deferred_light_quad.json | 3 +- Shaders/dilate_pass/dilate_pass.json | 6 +- Shaders/fxaa_pass/fxaa_pass.json | 3 +- Shaders/grease_pencil/grease_pencil.json | 3 +- Shaders/include/empty.frag.glsl | 7 -- .../{pass.frag.glsl => pass_copy.frag.glsl} | 0 ...e.vert.glsl => pass_lamp_volume.vert.glsl} | 0 Shaders/matid_to_depth/matid_to_depth.json | 3 +- .../motion_blur_pass/motion_blur_pass.json | 3 +- .../motion_blur_veloc_pass.json | 3 +- Shaders/ssao_pass/ssao_pass.json | 3 +- Shaders/ssgi_blur_pass/ssgi_blur_pass.json | 12 +-- Shaders/ssgi_pass/ssgi_pass.json | 3 +- Shaders/ssr_pass/ssr_pass.json | 3 +- Shaders/sss_pass/sss_pass.json | 6 +- .../supersample_resolve.json | 3 +- Shaders/taa_pass/taa_pass.json | 3 +- .../translucent_resolve.json | 3 +- .../volumetric_light/volumetric_light.json | 3 +- .../volumetric_light_quad.json | 3 +- blender/arm/assets.py | 37 +++++++++- blender/arm/lib/make_datas.py | 74 ++++++++----------- blender/arm/lib/make_variants.py | 50 ++++--------- blender/arm/make.py | 10 ++- blender/arm/material/make_depth.py | 9 +-- blender/arm/material/make_mesh.py | 4 +- blender/arm/material/make_rect.py | 2 +- blender/arm/material/make_shader.py | 2 +- blender/arm/material/make_voxel.py | 11 ++- blender/arm/material/shader.py | 25 +++++-- blender/arm/props_exporter.py | 1 - 43 files changed, 175 insertions(+), 210 deletions(-) delete mode 100644 Shaders/include/empty.frag.glsl rename Shaders/include/{pass.frag.glsl => pass_copy.frag.glsl} (100%) rename Shaders/include/{lamp_volume.vert.glsl => pass_lamp_volume.vert.glsl} (100%) mode change 100755 => 100644 diff --git a/Shaders/blend_pass/blend_pass.json b/Shaders/blend_pass/blend_pass.json index 7623f7c0..34c89295 100755 --- a/Shaders/blend_pass/blend_pass.json +++ b/Shaders/blend_pass/blend_pass.json @@ -11,10 +11,8 @@ "color_write_alpha": false, "links": [], "texture_params": [], - "vertex_shader": "blend_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", - "fragment_shader": "blend_pass.frag.glsl", - "fragment_shader_path": "../include/pass.frag.glsl" + "vertex_shader": "../include/pass.vert.glsl", + "fragment_shader": "../include/pass_copy.frag.glsl" } ] } diff --git a/Shaders/bloom_pass/bloom_pass.json b/Shaders/bloom_pass/bloom_pass.json index 93bb7f51..1530f3ac 100755 --- a/Shaders/bloom_pass/bloom_pass.json +++ b/Shaders/bloom_pass/bloom_pass.json @@ -13,8 +13,7 @@ } ], "texture_params": [], - "vertex_shader": "bloom_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "bloom_pass.frag.glsl" } ] diff --git a/Shaders/blur_adaptive_pass/blur_adaptive_pass.json b/Shaders/blur_adaptive_pass/blur_adaptive_pass.json index 3ea46345..7c64f27c 100755 --- a/Shaders/blur_adaptive_pass/blur_adaptive_pass.json +++ b/Shaders/blur_adaptive_pass/blur_adaptive_pass.json @@ -13,8 +13,7 @@ } ], "texture_params": [], - "vertex_shader": "blur_adaptive_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "blur_adaptive_pass.frag.glsl" }, { @@ -30,8 +29,7 @@ } ], "texture_params": [], - "vertex_shader": "blur_adaptive_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "blur_adaptive_pass.frag.glsl" }, @@ -49,8 +47,7 @@ } ], "texture_params": [], - "vertex_shader": "blur_adaptive_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "blur_adaptive_pass.frag.glsl" }, { @@ -66,8 +63,7 @@ } ], "texture_params": [], - "vertex_shader": "blur_adaptive_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "blur_adaptive_pass.frag.glsl" }, { @@ -86,8 +82,7 @@ } ], "texture_params": [], - "vertex_shader": "blur_adaptive_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "blur_adaptive_pass.frag.glsl" } ] diff --git a/Shaders/blur_edge_pass/blur_edge_pass.json b/Shaders/blur_edge_pass/blur_edge_pass.json index 052f7fc4..b11781a7 100755 --- a/Shaders/blur_edge_pass/blur_edge_pass.json +++ b/Shaders/blur_edge_pass/blur_edge_pass.json @@ -13,8 +13,7 @@ } ], "texture_params": [], - "vertex_shader": "blur_edge_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "blur_edge_pass.frag.glsl" }, { @@ -30,8 +29,7 @@ } ], "texture_params": [], - "vertex_shader": "blur_edge_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "blur_edge_pass.frag.glsl" }, { @@ -50,8 +48,7 @@ } ], "texture_params": [], - "vertex_shader": "blur_edge_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "blur_edge_pass.frag.glsl" }, @@ -74,8 +71,7 @@ } ], "texture_params": [], - "vertex_shader": "blur_edge_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "blur_edge_pass.frag.glsl" } ] diff --git a/Shaders/blur_gaus_pass/blur_gaus_pass.json b/Shaders/blur_gaus_pass/blur_gaus_pass.json index 16f56700..bb562efe 100755 --- a/Shaders/blur_gaus_pass/blur_gaus_pass.json +++ b/Shaders/blur_gaus_pass/blur_gaus_pass.json @@ -17,8 +17,7 @@ } ], "texture_params": [], - "vertex_shader": "blur_gaus_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "blur_gaus_pass.frag.glsl" }, { @@ -38,8 +37,7 @@ } ], "texture_params": [], - "vertex_shader": "blur_gaus_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "blur_gaus_pass.frag.glsl" }, { @@ -62,8 +60,7 @@ } ], "texture_params": [], - "vertex_shader": "blur_gaus_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "blur_gaus_pass.frag.glsl" } ] diff --git a/Shaders/blur_pass/blur_pass.json b/Shaders/blur_pass/blur_pass.json index cf185126..aa2a62ab 100755 --- a/Shaders/blur_pass/blur_pass.json +++ b/Shaders/blur_pass/blur_pass.json @@ -13,8 +13,7 @@ } ], "texture_params": [], - "vertex_shader": "blur_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "blur_pass.frag.glsl" }, { @@ -30,8 +29,7 @@ } ], "texture_params": [], - "vertex_shader": "blur_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "blur_pass.frag.glsl" }, @@ -49,8 +47,7 @@ } ], "texture_params": [], - "vertex_shader": "blur_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "blur_pass.frag.glsl" }, { @@ -66,8 +63,7 @@ } ], "texture_params": [], - "vertex_shader": "blur_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "blur_pass.frag.glsl" } ] diff --git a/Shaders/blur_shadow_pass/blur_shadow_pass.json b/Shaders/blur_shadow_pass/blur_shadow_pass.json index 74c252b0..179b61cf 100755 --- a/Shaders/blur_shadow_pass/blur_shadow_pass.json +++ b/Shaders/blur_shadow_pass/blur_shadow_pass.json @@ -13,8 +13,7 @@ } ], "texture_params": [], - "vertex_shader": "blur_shadow_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "blur_shadow_pass.frag.glsl" }, { @@ -30,8 +29,7 @@ } ], "texture_params": [], - "vertex_shader": "blur_shadow_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "blur_shadow_pass.frag.glsl" }, { @@ -50,8 +48,7 @@ } ], "texture_params": [], - "vertex_shader": "blur_shadow_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "blur_shadow_pass.frag.glsl" }, @@ -74,8 +71,7 @@ } ], "texture_params": [], - "vertex_shader": "blur_shadow_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "blur_shadow_pass.frag.glsl" } ] diff --git a/Shaders/combine_pass/combine_pass.json b/Shaders/combine_pass/combine_pass.json index a1ea7b0a..da2cecd0 100755 --- a/Shaders/combine_pass/combine_pass.json +++ b/Shaders/combine_pass/combine_pass.json @@ -8,8 +8,7 @@ "cull_mode": "none", "links": [], "texture_params": [], - "vertex_shader": "combine_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "combine_pass.frag.glsl" } ] diff --git a/Shaders/copy_pass/copy_pass.json b/Shaders/copy_pass/copy_pass.json index e4e4ee85..a92997e6 100755 --- a/Shaders/copy_pass/copy_pass.json +++ b/Shaders/copy_pass/copy_pass.json @@ -7,10 +7,8 @@ "cull_mode": "none", "links": [], "texture_params": [], - "vertex_shader": "copy_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", - "fragment_shader": "copy_pass.frag.glsl", - "fragment_shader_path": "../include/pass.frag.glsl" + "vertex_shader": "../include/pass.vert.glsl", + "fragment_shader": "../include/pass_copy.frag.glsl" } ] } diff --git a/Shaders/debug_normals/debug_normals.json b/Shaders/debug_normals/debug_normals.json index f4003040..bca716a0 100755 --- a/Shaders/debug_normals/debug_normals.json +++ b/Shaders/debug_normals/debug_normals.json @@ -21,8 +21,7 @@ } ], "texture_params": [], - "vertex_shader": "debug_normals.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "debug_normals.frag.glsl" } ] diff --git a/Shaders/debug_velocity/debug_velocity.json b/Shaders/debug_velocity/debug_velocity.json index bce84197..69b9dab0 100755 --- a/Shaders/debug_velocity/debug_velocity.json +++ b/Shaders/debug_velocity/debug_velocity.json @@ -8,8 +8,7 @@ "cull_mode": "none", "links": [], "texture_params": [], - "vertex_shader": "debug_velocity.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "debug_velocity.frag.glsl" } ] diff --git a/Shaders/deferred_light/deferred_light.json b/Shaders/deferred_light/deferred_light.json index 4f950442..220c1f87 100755 --- a/Shaders/deferred_light/deferred_light.json +++ b/Shaders/deferred_light/deferred_light.json @@ -117,8 +117,7 @@ "ifdef": ["_DFRS"] } ], - "vertex_shader": "deferred_light.vert.glsl", - "vertex_shader_path": "../include/lamp_volume.vert.glsl", + "vertex_shader": "../include/pass_lamp_volume.vert.glsl", "fragment_shader": "deferred_light.frag.glsl" } ] diff --git a/Shaders/deferred_light_quad/deferred_light_quad.json b/Shaders/deferred_light_quad/deferred_light_quad.json index 375544c6..694d5ccd 100755 --- a/Shaders/deferred_light_quad/deferred_light_quad.json +++ b/Shaders/deferred_light_quad/deferred_light_quad.json @@ -86,8 +86,7 @@ "link": "_cameraPlaneProj" } ], - "vertex_shader": "deferred_light_quad.vert.glsl", - "vertex_shader_path": "../include/pass_viewray.vert.glsl", + "vertex_shader": "../include/pass_viewray.vert.glsl", "fragment_shader": "deferred_light_quad.frag.glsl" } ] diff --git a/Shaders/dilate_pass/dilate_pass.json b/Shaders/dilate_pass/dilate_pass.json index 3349b96c..42c39ec9 100755 --- a/Shaders/dilate_pass/dilate_pass.json +++ b/Shaders/dilate_pass/dilate_pass.json @@ -12,8 +12,7 @@ } ], "texture_params": [], - "vertex_shader": "dilate_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "dilate_pass.frag.glsl" }, { @@ -28,8 +27,7 @@ } ], "texture_params": [], - "vertex_shader": "dilate_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "dilate_pass.frag.glsl" } ] diff --git a/Shaders/fxaa_pass/fxaa_pass.json b/Shaders/fxaa_pass/fxaa_pass.json index 01a939e4..d779e2fe 100755 --- a/Shaders/fxaa_pass/fxaa_pass.json +++ b/Shaders/fxaa_pass/fxaa_pass.json @@ -13,8 +13,7 @@ } ], "texture_params": [], - "vertex_shader": "fxaa_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "fxaa_pass.frag.glsl" } ] diff --git a/Shaders/grease_pencil/grease_pencil.json b/Shaders/grease_pencil/grease_pencil.json index d922b17f..c29a0770 100755 --- a/Shaders/grease_pencil/grease_pencil.json +++ b/Shaders/grease_pencil/grease_pencil.json @@ -34,8 +34,7 @@ ], "texture_params": [], "vertex_shader": "grease_pencil_shadows.vert.glsl", - "fragment_shader": "grease_pencil_shadows.frag.glsl", - "fragment_shader_path": "../include/empty.frag.glsl" + "fragment_shader": "../include/empty.frag.glsl" } ] } diff --git a/Shaders/include/empty.frag.glsl b/Shaders/include/empty.frag.glsl deleted file mode 100644 index e39c3cc1..00000000 --- a/Shaders/include/empty.frag.glsl +++ /dev/null @@ -1,7 +0,0 @@ -#version 450 - -out vec4 fragColor; - -void main() { - -} diff --git a/Shaders/include/pass.frag.glsl b/Shaders/include/pass_copy.frag.glsl similarity index 100% rename from Shaders/include/pass.frag.glsl rename to Shaders/include/pass_copy.frag.glsl diff --git a/Shaders/include/lamp_volume.vert.glsl b/Shaders/include/pass_lamp_volume.vert.glsl old mode 100755 new mode 100644 similarity index 100% rename from Shaders/include/lamp_volume.vert.glsl rename to Shaders/include/pass_lamp_volume.vert.glsl diff --git a/Shaders/matid_to_depth/matid_to_depth.json b/Shaders/matid_to_depth/matid_to_depth.json index a3f51570..66624a13 100755 --- a/Shaders/matid_to_depth/matid_to_depth.json +++ b/Shaders/matid_to_depth/matid_to_depth.json @@ -11,8 +11,7 @@ "cull_mode": "none", "links": [], "texture_params": [], - "vertex_shader": "matid_to_depth.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "matid_to_depth.frag.glsl" } ] diff --git a/Shaders/motion_blur_pass/motion_blur_pass.json b/Shaders/motion_blur_pass/motion_blur_pass.json index 9885cedf..2a8bdf1c 100755 --- a/Shaders/motion_blur_pass/motion_blur_pass.json +++ b/Shaders/motion_blur_pass/motion_blur_pass.json @@ -29,8 +29,7 @@ } ], "texture_params": [], - "vertex_shader": "motion_blur_pass.vert.glsl", - "vertex_shader_path": "../include/pass_viewray.vert.glsl", + "vertex_shader": "../include/pass_viewray.vert.glsl", "fragment_shader": "motion_blur_pass.frag.glsl" } ] diff --git a/Shaders/motion_blur_veloc_pass/motion_blur_veloc_pass.json b/Shaders/motion_blur_veloc_pass/motion_blur_veloc_pass.json index 03671ee4..09cf6a81 100755 --- a/Shaders/motion_blur_veloc_pass/motion_blur_veloc_pass.json +++ b/Shaders/motion_blur_veloc_pass/motion_blur_veloc_pass.json @@ -14,8 +14,7 @@ } ], "texture_params": [], - "vertex_shader": "motion_blur_veloc_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "motion_blur_veloc_pass.frag.glsl" } ] diff --git a/Shaders/ssao_pass/ssao_pass.json b/Shaders/ssao_pass/ssao_pass.json index fe0bee07..f7fc2bcf 100755 --- a/Shaders/ssao_pass/ssao_pass.json +++ b/Shaders/ssao_pass/ssao_pass.json @@ -36,8 +36,7 @@ } ], "texture_params": [], - "vertex_shader": "ssao_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "ssao_pass.frag.glsl" } ] diff --git a/Shaders/ssgi_blur_pass/ssgi_blur_pass.json b/Shaders/ssgi_blur_pass/ssgi_blur_pass.json index ef18fd22..c7225824 100755 --- a/Shaders/ssgi_blur_pass/ssgi_blur_pass.json +++ b/Shaders/ssgi_blur_pass/ssgi_blur_pass.json @@ -13,8 +13,7 @@ } ], "texture_params": [], - "vertex_shader": "ssgi_blur_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "ssgi_blur_pass.frag.glsl" }, { @@ -30,8 +29,7 @@ } ], "texture_params": [], - "vertex_shader": "ssgi_blur_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "ssgi_blur_pass.frag.glsl" }, { @@ -50,8 +48,7 @@ } ], "texture_params": [], - "vertex_shader": "ssgi_blur_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "ssgi_blur_pass.frag.glsl" }, @@ -74,8 +71,7 @@ } ], "texture_params": [], - "vertex_shader": "ssgi_blur_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "ssgi_blur_pass.frag.glsl" } ] diff --git a/Shaders/ssgi_pass/ssgi_pass.json b/Shaders/ssgi_pass/ssgi_pass.json index e989b4cf..3b841f99 100755 --- a/Shaders/ssgi_pass/ssgi_pass.json +++ b/Shaders/ssgi_pass/ssgi_pass.json @@ -24,8 +24,7 @@ } ], "texture_params": [], - "vertex_shader": "ssgi_pass.vert.glsl", - "vertex_shader_path": "../include/pass_viewray2.vert.glsl", + "vertex_shader": "../include/pass_viewray2.vert.glsl", "fragment_shader": "ssgi_pass.frag.glsl" } ] diff --git a/Shaders/ssr_pass/ssr_pass.json b/Shaders/ssr_pass/ssr_pass.json index 8bf4de20..fd3e0748 100755 --- a/Shaders/ssr_pass/ssr_pass.json +++ b/Shaders/ssr_pass/ssr_pass.json @@ -25,8 +25,7 @@ } ], "texture_params": [], - "vertex_shader": "ssr_pass.vert.glsl", - "vertex_shader_path": "../include/pass_viewray2.vert.glsl", + "vertex_shader": "../include/pass_viewray2.vert.glsl", "fragment_shader": "ssr_pass.frag.glsl" } ] diff --git a/Shaders/sss_pass/sss_pass.json b/Shaders/sss_pass/sss_pass.json index 1139df53..a304a91b 100755 --- a/Shaders/sss_pass/sss_pass.json +++ b/Shaders/sss_pass/sss_pass.json @@ -16,8 +16,7 @@ } ], "texture_params": [], - "vertex_shader": "sss_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "sss_pass.frag.glsl" }, { @@ -36,8 +35,7 @@ } ], "texture_params": [], - "vertex_shader": "sss_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "sss_pass.frag.glsl" } ] diff --git a/Shaders/supersample_resolve/supersample_resolve.json b/Shaders/supersample_resolve/supersample_resolve.json index f7cfd739..b87546a3 100755 --- a/Shaders/supersample_resolve/supersample_resolve.json +++ b/Shaders/supersample_resolve/supersample_resolve.json @@ -13,8 +13,7 @@ } ], "texture_params": [], - "vertex_shader": "supersample_resolve.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "supersample_resolve.frag.glsl" } ] diff --git a/Shaders/taa_pass/taa_pass.json b/Shaders/taa_pass/taa_pass.json index 070a9076..49a8d001 100755 --- a/Shaders/taa_pass/taa_pass.json +++ b/Shaders/taa_pass/taa_pass.json @@ -7,8 +7,7 @@ "cull_mode": "none", "links": [], "texture_params": [], - "vertex_shader": "taa_pass.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "taa_pass.frag.glsl" } ] diff --git a/Shaders/translucent_resolve/translucent_resolve.json b/Shaders/translucent_resolve/translucent_resolve.json index 7552ff31..1fbbb010 100755 --- a/Shaders/translucent_resolve/translucent_resolve.json +++ b/Shaders/translucent_resolve/translucent_resolve.json @@ -12,8 +12,7 @@ "alpha_blend_destination": "inverse_source_alpha", "alpha_blend_operation": "add", "links": [], - "vertex_shader": "translucent_resolve.vert.glsl", - "vertex_shader_path": "../include/pass.vert.glsl", + "vertex_shader": "../include/pass.vert.glsl", "fragment_shader": "translucent_resolve.frag.glsl" } ] diff --git a/Shaders/volumetric_light/volumetric_light.json b/Shaders/volumetric_light/volumetric_light.json index 02e130e0..df9e21e6 100755 --- a/Shaders/volumetric_light/volumetric_light.json +++ b/Shaders/volumetric_light/volumetric_light.json @@ -56,8 +56,7 @@ } ], "texture_params": [], - "vertex_shader": "volumetric_light.vert.glsl", - "vertex_shader_path": "../include/lamp_volume.vert.glsl", + "vertex_shader": "../include/pass_lamp_volume.vert.glsl", "fragment_shader": "volumetric_light.frag.glsl" } ] diff --git a/Shaders/volumetric_light_quad/volumetric_light_quad.json b/Shaders/volumetric_light_quad/volumetric_light_quad.json index 923d359e..5dc9bd55 100755 --- a/Shaders/volumetric_light_quad/volumetric_light_quad.json +++ b/Shaders/volumetric_light_quad/volumetric_light_quad.json @@ -54,8 +54,7 @@ } ], "texture_params": [], - "vertex_shader": "volumetric_light_quad.vert.glsl", - "vertex_shader_path": "../include/pass_viewray.vert.glsl", + "vertex_shader": "../include/pass_viewray.vert.glsl", "fragment_shader": "volumetric_light_quad.frag.glsl" } ] diff --git a/blender/arm/assets.py b/blender/arm/assets.py index ee6064a5..66ec7348 100755 --- a/blender/arm/assets.py +++ b/blender/arm/assets.py @@ -13,6 +13,8 @@ shaders = [] shaders_last = [] shader_datas = [] shader_passes = [] +shader_passes_assets = {} +shader_cons = {} def reset(): global assets @@ -22,6 +24,7 @@ def reset(): global shaders global shaders_last global shader_datas + global shader_cons assets = [] khafile_defs_last = khafile_defs khafile_defs = [] @@ -30,6 +33,13 @@ def reset(): shaders = [] shader_datas = [] shader_passes = [] + shader_cons = {} + shader_cons['mesh_vert'] = [] + shader_cons['depth_vert'] = [] + shader_cons['depth_frag'] = [] + shader_cons['voxel_vert'] = [] + shader_cons['voxel_frag'] = [] + shader_cons['voxel_geom'] = [] def add(file): global assets @@ -67,9 +77,6 @@ def add_shader_pass(data_name): add_shader_data(arm.utils.build_dir() + '/compiled/Shaders/shader_datas.arm') if data_name not in shader_passes: shader_passes.append(data_name) - full_name = arm.utils.build_dir() + '/compiled/Shaders/' + data_name - add_shader(full_name + '.vert.glsl') - add_shader(full_name + '.frag.glsl') invalidate_enabled = True # Disable invalidating during build process @@ -115,3 +122,27 @@ def invalidate_envmap_data(self, context): fp = arm.utils.get_fp_build() if os.path.isdir(fp + '/compiled/Assets/envmaps'): shutil.rmtree(fp + '/compiled/Assets/envmaps', onerror=remove_readonly) + +def shader_equal(sh, ar, shtype): + # Merge equal shaders + for e in ar: + if sh.is_equal(e): + sh.context.data[shtype] = e.context.data[shtype] + sh.is_linked = True + return + ar.append(sh) + +def vs_equal(c, ar): + shader_equal(c.vert, ar, 'vertex_shader') + +def fs_equal(c, ar): + shader_equal(c.frag, ar, 'fragment_shader') + +def gs_equal(c, ar): + shader_equal(c.geom, ar, 'geometry_shader') + +def tcs_equal(c, ar): + shader_equal(c.tesc, ar, 'tesscontrol_shader') + +def tes_equal(c, ar): + shader_equal(c.tese, ar, 'tesseval_shader') diff --git a/blender/arm/lib/make_datas.py b/blender/arm/lib/make_datas.py index 920db189..1c04c428 100644 --- a/blender/arm/lib/make_datas.py +++ b/blender/arm/lib/make_datas.py @@ -1,5 +1,6 @@ import os import arm.utils +import arm.assets as assets def write_data(res, defs, json_data, base_name): # Define @@ -11,6 +12,8 @@ def write_data(res, defs, json_data, base_name): sres['name'] = shader_id sres['contexts'] = [] + asset = assets.shader_passes_assets[base_name] + # Parse for c in json_data['contexts']: con = {} @@ -21,23 +24,28 @@ def write_data(res, defs, json_data, base_name): con['vertex_structure'] = [] # Names - vert_name = c['vertex_shader'].split('.')[0] - frag_name = c['fragment_shader'].split('.')[0] - if 'geometry_shader' in c: - geom_name = c['geometry_shader'].split('.')[0] - if 'tesscontrol_shader' in c: - tesc_name = c['tesscontrol_shader'].split('.')[0] - if 'tesseval_shader' in c: - tese_name = c['tesseval_shader'].split('.')[0] + con['vertex_shader'] = c['vertex_shader'].rsplit('.', 1)[0].split('/')[-1] + if con['vertex_shader'] not in asset: + asset.append(con['vertex_shader']) + + con['fragment_shader'] = c['fragment_shader'].rsplit('.', 1)[0].split('/')[-1] + if con['fragment_shader'] not in asset: + asset.append(con['fragment_shader']) - con['vertex_shader'] = vert_name + '.vert' - con['fragment_shader'] = frag_name + '.frag' if 'geometry_shader' in c: - con['geometry_shader'] = geom_name + '.geom' + con['geometry_shader'] = c['geometry_shader'].rsplit('.', 1)[0].split('/')[-1] + if con['geometry_shader'] not in asset: + asset.append(con['geometry_shader']) + if 'tesscontrol_shader' in c: - con['tesscontrol_shader'] = tesc_name + '.tesc' + con['tesscontrol_shader'] = c['tesscontrol_shader'].rsplit('.', 1)[0].split('/')[-1] + if con['tesscontrol_shader'] not in asset: + asset.append(con['tesscontrol_shader']) + if 'tesseval_shader' in c: - con['tesseval_shader'] = tese_name + '.tese' + con['tesseval_shader'] = c['tesseval_shader'].rsplit('.', 1)[0].split('/')[-1] + if con['tesseval_shader'] not in asset: + asset.append(con['tesseval_shader']) # Params params = ['depth_write', 'compare_mode', 'stencil_mode', \ @@ -53,48 +61,28 @@ def write_data(res, defs, json_data, base_name): con[p] = c[p] # Parse shaders - if 'vertex_shader_path' in c: - with open(c['vertex_shader_path']) as f: - vert = f.read().splitlines() - else: - with open(c['vertex_shader']) as f: - vert = f.read().splitlines() + with open(c['vertex_shader']) as f: + vert = f.read().splitlines() - if 'fragment_shader_path' in c: - with open(c['fragment_shader_path']) as f: - frag = f.read().splitlines() - else: - with open(c['fragment_shader']) as f: - frag = f.read().splitlines() + with open(c['fragment_shader']) as f: + frag = f.read().splitlines() parse_shader(sres, c, con, defs, vert, True) # Parse attribs for vertex shader parse_shader(sres, c, con, defs, frag, False) if 'geometry_shader' in c: - if 'geometry_shader_path' in c: - with open(c['geometry_shader_path']) as f: - geom = f.read().splitlines() - else: - with open(c['geometry_shader']) as f: - geom = f.read().splitlines() + with open(c['geometry_shader']) as f: + geom = f.read().splitlines() parse_shader(sres, c, con, defs, geom, False) if 'tesscontrol_shader' in c: - if 'tesscontrol_shader_path' in c: - with open(c['tesscontrol_shader_path']) as f: - tesc = f.read().splitlines() - else: - with open(c['tesscontrol_shader']) as f: - tesc = f.read().splitlines() + with open(c['tesscontrol_shader']) as f: + tesc = f.read().splitlines() parse_shader(sres, c, con, defs, tesc, False) if 'tesseval_shader' in c: - if 'tesseval_shader_path' in c: - with open(c['tesseval_shader_path']) as f: - tese = f.read().splitlines() - else: - with open(c['tesseval_shader']) as f: - tese = f.read().splitlines() + with open(c['tesseval_shader']) as f: + tese = f.read().splitlines() parse_shader(sres, c, con, defs, tese, False) def parse_shader(sres, c, con, defs, lines, parse_attributes): diff --git a/blender/arm/lib/make_variants.py b/blender/arm/lib/make_variants.py index c615d899..1581bfbe 100644 --- a/blender/arm/lib/make_variants.py +++ b/blender/arm/lib/make_variants.py @@ -21,54 +21,34 @@ def make(base_name, json_data, fp, defs): shaders.append(shader) shader['vert_name'] = c['vertex_shader'].split('.', 1)[0] - if 'vertex_shader_path' in c: - with open(c['vertex_shader_path']) as f: - shader['vert'] = f.read().splitlines() - else: - with open(c['vertex_shader']) as f: - shader['vert'] = f.read().splitlines() + with open(c['vertex_shader']) as f: + shader['vert'] = f.read().splitlines() shader['frag_name'] = c['fragment_shader'].split('.', 1)[0] - if 'fragment_shader_path' in c: - with open(c['fragment_shader_path']) as f: - shader['frag'] = f.read().splitlines() - else: - with open(c['fragment_shader']) as f: - shader['frag'] = f.read().splitlines() + with open(c['fragment_shader']) as f: + shader['frag'] = f.read().splitlines() if 'geometry_shader' in c: shader['geom_name'] = c['geometry_shader'].split('.', 1)[0] - if 'geometry_shader_path' in c: - with open(c['geometry_shader_path']) as f: - shader['geom'] = f.read().splitlines() - else: - with open(c['geometry_shader']) as f: - shader['geom'] = f.read().splitlines() + with open(c['geometry_shader']) as f: + shader['geom'] = f.read().splitlines() if 'tesscontrol_shader' in c: shader['tesc_name'] = c['tesscontrol_shader'].split('.', 1)[0] - if 'tesscontrol_shader_path' in c: - with open(c['tesscontrol_shader_path']) as f: - shader['tesc'] = f.read().splitlines() - else: - with open(c['tesscontrol_shader']) as f: - shader['tesc'] = f.read().splitlines() + with open(c['tesscontrol_shader']) as f: + shader['tesc'] = f.read().splitlines() if 'tesseval_shader' in c: shader['tese_name'] = c['tesseval_shader'].split('.', 1)[0] - if 'tesseval_shader_path' in c: - with open(c['tesseval_shader_path']) as f: - shader['tese'] = f.read().splitlines() - else: - with open(c['tesseval_shader']) as f: - shader['tese'] = f.read().splitlines() + with open(c['tesseval_shader']) as f: + shader['tese'] = f.read().splitlines() for shader in shaders: - write_variant(path, shader['vert_name'] + '.vert.glsl', defs, shader['vert']) - write_variant(path, shader['frag_name'] + '.frag.glsl', defs, shader['frag']) + write_variant(path, c['vertex_shader'].split('/')[-1], defs, shader['vert']) + write_variant(path, c['fragment_shader'].split('/')[-1], defs, shader['frag']) if 'geom' in shader: - write_variant(path, shader['geom_name'] + '.geom.glsl', defs, shader['geom']) + write_variant(path, c['geometry_shader'].split('/')[-1], defs, shader['geom']) if 'tesc' in shader: - write_variant(path, shader['tesc_name'] + '.tesc.glsl', defs, shader['tesc']) + write_variant(path, c['tesscontrol_shader'].split('/')[-1], defs, shader['tesc']) if 'tese' in shader: - write_variant(path, shader['tese_name'] + '.tese.glsl', defs, shader['tese']) + write_variant(path, c['tesseval_shader'].split('/')[-1], defs, shader['tese']) diff --git a/blender/arm/make.py b/blender/arm/make.py index 955230bb..153d47a1 100755 --- a/blender/arm/make.py +++ b/blender/arm/make.py @@ -37,14 +37,13 @@ def compile_shader_pass(res, raw_shaders_path, shader_name, defs): # Open json file json_name = shader_name + '.json' - base_name = json_name.split('.', 1)[0] with open(json_name) as f: json_file = f.read() json_data = json.loads(json_file) fp = arm.utils.get_fp_build() - arm.lib.make_datas.make(res, base_name, json_data, fp, defs) - arm.lib.make_variants.make(base_name, json_data, fp, defs) + arm.lib.make_datas.make(res, shader_name, json_data, fp, defs) + arm.lib.make_variants.make(shader_name, json_data, fp, defs) def remove_readonly(func, path, excinfo): os.chmod(path, stat.S_IWRITE) @@ -145,6 +144,7 @@ def export_data(fp, sdk_path, is_play=False, is_publish=False, in_viewport=False print('Shader flags: ' + str(defs)) # Write referenced shader passes + path = build_dir + '/compiled/Shaders' if not os.path.isfile(build_dir + '/compiled/Shaders/shader_datas.arm') or state.last_world_defs != wrd.world_defs: path = build_dir + '/compiled/Shaders' if not os.path.exists(path): @@ -155,6 +155,7 @@ def export_data(fp, sdk_path, is_play=False, is_publish=False, in_viewport=False # Ensure shader pass source exists if not os.path.exists(raw_shaders_path + '/' + ref): continue + assets.shader_passes_assets[ref] = [] if ref.startswith('compositor_pass'): cdefs = arm.utils.def_strings_to_array(wrd.compo_defs) compile_shader_pass(res, raw_shaders_path, ref, defs + cdefs) @@ -163,6 +164,9 @@ def export_data(fp, sdk_path, is_play=False, is_publish=False, in_viewport=False else: compile_shader_pass(res, raw_shaders_path, ref, defs) arm.utils.write_arm(path + '/shader_datas.arm', res) + for ref in assets.shader_passes: + for s in assets.shader_passes_assets[ref]: + assets.add_shader(path + '/' + s + '.glsl') state.last_world_defs = wrd.world_defs # Reset path diff --git a/blender/arm/material/make_depth.py b/blender/arm/material/make_depth.py index 7277368a..8c0e0321 100644 --- a/blender/arm/material/make_depth.py +++ b/blender/arm/material/make_depth.py @@ -6,6 +6,7 @@ import arm.material.make_skin as make_skin import arm.material.make_tess as make_tess import arm.material.make_particle as make_particle import arm.material.make_mesh as make_mesh +import arm.assets as assets import arm.utils def make(context_id, rpasses, shadowmap=False): @@ -24,9 +25,6 @@ def make(context_id, rpasses, shadowmap=False): tesc = None tese = None - gapi = arm.utils.get_gapi() - if gapi == 'direct3d9': - frag.add_out('vec4 fragColor') # Definition requred for d3d9 - pixel shader must minimally write all four components of COLOR0 vert.write_main_header('vec4 spos = vec4(pos, 1.0);') parse_opacity = 'translucent' in rpasses or mat_state.material.arm_discard @@ -148,6 +146,7 @@ def make(context_id, rpasses, shadowmap=False): con_depth.add_elem('tang', 4) # TODO: pass vbuf with proper struct + gapi = arm.utils.get_gapi() if gapi.startswith('direct3d') and bpy.data.worlds['Arm'].arm_deinterleaved_buffers == False: vert.write('vec3 t1 = nor; // TODO: Temp for d3d') if con_depth.is_elem('tex'): @@ -157,9 +156,9 @@ def make(context_id, rpasses, shadowmap=False): opac = mat_state.material.arm_discard_opacity_shadows frag.write('if (opacity < {0}) discard;'.format(opac)) - # frag.write('fragColor = vec4(0.0);') + assets.vs_equal(con_depth, assets.shader_cons['depth_vert']) + assets.fs_equal(con_depth, assets.shader_cons['depth_frag']) make_mesh.make_finalize(con_depth) return con_depth - diff --git a/blender/arm/material/make_mesh.py b/blender/arm/material/make_mesh.py index 1cd60692..2b401cff 100644 --- a/blender/arm/material/make_mesh.py +++ b/blender/arm/material/make_mesh.py @@ -1,5 +1,5 @@ import bpy -import arm.make_state as state +import arm.assets as assets import arm.material.mat_state as mat_state import arm.material.mat_utils as mat_utils import arm.material.cycles as cycles @@ -49,6 +49,8 @@ def make(context_id): elif rid == 'Deferred Plus': make_deferred_plus(con_mesh) + assets.vs_equal(con_mesh, assets.shader_cons['mesh_vert']) + make_finalize(con_mesh) return con_mesh diff --git a/blender/arm/material/make_rect.py b/blender/arm/material/make_rect.py index fc35ca0e..3cbf805b 100644 --- a/blender/arm/material/make_rect.py +++ b/blender/arm/material/make_rect.py @@ -21,7 +21,7 @@ def make_rect(con_rect): vert = con_rect.make_vert() frag = con_rect.make_frag() - vert.vertex_structure_as_vsinput = False # Rect structure is used instead + vert.vstruct_as_vsin = False # Rect structure is used instead vert.add_in('vec2 pos') vert.add_out('vec2 texCoordRect') diff --git a/blender/arm/material/make_shader.py b/blender/arm/material/make_shader.py index 32ae37ea..84887e09 100644 --- a/blender/arm/material/make_shader.py +++ b/blender/arm/material/make_shader.py @@ -105,7 +105,7 @@ def write_shaders(rel_path, con, rpass, matname): write_shader(rel_path, con.tese, 'tese', rpass, matname, keep_cache=keep_cache) def write_shader(rel_path, shader, ext, rpass, matname, keep_cache=True): - if shader == None: + if shader == None or shader.is_linked: return # TODO: blend context diff --git a/blender/arm/material/make_voxel.py b/blender/arm/material/make_voxel.py index 90c28629..c1e0ea21 100644 --- a/blender/arm/material/make_voxel.py +++ b/blender/arm/material/make_voxel.py @@ -1,5 +1,6 @@ import bpy import arm.utils +import arm.assets as assets import arm.material.cycles as cycles import arm.material.mat_state as mat_state import arm.material.mat_utils as mat_utils @@ -8,9 +9,15 @@ import arm.material.make_particle as make_particle def make(context_id): rpdat = arm.utils.get_rp() if rpdat.rp_gi == 'Voxel GI': - return make_gi(context_id) + con = make_gi(context_id) else: - return make_ao(context_id) + con = make_ao(context_id) + + assets.vs_equal(con, assets.shader_cons['voxel_vert']) + assets.gs_equal(con, assets.shader_cons['voxel_frag']) + assets.fs_equal(con, assets.shader_cons['voxel_geom']) + + return con def make_gi(context_id): con_voxel = mat_state.data.add_context({ 'name': context_id, 'depth_write': False, 'compare_mode': 'always', 'cull_mode': 'none', 'color_write_red': False, 'color_write_green': False, 'color_write_blue': False, 'color_write_alpha': False, 'conservative_raster': True }) diff --git a/blender/arm/material/shader.py b/blender/arm/material/shader.py index 444ceca3..4c738720 100644 --- a/blender/arm/material/shader.py +++ b/blender/arm/material/shader.py @@ -18,9 +18,10 @@ class Shader: self.write_pre = False self.write_pre_header = 0 self.tab = 1 - self.vertex_structure_as_vsinput = True + self.vstruct_as_vsin = True self.lock = False self.geom_passthrough = False + self.is_linked = False # Use already generated shader def add_include(self, s): self.includes.append(s) @@ -82,6 +83,20 @@ class Shader: def write_main_header(self, s): self.main_header += s + '\n' + def is_equal(self, sh): + self.vstruct_to_vsin() + return self.ins == sh.ins and \ + self.main == sh.main and \ + self.main_header == sh.main_header and \ + self.main_pre == sh.main_pre + + def vstruct_to_vsin(self): + if self.shader_type != 'vert' or self.ins != [] or not self.vstruct_as_vsin: # Vertex structure as vertex shader input + return + vs = self.context.data['vertex_structure'] + for e in vs: + self.add_in('vec' + str(e['size']) + ' ' + e['name']) + def get(self): s = '#version 450\n' @@ -94,11 +109,9 @@ class Shader: in_ext = '' out_ext = '' - if self.shader_type == 'vert' and self.vertex_structure_as_vsinput: # Vertex structure as vertex shader input - vs = self.context.data['vertex_structure'] - for e in vs: - self.add_in('vec' + str(e['size']) + ' ' + e['name']) - + if self.shader_type == 'vert': + self.vstruct_to_vsin() + elif self.shader_type == 'tesc': in_ext = '[]' out_ext = '[]' diff --git a/blender/arm/props_exporter.py b/blender/arm/props_exporter.py index d89d58d3..42caa4f2 100644 --- a/blender/arm/props_exporter.py +++ b/blender/arm/props_exporter.py @@ -80,7 +80,6 @@ class ArmExporterListItem(bpy.types.PropertyGroup): items = [('opengl', 'Auto', 'opengl'), ('opengl', 'OpenGL', 'opengl'), ('vulkan', 'Vulkan', 'vulkan'), - ('direct3d9', 'Direct3D9', 'direct3d9'), ('direct3d11', 'Direct3D11', 'direct3d11'), ('direct3d12', 'Direct3D12', 'direct3d12')], name="Graphics API", default='opengl', description='Based on currently selected target', update=update_gapi_win)