Switch to make renderer

This commit is contained in:
Lubos Lenco 2016-12-23 02:51:24 +01:00
parent 82fc7176b2
commit 6c965a73c5
6 changed files with 53 additions and 68 deletions

View file

@ -61,6 +61,8 @@ def invalidate_shader_cache(self, context):
fp = armutils.get_fp()
if os.path.isdir(fp + '/build/compiled/ShaderDatas'):
shutil.rmtree(fp + '/build/compiled/ShaderDatas')
if os.path.isdir(fp + '/build/compiled/ShaderRaws'):
shutil.rmtree(fp + '/build/compiled/ShaderRaws')
def invalidate_compiled_data(self, context):
global invalidate_enabled

Binary file not shown.

View file

@ -11,13 +11,13 @@ def make_renderer(cam):
global links
if cam.rp_renderer == 'Forward':
nodes_renderpath.load_library('forward_path_high', 'armory_default')
nodes_renderpath.load_library('forward_path', 'armory_default')
group = bpy.data.node_groups['armory_default']
nodes = group.nodes
links = group.links
make_forward(cam)
else: # Deferred
nodes_renderpath.load_library('deferred_path_high', 'armory_default')
nodes_renderpath.load_library('deferred_path', 'armory_default')
group = bpy.data.node_groups['armory_default']
nodes = group.nodes
links = group.links
@ -31,73 +31,79 @@ def relink(start_node, next_node):
def make_forward(cam):
if not cam.rp_hdr:
nodes['Begin'].inputs[5].default_value = False
nodes['Begin'].inputs[1].default_value = cam.rp_hdr
nodes['Screen'].inputs[0].default_value = int(cam.rp_supersampling)
if cam.rp_shadowmap != 'None':
n = nodes['Shadow Map']
n.inputs[1].default_value = n.inputs[2].default_value = int(cam.rp_shadowmap)
if cam.rp_supersampling != '1':
nodes['Screen'].inputs[0].default_value = int(cam.rp_supersampling)
else:
l = nodes['Begin'].outputs[0].links[0]
links.remove(l)
links.new(nodes['Begin'].outputs[0], nodes['Set Target Mesh'].inputs[0])
if not cam.rp_worldnodes:
relink('Draw World', 'Clear Target.002')
if not cam.rp_overlays:
relink('Clear Target.002', 'Set Target.004')
relink('Draw World', 'Set Target Accum')
if not cam.rp_translucency:
relink('Set Target.004', 'Draw Compositor + FXAA')
relink('Set Target Accum', 'Draw Compositor + FXAA')
if cam.rp_overlays:
links.new(nodes['Draw Compositor + FXAA'].outputs[0], nodes['Clear Target Overlay'].inputs[0])
def make_deferred(cam):
if not cam.rp_hdr:
nodes['Begin'].inputs[5].default_value = False
nodes['Begin'].inputs[1].default_value = cam.rp_hdr
nodes['Screen'].inputs[0].default_value = int(cam.rp_supersampling)
if cam.rp_shadowmap != 'None':
n = nodes['Shadow Map']
n.inputs[1].default_value = n.inputs[2].default_value = int(cam.rp_shadowmap)
else:
l = nodes['Loop Lamps'].outputs[1].links[0]
links.remove(l)
links.new(nodes['Loop Lamps'].outputs[1], nodes['Deferred Light'].inputs[0])
if cam.rp_supersampling != '1':
nodes['Screen'].inputs[0].default_value = int(cam.rp_supersampling)
if not cam.rp_worldnodes:
relink('Draw World', 'Set Target.002')
if not cam.rp_translucency:
relink('Set Target.002', 'Bloom')
if not cam.rp_overlays:
relink('Clear Target.004', 'SMAA')
if not cam.rp_decals:
relink('Set Target.005', 'SSAO')
# if not cam.rp_decals:
# relink('Set Target.005', 'SSAO')
if not cam.rp_ssao:
relink('SSAO', 'Deferred Indirect')
l = nodes['Deferred Indirect'].inputs[3].links[0]
links.remove(l)
if not cam.rp_worldnodes:
relink('Draw World', 'Set Target Accum')
if not cam.rp_translucency:
relink('Set Target Accum', 'Bloom')
if not cam.rp_bloom:
relink('Bloom', 'SSR')
if not cam.rp_ssr:
relink('SSR', 'Draw Compositor')
if cam.rp_compositornodes:
if not cam.rp_compositornodes:
pass
last_node = 'Draw Compositor'
if cam.rp_antialiasing == 'SMAA':
l = nodes['SMAA'].outputs[0].links[0]
links.remove(l)
n = nodes['Framebuffer']
links.new(n.outputs[0], nodes['SMAA'].inputs[1])
l = nodes['SMAA'].inputs[5].links[0] # Veloc
links.remove(l)
l = nodes['GBuffer'].inputs[2].links[0]
links.remove(l)
elif cam.rp_antialiasing == 'FXAA' or cam.rp_antialiasing == 'None':
last_node = 'SMAA'
elif cam.rp_antialiasing == 'TAA':
last_node = 'Copy'
links.new(nodes['SMAA'].outputs[0], nodes['TAA'].inputs[0])
links.new(nodes['Reroute.019'].outputs[0], nodes['SMAA'].inputs[5])
links.new(nodes['gbuffer2'].outputs[0], nodes['GBuffer'].inputs[2])
links.new(nodes['Reroute.014'].outputs[0], nodes['SMAA'].inputs[1])
elif cam.rp_antialiasing == 'FXAA':
last_node = 'FXAA'
relink('SMAA', 'FXAA')
l = nodes['GBuffer'].inputs[2].links[0]
elif cam.rp_antialiasing == 'None':
last_node = 'Draw Compositor'
l = nodes['Draw Compositor'].outputs[0].links[0]
links.remove(l)
links.new(nodes['Framebuffer'].outputs[0], nodes['Draw Compositor'].inputs[1])
if cam.rp_overlays:
links.new(nodes[last_node].outputs[0], nodes['Clear Target Overlay'].inputs[0])

