armory/blender/arm/make_renderpath.py

331 lines
12 KiB
Python
Raw Normal View History

2016-09-23 00:34:42 +02:00
import bpy
2017-03-15 12:30:14 +01:00
import arm.assets as assets
import arm.utils
2017-12-05 22:00:27 +01:00
import arm.log as log
2017-12-05 23:06:24 +01:00
import arm.make_state as state
2016-09-23 00:34:42 +02:00
2018-01-03 15:09:55 +01:00
make_hook = None
2017-12-20 22:56:22 +01:00
def add_world_defs():
wrd = bpy.data.worlds['Arm']
rpdat = arm.utils.get_rp()
# Screen-space ray-traced shadows
if rpdat.arm_ssrs:
wrd.world_defs += '_SSRS'
if wrd.arm_two_sided_area_lamp:
wrd.world_defs += '_TwoSidedAreaLamp'
# Store contexts
if rpdat.rp_hdr == False:
wrd.world_defs += '_LDR'
# Alternative models
if rpdat.arm_diffuse_model == 'OrenNayar':
wrd.world_defs += '_OrenNayar'
# TODO: Lamp texture test..
if wrd.arm_lamp_texture != '':
wrd.world_defs += '_LampColTex'
if wrd.arm_lamp_ies_texture != '':
wrd.world_defs += '_LampIES'
assets.add_embedded_data('iestexture.png')
if wrd.arm_lamp_clouds_texture != '':
wrd.world_defs += '_LampClouds'
assets.add_embedded_data('cloudstexture.png')
voxelgi = False
voxelao = False
if rpdat.rp_renderer == 'Deferred':
assets.add_khafile_def('arm_deferred')
# Shadows
if rpdat.rp_shadowmap_cascades != '1':
wrd.world_defs += '_CSM'
assets.add_khafile_def('arm_csm')
if rpdat.rp_shadowmap == 'Off':
wrd.world_defs += '_NoShadows'
assets.add_khafile_def('arm_no_shadows')
# GI
has_voxels = state.in_viewport == False or bpy.app.version >= (2, 80, 1)
if has_voxels:
if rpdat.rp_gi == 'Voxel GI':
voxelgi = True
elif rpdat.rp_gi == 'Voxel AO':
voxelao = True
# SS
# if rpdat.rp_dfrs:
# wrd.world_defs += '_DFRS'
# assets.add_khafile_def('arm_sdf')
# if rpdat.rp_dfao:
# wrd.world_defs += '_DFAO'
# assets.add_khafile_def('arm_sdf')
# if rpdat.rp_dfgi:
# wrd.world_defs += '_DFGI'
# assets.add_khafile_def('arm_sdf')
# wrd.world_defs += '_Rad' # Always do radiance for gi
# wrd.world_defs += '_Irr'
if rpdat.rp_ssgi == 'RTGI' or rpdat.rp_ssgi == 'RTAO':
if rpdat.rp_ssgi == 'RTGI':
wrd.world_defs += '_RTGI'
if wrd.arm_ssgi_rays == '9':
wrd.world_defs += '_SSGICone9'
if rpdat.rp_autoexposure:
wrd.world_defs += '_AutoExposure'
if voxelgi or voxelao:
assets.add_khafile_def('arm_voxelgi')
wrd.world_defs += '_VoxelCones' + wrd.arm_voxelgi_cones
if rpdat.arm_voxelgi_revoxelize:
assets.add_khafile_def('arm_voxelgi_revox')
if rpdat.arm_voxelgi_camera:
wrd.world_defs += '_VoxelGICam'
if rpdat.arm_voxelgi_temporal:
assets.add_khafile_def('arm_voxelgi_temporal')
wrd.world_defs += '_VoxelGITemporal'
wrd.world_defs += '_Rad' # Always do radiance for voxels
wrd.world_defs += '_Irr'
if voxelgi:
wrd.world_defs += '_VoxelGI'
if rpdat.arm_voxelgi_shadows:
wrd.world_defs += '_VoxelGIDirect'
wrd.world_defs += '_VoxelGIShadow'
if rpdat.arm_voxelgi_refraction:
wrd.world_defs += '_VoxelGIDirect'
wrd.world_defs += '_VoxelGIRefract'
if rpdat.arm_voxelgi_emission:
wrd.world_defs += '_VoxelGIEmission'
elif voxelao:
wrd.world_defs += '_VoxelAO'
if arm.utils.get_gapi().startswith('direct3d'): # Flip Y axis in drawQuad command
wrd.world_defs += '_InvY'
# Area lamps
for lamp in bpy.data.lamps:
if lamp.type == 'AREA':
wrd.world_defs += '_LTC'
assets.add_khafile_def('arm_ltc')
break
2017-11-22 21:17:36 +01:00
def build():
2018-01-03 15:09:55 +01:00
if make_hook != None:
make_hook()
return
2017-11-22 21:17:36 +01:00
assets_path = arm.utils.get_sdk_path() + 'armory/Assets/'
wrd = bpy.data.worlds['Arm']
2017-08-21 20:16:06 +02:00
rpdat = arm.utils.get_rp()
2017-08-19 12:10:06 +02:00
2017-12-20 22:56:22 +01:00
add_world_defs()
2017-10-01 19:42:47 +02:00
mobile_mat = rpdat.arm_material_model == 'Mobile' or rpdat.arm_material_model == 'Solid'
if not mobile_mat:
2017-06-18 19:20:20 +02:00
# Always include
assets.add(assets_path + 'brdf.png')
assets.add_embedded_data('brdf.png')
2016-09-23 00:34:42 +02:00
2017-11-22 21:17:36 +01:00
if rpdat.rp_hdr:
assets.add_khafile_def('rp_hdr')
assets.add_khafile_def('rp_renderer={0}'.format(rpdat.rp_renderer))
if rpdat.rp_depthprepass:
assets.add_khafile_def('rp_depthprepass')
if rpdat.rp_shadowmap != 'Off':
assets.add_khafile_def('rp_shadowmap')
assets.add_khafile_def('rp_shadowmap_size={0}'.format(rpdat.rp_shadowmap))
assets.add_khafile_def('rp_background={0}'.format(rpdat.rp_background))
if rpdat.rp_background == 'World':
2017-12-20 10:19:44 +01:00
assets.add_shader_pass('world_pass')
2017-11-22 21:17:36 +01:00
if '_EnvClouds' in wrd.world_defs:
assets.add(assets_path + 'noise256.png')
assets.add_embedded_data('noise256.png')
if rpdat.rp_render_to_texture:
assets.add_khafile_def('rp_render_to_texture')
if rpdat.rp_compositornodes:
assets.add_khafile_def('rp_compositornodes')
compo_depth = False
if wrd.arm_tonemap != 'Off':
wrd.compo_defs = '_CTone' + wrd.arm_tonemap
2017-12-15 12:52:58 +01:00
if rpdat.rp_antialiasing == 'FXAA':
2017-11-22 21:17:36 +01:00
wrd.compo_defs += '_CFXAA'
if wrd.arm_letterbox:
wrd.compo_defs += '_CLetterbox'
if wrd.arm_grain:
wrd.compo_defs += '_CGrain'
if bpy.data.scenes[0].cycles.film_exposure != 1.0:
wrd.compo_defs += '_CExposure'
if wrd.arm_fog:
wrd.compo_defs += '_CFog'
compo_depth = True
if len(bpy.data.cameras) > 0 and bpy.data.cameras[0].dof_distance > 0.0:
wrd.compo_defs += '_CDOF'
compo_depth = True
if compo_depth:
wrd.compo_defs += '_CDepth'
2017-12-20 22:56:22 +01:00
assets.add_khafile_def('rp_compositordepth')
2017-11-22 21:17:36 +01:00
if wrd.arm_lens_texture != '':
wrd.compo_defs += '_CLensTex'
assets.add_embedded_data('lenstexture.jpg')
if wrd.arm_fisheye:
wrd.compo_defs += '_CFishEye'
if wrd.arm_vignette:
wrd.compo_defs += '_CVignette'
if wrd.arm_lensflare:
wrd.compo_defs += '_CGlare'
2017-12-20 22:56:22 +01:00
if wrd.arm_lut_texture != '':
2017-12-07 17:43:59 +01:00
wrd.compo_defs += '_CLUT'
2017-12-07 18:04:17 +01:00
assets.add_embedded_data('luttexture.jpg')
2017-12-13 14:21:42 +01:00
assets.add_shader_pass('compositor_pass')
2016-09-23 00:34:42 +02:00
else:
2017-12-13 14:21:42 +01:00
assets.add_shader_pass('copy_pass')
2017-11-22 21:17:36 +01:00
assets.add_khafile_def('rp_antialiasing={0}'.format(rpdat.rp_antialiasing))
if rpdat.rp_antialiasing == 'SMAA' or rpdat.rp_antialiasing == 'TAA':
2017-12-13 14:21:42 +01:00
assets.add_shader_pass('smaa_edge_detect')
assets.add_shader_pass('smaa_blend_weight')
assets.add_shader_pass('smaa_neighborhood_blend')
2017-11-22 21:17:36 +01:00
assets.add(assets_path + 'smaa_area.png')
assets.add(assets_path + 'smaa_search.png')
assets.add_embedded_data('smaa_area.png')
assets.add_embedded_data('smaa_search.png')
wrd.world_defs += '_SMAA'
if rpdat.rp_antialiasing == 'TAA':
2017-12-13 14:21:42 +01:00
assets.add_shader_pass('taa_pass')
assets.add_shader_pass('copy_pass')
2017-11-22 21:17:36 +01:00
if rpdat.rp_antialiasing == 'TAA' or rpdat.rp_motionblur == 'Object':
2016-10-12 18:26:56 +02:00
assets.add_khafile_def('arm_veloc')
2017-08-21 15:36:21 +02:00
wrd.world_defs += '_Veloc'
2017-11-22 21:17:36 +01:00
if rpdat.rp_antialiasing == 'TAA':
assets.add_khafile_def('arm_taa')
2016-09-23 00:34:42 +02:00
2017-11-22 21:17:36 +01:00
assets.add_khafile_def('rp_supersampling={0}'.format(rpdat.rp_supersampling))
if rpdat.rp_supersampling == '4':
2017-12-13 14:21:42 +01:00
assets.add_shader_pass('supersample_resolve')
2017-08-13 22:50:08 +02:00
2017-11-22 21:17:36 +01:00
if rpdat.rp_overlays:
assets.add_khafile_def('rp_overlays')
2017-05-23 15:01:56 +02:00
2017-11-22 21:17:36 +01:00
if rpdat.rp_translucency:
assets.add_khafile_def('rp_translucency')
2017-12-13 14:21:42 +01:00
assets.add_shader_pass('translucent_resolve')
2016-09-23 00:34:42 +02:00
2017-11-22 21:17:36 +01:00
if rpdat.rp_stereo:
assets.add_khafile_def('rp_stereo')
2016-10-12 18:26:56 +02:00
assets.add_khafile_def('arm_vr')
2017-08-21 15:36:21 +02:00
wrd.world_defs += '_VR'
2017-11-22 21:17:36 +01:00
assets.add(assets_path + 'vr.png')
2017-04-26 14:21:22 +02:00
assets.add_embedded_data('vr.png')
2016-09-23 00:34:42 +02:00
2017-12-05 23:06:24 +01:00
rp_gi = rpdat.rp_gi
has_voxels = state.in_viewport == False or bpy.app.version >= (2, 80, 1)
if not has_voxels:
rp_gi = 'Off'
assets.add_khafile_def('rp_gi={0}'.format(rp_gi))
2017-11-22 21:17:36 +01:00
if rpdat.rp_gi != 'Off':
2017-12-05 23:06:24 +01:00
if has_voxels:
assets.add_khafile_def('rp_gi={0}'.format(rpdat.rp_gi))
assets.add_khafile_def('rp_voxelgi_resolution={0}'.format(rpdat.rp_voxelgi_resolution))
assets.add_khafile_def('rp_voxelgi_resolution_z={0}'.format(rpdat.rp_voxelgi_resolution_z))
if rpdat.rp_voxelgi_hdr:
assets.add_khafile_def('rp_voxelgi_hdr')
if rpdat.arm_voxelgi_shadows:
assets.add_khafile_def('rp_voxelgi_shadows')
if rpdat.arm_voxelgi_refraction:
assets.add_khafile_def('rp_voxelgi_refraction')
else:
log.warn('Disabling Voxel GI - Blender 2.8 is required for voxels in viewport')
2017-11-22 21:17:36 +01:00
if rpdat.arm_rp_resolution != 'Display':
assets.add_khafile_def('rp_resolution={0}'.format(rpdat.arm_rp_resolution))
assets.add_khafile_def('rp_ssgi={0}'.format(rpdat.rp_ssgi))
if rpdat.rp_ssgi != 'Off':
wrd.world_defs += '_SSAO'
if rpdat.rp_ssgi == 'SSAO':
2017-12-13 14:21:42 +01:00
assets.add_shader_pass('ssao_pass')
assets.add_shader_pass('blur_edge_pass')
2017-11-22 21:17:36 +01:00
assets.add(assets_path + 'noise8.png')
assets.add_embedded_data('noise8.png')
else:
2017-12-13 14:21:42 +01:00
assets.add_shader_pass('ssgi_pass')
assets.add_shader_pass('ssgi_blur_pass')
2017-11-22 21:17:36 +01:00
if rpdat.rp_renderer == 'Deferred':
2017-12-13 14:21:42 +01:00
assets.add_shader_pass('deferred_indirect')
assets.add_shader_pass('deferred_light')
assets.add_shader_pass('deferred_light_quad')
2017-11-22 21:17:36 +01:00
if rpdat.rp_rendercapture:
assets.add_khafile_def('rp_rendercapture')
assets.add_khafile_def('rp_rendercapture_format={0}'.format(wrd.rp_rendercapture_format))
2017-12-13 14:21:42 +01:00
assets.add_shader_pass('copy_pass')
2016-09-23 00:34:42 +02:00
2017-11-22 21:17:36 +01:00
if rpdat.rp_volumetriclight:
assets.add_khafile_def('rp_volumetriclight')
2017-12-13 14:21:42 +01:00
assets.add_shader_pass('volumetric_light_quad')
assets.add_shader_pass('volumetric_light')
assets.add_shader_pass('blur_edge_pass')
2016-10-09 16:06:18 +02:00
2017-11-22 21:17:36 +01:00
if rpdat.rp_decals:
assets.add_khafile_def('rp_decals')
2016-10-09 16:06:18 +02:00
2017-11-22 21:17:36 +01:00
if rpdat.rp_ocean:
assets.add_khafile_def('rp_ocean')
2017-12-17 13:36:56 +01:00
assets.add_shader_pass('water_pass')
2016-10-09 16:06:18 +02:00
2017-11-22 21:17:36 +01:00
if rpdat.rp_blending_state != 'Off':
assets.add_khafile_def('rp_blending')
2016-09-23 00:34:42 +02:00
2017-11-22 21:17:36 +01:00
if rpdat.rp_bloom:
assets.add_khafile_def('rp_bloom')
2017-12-13 14:21:42 +01:00
assets.add_shader_pass('bloom_pass')
assets.add_shader_pass('blur_gaus_pass')
2016-10-09 16:06:18 +02:00
2017-11-22 21:17:36 +01:00
if rpdat.rp_sss:
assets.add_khafile_def('rp_sss')
wrd.world_defs += '_SSS'
2017-12-13 14:21:42 +01:00
assets.add_shader_pass('sss_pass')
2017-11-22 21:17:36 +01:00
if rpdat.rp_ssr:
assets.add_khafile_def('rp_ssr')
2017-12-13 14:21:42 +01:00
assets.add_shader_pass('ssr_pass')
assets.add_shader_pass('blur_adaptive_pass')
2017-11-22 21:17:36 +01:00
if rpdat.arm_ssr_half_res:
assets.add_khafile_def('rp_ssr_half')
if rpdat.rp_motionblur != 'Off':
assets.add_khafile_def('rp_motionblur={0}'.format(rpdat.rp_motionblur))
2017-12-13 14:21:42 +01:00
assets.add_shader_pass('copy_pass')
2017-11-22 21:17:36 +01:00
if rpdat.rp_motionblur == 'Camera':
2017-12-13 14:21:42 +01:00
assets.add_shader_pass('motion_blur_pass')
2017-11-22 21:17:36 +01:00
else:
2017-12-13 14:21:42 +01:00
assets.add_shader_pass('motion_blur_veloc_pass')
2016-11-07 16:11:35 +01:00
2017-11-22 21:17:36 +01:00
if rpdat.rp_compositornodes and rpdat.rp_autoexposure:
assets.add_khafile_def('rp_autoexposure')
2016-10-09 16:06:18 +02:00
2017-11-22 21:17:36 +01:00
if rpdat.rp_dynres:
assets.add_khafile_def('rp_dynres')
if rpdat.arm_soft_shadows == 'On':
2017-12-05 22:00:27 +01:00
if rpdat.rp_shadowmap_cascades == '1':
2017-12-13 14:21:42 +01:00
assets.add_shader_pass('dilate_pass')
assets.add_shader_pass('visibility_pass')
assets.add_shader_pass('blur_shadow_pass')
2017-12-05 22:00:27 +01:00
assets.add_khafile_def('rp_soft_shadows')
wrd.world_defs += '_SoftShadows'
if rpdat.arm_soft_shadows_penumbra != 1:
wrd.world_defs += '_PenumbraScale'
else:
2017-12-05 23:06:24 +01:00
log.warn('Disabling soft shadows - "Armory Render Path - Cascades" requires to be set to 1 for now')