diff --git a/blender/exporter.py b/blender/exporter.py index 5cb6d373..c4c65310 100755 --- a/blender/exporter.py +++ b/blender/exporter.py @@ -2201,6 +2201,9 @@ class ArmoryExporter: o['contexts'] = [] + if not material.use_nodes: + material.use_nodes = True + sd, is_transluc = make_material.parse(material, o, self.materialToObjectDict, ArmoryExporter.renderpath_id) if is_transluc: transluc_used = True diff --git a/blender/make.py b/blender/make.py index c0d07e7b..506b01b4 100755 --- a/blender/make.py +++ b/blender/make.py @@ -184,14 +184,16 @@ def compile_project(target_name=None, is_publish=False, watch=False, patch=False if patch: if state.compileproc == None: # Already compiling # Patch running game, stay silent, disable krafix and haxe - # cmd.append('--silent') - cmd.append('--noproject') - cmd.append('--haxe') - cmd.append('""') cmd.append('--krafix') cmd.append('""') + cmd.append('--haxe') + cmd.append('""') + # cmd.append('--silent') + cmd.append('--noproject') # Khamake throws error when krafix is not found, hide for now - state.compileproc = subprocess.Popen(cmd, stderr=subprocess.PIPE) + # state.compileproc = subprocess.Popen(cmd, stderr=subprocess.PIPE) + # shell=False results in --krafix arg not parsed + state.compileproc = subprocess.Popen(' '.join(cmd), stderr=subprocess.PIPE, shell=True) if state.playproc == None: if state.in_viewport: mode = 'play_viewport' diff --git a/blender/make_renderer.py b/blender/make_renderer.py index b501b89c..a2c74da6 100644 --- a/blender/make_renderer.py +++ b/blender/make_renderer.py @@ -41,6 +41,8 @@ def make_forward(cam): l = nodes['Begin'].outputs[0].links[0] links.remove(l) links.new(nodes['Begin'].outputs[0], nodes['Set Target Mesh'].inputs[0]) + relink('Bind Target Mesh SM', 'Draw Meshes Mesh') # No shadowmap bind + relink('Bind Target Transluc SM', 'Draw Meshes Transluc') if not cam.rp_worldnodes: relink('Draw World', 'Set Target Accum') @@ -63,6 +65,11 @@ def make_deferred(cam): l = nodes['Loop Lamps'].outputs[1].links[0] links.remove(l) links.new(nodes['Loop Lamps'].outputs[1], nodes['Deferred Light'].inputs[0]) + l = nodes['Deferred Light'].inputs[3].links[0] # No shadowmap bind + links.remove(l) + l = nodes['Volumetric Light'].inputs[6].links[0] + links.remove(l) + relink('Bind Target Transluc SM', 'Draw Meshes Transluc') # if not cam.rp_decals: # relink('Set Target.005', 'SSAO') diff --git a/blender/make_world.py b/blender/make_world.py index 6c11f500..98e61816 100755 --- a/blender/make_world.py +++ b/blender/make_world.py @@ -60,10 +60,6 @@ def build_node_tree(world): if wrd.generate_clouds: wrd.world_defs += '_EnvClouds' - # Shadows disabled - if wrd.generate_shadows == False: - wrd.world_defs += '_NoShadows' - # Percentage closer soft shadows if wrd.generate_pcss_state == 'On': wrd.world_defs += '_PCSS' @@ -87,7 +83,8 @@ def build_node_tree(world): for cam in bpy.data.cameras: if cam.is_probe: wrd.world_defs += '_Probes' - break + if cam.rp_shadowmap == 'None': + wrd.world_defs += '_NoShadows' # Area lamps for lamp in bpy.data.lamps: diff --git a/blender/material/make_mesh.py b/blender/material/make_mesh.py index 2fb60915..f2b58728 100644 --- a/blender/material/make_mesh.py +++ b/blender/material/make_mesh.py @@ -228,40 +228,46 @@ def make_forward_base(con_mesh, parse_opacity=False): frag.write('float dotNH = dot(n, h);') frag.write('float dotVH = dot(v, h);') + if '_NoShadows' in wrd.world_defs: + is_shadows = False + else: + is_shadows = True if '_PCSS' in wrd.world_defs: is_pcss = True else: is_pcss = False - if tese != None: - tese.add_out('vec4 lampPos') - tese.add_uniform('mat4 LVP', '_lampViewProjectionMatrix') - tese.write('lampPos = LVP * vec4(wposition, 1.0);') - else: - vert.add_out('vec4 lampPos') - vert.add_uniform('mat4 LWVP', '_lampWorldViewProjectionMatrix') - vert.write('lampPos = LWVP * spos;') - - if is_pcss: - frag.add_include('../../Shaders/std/shadows_pcss.glsl') - frag.add_uniform('sampler2D snoise', link='_noise64', included=True) - frag.add_uniform('float lampSizeUV', link='_lampSizeUV', included=True) - else: - frag.add_include('../../Shaders/std/shadows.glsl') - frag.add_uniform('sampler2D shadowMap', included=True) - frag.add_uniform('bool receiveShadow') - frag.add_uniform('float shadowsBias', '_lampShadowsBias') frag.write('float visibility = 1.0;') - frag.write('if (receiveShadow && lampPos.w > 0.0) {') - frag.tab += 1 - frag.write('vec3 lpos = lampPos.xyz / lampPos.w;') - frag.write('lpos.xy = lpos.xy * 0.5 + 0.5;') - if is_pcss: - frag.write('visibility = PCSS(lpos.xy, lpos.z - shadowsBias);') - else: - frag.write('visibility = PCF(lpos.xy, lpos.z - shadowsBias);') - frag.tab -= 1 - frag.write('}') + if is_shadows: + if tese != None: + tese.add_out('vec4 lampPos') + tese.add_uniform('mat4 LVP', '_lampViewProjectionMatrix') + tese.write('lampPos = LVP * vec4(wposition, 1.0);') + else: + vert.add_out('vec4 lampPos') + vert.add_uniform('mat4 LWVP', '_lampWorldViewProjectionMatrix') + vert.write('lampPos = LWVP * spos;') + + if is_pcss: + frag.add_include('../../Shaders/std/shadows_pcss.glsl') + frag.add_uniform('sampler2D snoise', link='_noise64', included=True) + frag.add_uniform('float lampSizeUV', link='_lampSizeUV', included=True) + else: + frag.add_include('../../Shaders/std/shadows.glsl') + frag.add_uniform('sampler2D shadowMap', included=True) + frag.add_uniform('bool receiveShadow') + frag.add_uniform('float shadowsBias', '_lampShadowsBias') + + frag.write('if (receiveShadow && lampPos.w > 0.0) {') + frag.tab += 1 + frag.write('vec3 lpos = lampPos.xyz / lampPos.w;') + frag.write('lpos.xy = lpos.xy * 0.5 + 0.5;') + if is_pcss: + frag.write('visibility = PCSS(lpos.xy, lpos.z - shadowsBias);') + else: + frag.write('visibility = PCF(lpos.xy, lpos.z - shadowsBias);') + frag.tab -= 1 + frag.write('}') frag.add_uniform('float spotlightCutoff', '_spotlampCutoff') frag.add_uniform('float spotlightExponent', '_spotlampExponent') diff --git a/blender/props.py b/blender/props.py index d4632cee..10c432b2 100755 --- a/blender/props.py +++ b/blender/props.py @@ -292,7 +292,6 @@ def init_properties(): bpy.types.World.generate_ssao_size = bpy.props.FloatProperty(name="Size", default=0.12, update=assets.invalidate_shader_cache) bpy.types.World.generate_ssao_strength = bpy.props.FloatProperty(name="Strength", default=0.25, update=assets.invalidate_shader_cache) bpy.types.World.generate_ssao_texture_scale = bpy.props.FloatProperty(name="Texture Scale", default=1.0, min=0.0, max=1.0, update=assets.invalidate_shader_cache) - bpy.types.World.generate_shadows = bpy.props.BoolProperty(name="Shadows", default=True, update=assets.invalidate_shader_cache) bpy.types.World.generate_bloom = bpy.props.BoolProperty(name="Bloom", default=True, update=assets.invalidate_shader_cache) bpy.types.World.generate_bloom_threshold = bpy.props.FloatProperty(name="Threshold", default=20.0, update=assets.invalidate_shader_cache) bpy.types.World.generate_bloom_strength = bpy.props.FloatProperty(name="Strength", default=0.5, update=assets.invalidate_shader_cache) diff --git a/blender/props_renderer.py b/blender/props_renderer.py index d2b0be4e..8d0975c1 100644 --- a/blender/props_renderer.py +++ b/blender/props_renderer.py @@ -248,12 +248,10 @@ class PropsRPDataPropsPanel(bpy.types.Panel): wrd = bpy.data.worlds['Arm'] if obj.type == 'CAMERA': - layout.prop(wrd, 'generate_shadows') - if wrd.generate_shadows: - layout.prop(wrd, 'generate_pcss_state') - if wrd.generate_pcss_state == 'On' or wrd.generate_pcss_state == 'Auto': - layout.prop(wrd, 'generate_pcss_rings') - layout.prop(wrd, 'generate_ssrs') + layout.prop(wrd, 'generate_pcss_state') + if wrd.generate_pcss_state == 'On' or wrd.generate_pcss_state == 'Auto': + layout.prop(wrd, 'generate_pcss_rings') + layout.prop(wrd, 'generate_ssrs') layout.prop(wrd, 'arm_samples_per_pixel') layout.prop(wrd, 'generate_gpu_skin') diff --git a/blender/write_data.py b/blender/write_data.py index 3e30e8ee..9348f8e3 100755 --- a/blender/write_data.py +++ b/blender/write_data.py @@ -243,10 +243,6 @@ const float seaFade = """ + str(round(wrd.generate_ocean_fade * 100) / 100) + "" const float ssaoStrength = """ + str(round(wrd.generate_ssao_strength * 100) / 100) + """; const float ssaoTextureScale = """ + str(round(wrd.generate_ssao_texture_scale * 10) / 10) + """; """) - # if wrd.generate_shadows: - # f.write( -# """const float shadowsBias = """ + str(wrd.generate_shadows_bias) + """; -# """) if wrd.generate_bloom: f.write( """const float bloomThreshold = """ + str(round(wrd.generate_bloom_threshold * 100) / 100) + """;