View file

@ -841,8 +841,6 @@ node_categories = [
def reload_blend_data():
if bpy.data.node_groups.get('Armory PBR') == None:
load_library('Armory PBR')
# Temporary
reimport_paths()
check_default()
def check_default():
@ -855,9 +853,6 @@ def load_library(asset_name, rename=None):
data_names = [asset_name]
# Remove old
# for name in data_names:
# if name in bpy.data.node_groups and name != 'Armory PBR':
# bpy.data.node_groups.remove(bpy.data.node_groups[name], do_unlink=True)
if rename != None and rename in bpy.data.node_groups and asset_name != 'Armory PBR':
bpy.data.node_groups.remove(bpy.data.node_groups[rename], do_unlink=True)
@ -871,26 +866,6 @@ def load_library(asset_name, rename=None):
if rename != None:
ref.name = rename
# Temporary
def reimport_paths():
sdk_path = armutils.get_sdk_path()
data_path = sdk_path + '/armory/blender/data/data.blend'
data_names = ['forward_path', 'forward_path_low', 'forward_path_high', 'deferred_path', 'deferred_path_low', 'deferred_path_high', 'hybrid_path', 'vr_path', 'grease_pencil_path']
# Remove old
for name in data_names:
if name in bpy.data.node_groups:
bpy.data.node_groups.remove(bpy.data.node_groups[name], do_unlink=True)
# Import
data_refs = data_names.copy()
with bpy.data.libraries.load(data_path, link=False) as (data_from, data_to):
data_to.node_groups = data_refs
for ref in data_refs:
ref.use_fake_user = True
#
def register():
bpy.utils.register_module(__name__)
try:

View file

@ -146,7 +146,7 @@ def init_properties():
bpy.types.Armature.actiontraitlist_index = bpy.props.IntProperty(name="Action index", default=0)
# For camera
bpy.types.Camera.frustum_culling = bpy.props.BoolProperty(name="Frustum Culling", description="Perform frustum culling for this camera", default=True)
bpy.types.Camera.renderpath_path = bpy.props.StringProperty(name="Render Path", description="Render path nodes used for this camera", default="deferred_path_low", update=assets.invalidate_shader_cache) # default="armory_default")
bpy.types.Camera.renderpath_path = bpy.props.StringProperty(name="Render Path", description="Render path nodes used for this camera", default="armory_default", update=assets.invalidate_shader_cache)
bpy.types.Camera.renderpath_id = bpy.props.StringProperty(name="Render Path ID", description="Asset ID", default="deferred")
bpy.types.Camera.renderpath_passes = bpy.props.StringProperty(name="Render Path Passes", description="Referenced render passes", default="")
bpy.types.Camera.is_probe = bpy.props.BoolProperty(name="Probe", description="Render this camera as environment probe using Cycles", default=False)
@ -169,7 +169,7 @@ def init_properties():
('Deferred', 'Deferred', 'Deferred'),
('Deferred High', 'Deferred High', 'Deferred High'),
('VR Low', 'VR Low', 'VR Low'),
('Grease Pencil', 'Grease Pencil', 'Grease Pencil'),
#('Grease Pencil', 'Grease Pencil', 'Grease Pencil'),
#('Path-Trace', 'Path-Trace', 'Path-Trace')],
],
name="Preset", description="Render path preset", default='None', update=update_preset)
@ -179,7 +179,7 @@ def init_properties():
#('Path-Trace', 'Path-Trace', 'Path-Trace')],
],
name="Renderer", description="Renderer type", default='Deferred')
bpy.types.Camera.rp_depthprepass = bpy.props.BoolProperty(name="Depth Prepass", description="Depth Prepass for mesh context", default=True)
bpy.types.Camera.rp_depthprepass = bpy.props.BoolProperty(name="Depth Prepass", description="Depth Prepass for mesh context", default=False)
bpy.types.Camera.rp_meshes = bpy.props.BoolProperty(name="Meshes", description="Render mesh objects", default=True)
bpy.types.Camera.rp_hdr = bpy.props.BoolProperty(name="HDR", description="Render in HDR Space", default=True)
bpy.types.Camera.rp_render_to_texture = bpy.props.BoolProperty(name="Post Process", description="Render scene to texture for further processing", default=True)

View file

@ -3,6 +3,7 @@ import nodes_renderpath
from bpy.types import Menu, Panel, UIList
from bpy.props import *
import make_renderer
import assets
def set_preset(preset):
cam = bpy.context.camera
@ -198,7 +199,7 @@ class GenRPDataPropsPanel(bpy.types.Panel):
layout.prop(dat, "rp_hdr")
layout.prop(dat, "rp_worldnodes")
layout.prop(dat, "rp_stereo")
layout.prop(dat, "rp_greasepencil")
# layout.prop(dat, "rp_greasepencil")
layout.separator()
layout.prop(dat, "rp_render_to_texture")
@ -306,6 +307,7 @@ class ArmorySetRenderPathButton(bpy.types.Operator):
def execute(self, context):
if bpy.context.camera == None:
return {'CANCELLED'}
assets.invalidate_shader_cache(self, context)
make_renderer.make_renderer(bpy.context.camera)
bpy.context.camera.renderpath_path = 'armory_default'
return {'FINISHED'}