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 rpdat.arm_two_sided_area_light: wrd.world_defs += '_TwoSidedAreaLight' # Store contexts if rpdat.rp_hdr == False: wrd.world_defs += '_LDR' # Alternative models if rpdat.arm_diffuse_model == 'OrenNayar': wrd.world_defs += '_OrenNayar' # TODO: Light texture test.. if wrd.arm_light_texture != '': wrd.world_defs += '_LightColTex' if wrd.arm_light_ies_texture != '': wrd.world_defs += '_LightIES' assets.add_embedded_data('iestexture.png') if wrd.arm_light_clouds_texture != '': wrd.world_defs += '_LightClouds' assets.add_embedded_data('cloudstexture.png') if rpdat.rp_renderer == 'Deferred': assets.add_khafile_def('arm_deferred') wrd.world_defs += '_Deferred' # GI voxelgi = False voxelao = False has_voxels = arm.utils.voxel_support() if has_voxels: if rpdat.rp_gi == 'Voxel GI': voxelgi = True elif rpdat.rp_gi == 'Voxel AO': voxelao = True # Shadows if rpdat.rp_shadowmap == 'Off': wrd.world_defs += '_NoShadows' assets.add_khafile_def('arm_no_shadows') else: if rpdat.rp_shadowmap_cascades != '1': if voxelgi: log.warn( 'Disabling shadow cascades - Voxel GI does not support cascades yet' ) else: wrd.world_defs += '_CSM' assets.add_khafile_def('arm_csm') # 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') if rpdat.rp_ssgi == 'RTGI' or rpdat.rp_ssgi == 'RTAO': if rpdat.rp_ssgi == 'RTGI': wrd.world_defs += '_RTGI' if rpdat.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' + rpdat.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' if voxelgi: wrd.world_defs += '_VoxelGI' assets.add_shader_external( arm.utils.get_sdk_path() + '/armory/Shaders/voxel_light/voxel_light.comp.glsl') if rpdat.arm_voxelgi_bounces != "1": assets.add_khafile_def('rp_gi_bounces={0}'.format( rpdat.arm_voxelgi_bounces)) assets.add_shader_external( arm.utils.get_sdk_path() + '/armory/Shaders/voxel_bounce/voxel_bounce.comp.glsl') 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.rp_voxelgi_relight: assets.add_khafile_def('rp_voxelgi_relight') elif voxelao: wrd.world_defs += '_VoxelAO' if arm.utils.get_gapi().startswith( 'direct3d'): # Flip Y axis in drawQuad command wrd.world_defs += '_InvY' if arm.utils.get_legacy_shaders() and not state.is_viewport: wrd.world_defs += '_Legacy' # Area lights lights = bpy.data.lights if bpy.app.version >= (2, 80, 1) else bpy.data.lamps for light in lights: if light.type == 'AREA': wrd.world_defs += '_LTC' assets.add_khafile_def('arm_ltc') break if '_Rad' in wrd.world_defs or '_VoxelGI' in wrd.world_defs: wrd.world_defs += '_Brdf' if '_Brdf' in wrd.world_defs or '_VoxelAO' in wrd.world_defs: wrd.world_defs += '_IndPos'
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 rpdat.arm_two_sided_area_light: wrd.world_defs += '_TwoSidedAreaLight' # Store contexts if rpdat.rp_hdr == False: wrd.world_defs += '_LDR' if wrd.arm_light_ies_texture != '': wrd.world_defs += '_LightIES' assets.add_embedded_data('iestexture.png') if wrd.arm_light_clouds_texture != '': wrd.world_defs += '_LightClouds' assets.add_embedded_data('cloudstexture.png') if rpdat.rp_renderer == 'Deferred': assets.add_khafile_def('arm_deferred') wrd.world_defs += '_Deferred' # GI voxelgi = False voxelao = False has_voxels = arm.utils.voxel_support() if has_voxels and rpdat.arm_material_model == 'Full': if rpdat.rp_gi == 'Voxel GI': voxelgi = True elif rpdat.rp_gi == 'Voxel AO': voxelao = True # Shadows if rpdat.rp_shadows: wrd.world_defs += '_ShadowMap' if rpdat.rp_shadowmap_cascades != '1': if voxelgi: log.warn('Disabling shadow cascades - Voxel GI does not support cascades yet') else: wrd.world_defs += '_CSM' assets.add_khafile_def('arm_csm') # SS if rpdat.rp_ssgi == 'RTGI' or rpdat.rp_ssgi == 'RTAO': if rpdat.rp_ssgi == 'RTGI': wrd.world_defs += '_RTGI' if rpdat.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' + rpdat.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' if voxelgi: wrd.world_defs += '_VoxelGI' assets.add_shader_external(arm.utils.get_sdk_path() + '/armory/Shaders/voxel_light/voxel_light.comp.glsl') if rpdat.arm_voxelgi_bounces != "1": assets.add_khafile_def('rp_gi_bounces={0}'.format(rpdat.arm_voxelgi_bounces)) assets.add_shader_external(arm.utils.get_sdk_path() + '/armory/Shaders/voxel_bounce/voxel_bounce.comp.glsl') if rpdat.arm_voxelgi_shadows: wrd.world_defs += '_VoxelGIShadow' if rpdat.rp_voxelgi_relight: assets.add_khafile_def('rp_voxelgi_relight') elif voxelao: wrd.world_defs += '_VoxelAOvar' # Write a shader variant if arm.utils.get_legacy_shaders() and not state.is_viewport: wrd.world_defs += '_Legacy' # Light defines point_lights = 0 for bo in bpy.data.objects: # TODO: temp if bo.type == 'LIGHT': light = bo.data if light.type == 'AREA' and '_LTC' not in wrd.world_defs: wrd.world_defs += '_LTC' assets.add_khafile_def('arm_ltc') if light.type == 'SUN' and '_Sun' not in wrd.world_defs: wrd.world_defs += '_Sun' if light.type == 'POINT' or light.type == 'SPOT': point_lights += 1 if light.type == 'SPOT' and '_Spot' not in wrd.world_defs: wrd.world_defs += '_Spot' assets.add_khafile_def('arm_spot') if point_lights == 1: wrd.world_defs += '_SinglePoint' elif point_lights > 1: wrd.world_defs += '_Clusters' assets.add_khafile_def('arm_clusters') if '_Rad' in wrd.world_defs or '_VoxelGI' in wrd.world_defs: wrd.world_defs += '_Brdf'