def create_world_shaders(world: bpy.types.World): """Creates fragment and vertex shaders for the given world.""" global shader_datas world_name = arm.utils.safestr(world.name) pass_name = 'World_' + world_name shader_props = { 'name': world_name, 'depth_write': False, 'compare_mode': 'less', 'cull_mode': 'clockwise', 'color_attachments': ['_HDR'], 'vertex_elements': [{'name': 'pos', 'data': 'float3'}, {'name': 'nor', 'data': 'float3'}] } shader_data = {'name': world_name + '_data', 'contexts': [shader_props]} # ShaderContext expects a material, but using a world also works shader_context = ShaderContext(world, shader_data, shader_props) vert = shader_context.make_vert(custom_name="World_" + world_name) frag = shader_context.make_frag(custom_name="World_" + world_name) # Update name, make_vert() and make_frag() above need another name # to work shader_context.data['name'] = pass_name vert.add_out('vec3 normal') vert.add_uniform('mat4 SMVP', link="_skydomeMatrix") frag.add_include('compiled.inc') frag.add_in('vec3 normal') frag.add_out('vec4 fragColor') frag.write_attrib('vec3 n = normalize(normal);') vert.write('''normal = nor; vec4 position = SMVP * vec4(pos, 1.0); gl_Position = vec4(position);''') build_node_tree(world, frag, vert, shader_context) # TODO: Rework shader export so that it doesn't depend on materials # to prevent workaround code like this rel_path = os.path.join(arm.utils.build_dir(), 'compiled', 'Shaders') full_path = os.path.join(arm.utils.get_fp(), rel_path) if not os.path.exists(full_path): os.makedirs(full_path) # Output: World_[world_name].[frag/vert].glsl make_shader.write_shader(rel_path, shader_context.vert, 'vert', world_name, 'World') make_shader.write_shader(rel_path, shader_context.frag, 'frag', world_name, 'World') # Write shader data file shader_data_file = pass_name + '_data.arm' arm.utils.write_arm(os.path.join(full_path, shader_data_file), {'contexts': [shader_context.data]}) shader_data_path = os.path.join(arm.utils.get_fp_build(), 'compiled', 'Shaders', shader_data_file) assets.add_shader_data(shader_data_path) assets.add_shader_pass(pass_name) assets.shader_passes_assets[pass_name] = shader_context.data shader_datas.append({'contexts': [shader_context.data], 'name': pass_name})
def build(): rpdat = arm.utils.get_rp() if rpdat.rp_driver != 'Armory' and arm.api.drivers[ rpdat.rp_driver]['make_rpath'] != None: arm.api.drivers[rpdat.rp_driver]['make_rpath']() return assets_path = arm.utils.get_sdk_path() + '/armory/Assets/' wrd = bpy.data.worlds['Arm'] add_world_defs() mobile_mat = rpdat.arm_material_model == 'Mobile' or rpdat.arm_material_model == 'Solid' if not mobile_mat: # Always include assets.add(assets_path + 'brdf.png') assets.add_embedded_data('brdf.png') 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': assets.add_shader_pass('world_pass') if '_EnvClouds' in wrd.world_defs: assets.add(assets_path + 'noise256.png') assets.add_embedded_data('noise256.png') if rpdat.rp_renderer == 'Deferred' and not rpdat.rp_compositornodes: assets.add_shader_pass('copy_pass') if rpdat.rp_renderer == 'Forward' and not rpdat.rp_compositornodes and rpdat.rp_render_to_texture: assets.add_shader_pass('copy_pass') 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 rpdat.arm_tonemap != 'Off': wrd.compo_defs = '_CTone' + rpdat.arm_tonemap if rpdat.rp_antialiasing == 'FXAA': wrd.compo_defs += '_CFXAA' if rpdat.arm_letterbox: wrd.compo_defs += '_CLetterbox' if rpdat.arm_grain: wrd.compo_defs += '_CGrain' if rpdat.arm_sharpen: wrd.compo_defs += '_CSharpen' if bpy.data.scenes[0].cycles.film_exposure != 1.0: wrd.compo_defs += '_CExposure' if rpdat.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' assets.add_khafile_def('rp_compositordepth') if rpdat.arm_lens_texture != '': wrd.compo_defs += '_CLensTex' assets.add_embedded_data('lenstexture.jpg') if rpdat.arm_fisheye: wrd.compo_defs += '_CFishEye' if rpdat.arm_vignette: wrd.compo_defs += '_CVignette' if rpdat.arm_lensflare: wrd.compo_defs += '_CGlare' if rpdat.arm_lut_texture != '': wrd.compo_defs += '_CLUT' assets.add_embedded_data('luttexture.jpg') if '_CDOF' in wrd.compo_defs or '_CFXAA' in wrd.compo_defs or '_CSharpen' in wrd.compo_defs: wrd.compo_defs += '_CTexStep' if '_CDOF' in wrd.compo_defs or '_CFog' in wrd.compo_defs or '_CGlare' in wrd.compo_defs: wrd.compo_defs += '_CCameraProj' assets.add_shader_pass('compositor_pass') assets.add_khafile_def('rp_antialiasing={0}'.format( rpdat.rp_antialiasing)) if rpdat.rp_antialiasing == 'SMAA' or rpdat.rp_antialiasing == 'TAA': assets.add_shader_pass('smaa_edge_detect') assets.add_shader_pass('smaa_blend_weight') assets.add_shader_pass('smaa_neighborhood_blend') 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': assets.add_shader_pass('taa_pass') assets.add_shader_pass('copy_pass') if rpdat.rp_antialiasing == 'TAA' or rpdat.rp_motionblur == 'Object': assets.add_khafile_def('arm_veloc') wrd.world_defs += '_Veloc' if rpdat.rp_antialiasing == 'TAA': assets.add_khafile_def('arm_taa') assets.add_khafile_def('rp_supersampling={0}'.format( rpdat.rp_supersampling)) if rpdat.rp_supersampling == '4': assets.add_shader_pass('supersample_resolve') if rpdat.rp_overlays: assets.add_khafile_def('rp_overlays') if rpdat.rp_translucency: assets.add_khafile_def('rp_translucency') assets.add_shader_pass('translucent_resolve') if rpdat.rp_stereo: assets.add_khafile_def('rp_stereo') assets.add_khafile_def('arm_vr') wrd.world_defs += '_VR' assets.add(assets_path + 'vr.png') assets.add_embedded_data('vr.png') rp_gi = rpdat.rp_gi has_voxels = arm.utils.voxel_support() if not has_voxels: rp_gi = 'Off' assets.add_khafile_def('rp_gi={0}'.format(rp_gi)) if rpdat.rp_gi != 'Off': 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 - unsupported target - use Krom instead') if rpdat.arm_rp_resolution == 'Custom': assets.add_khafile_def('rp_resolution_filter={0}'.format( rpdat.arm_rp_resolution_filter)) 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': assets.add_shader_pass('ssao_pass') assets.add_shader_pass('blur_edge_pass') assets.add(assets_path + 'noise8.png') assets.add_embedded_data('noise8.png') else: assets.add_shader_pass('ssgi_pass') assets.add_shader_pass('ssgi_blur_pass') if rpdat.rp_renderer == 'Deferred': assets.add_shader_pass('deferred_indirect') assets.add_shader_pass('deferred_light') assets.add_shader_pass('deferred_light_quad') if rpdat.rp_volumetriclight: assets.add_khafile_def('rp_volumetriclight') assets.add_shader_pass('volumetric_light_quad') assets.add_shader_pass('volumetric_light') assets.add_shader_pass('blur_bilat_pass') assets.add_shader_pass('blur_bilat_blend_pass') assets.add(assets_path + 'blue_noise64.png') assets.add_embedded_data('blue_noise64.png') if rpdat.rp_decals: assets.add_khafile_def('rp_decals') if rpdat.rp_ocean: assets.add_khafile_def('rp_ocean') assets.add_shader_pass('water_pass') if rpdat.rp_blending: assets.add_khafile_def('rp_blending') if rpdat.rp_bloom: assets.add_khafile_def('rp_bloom') assets.add_shader_pass('bloom_pass') assets.add_shader_pass('blur_gaus_pass') if rpdat.rp_sss: assets.add_khafile_def('rp_sss') wrd.world_defs += '_SSS' assets.add_shader_pass('sss_pass') if rpdat.rp_ssr: assets.add_khafile_def('rp_ssr') assets.add_shader_pass('ssr_pass') assets.add_shader_pass('blur_adaptive_pass') if rpdat.arm_ssr_half_res: assets.add_khafile_def('rp_ssr_half') if rpdat.rp_ssr_z_only: wrd.world_defs += '_SSRZOnly' if rpdat.rp_motionblur != 'Off': assets.add_khafile_def('rp_motionblur={0}'.format(rpdat.rp_motionblur)) assets.add_shader_pass('copy_pass') if rpdat.rp_motionblur == 'Camera': assets.add_shader_pass('motion_blur_pass') else: assets.add_shader_pass('motion_blur_veloc_pass') if rpdat.rp_compositornodes and rpdat.rp_autoexposure: assets.add_khafile_def('rp_autoexposure') if rpdat.rp_dynres: assets.add_khafile_def('rp_dynres') if rpdat.arm_soft_shadows == 'On': if rpdat.rp_shadowmap_cascades == '1': assets.add_shader_pass('dilate_pass') assets.add_shader_pass('visibility_pass') assets.add_shader_pass('blur_shadow_pass') assets.add_khafile_def('rp_soft_shadows') wrd.world_defs += '_SoftShadows' if rpdat.arm_soft_shadows_penumbra != 1: wrd.world_defs += '_PenumbraScale' else: log.warn( 'Disabling soft shadows - "Armory Render Path - Cascades" requires to be set to 1 for now' ) gbuffer2_direct = '_SSS' in wrd.world_defs or '_Hair' in wrd.world_defs or rpdat.arm_voxelgi_refraction gbuffer2 = '_Veloc' in wrd.world_defs or gbuffer2_direct if gbuffer2: assets.add_khafile_def('rp_gbuffer2') wrd.world_defs += '_gbuffer2' if gbuffer2_direct: assets.add_khafile_def('rp_gbuffer2_direct') wrd.world_defs += '_gbuffer2direct' if callback != None: callback()
def make_rpath(): assets_path = arm.utils.get_sdk_path() + 'armory/Assets/' wrd = bpy.data.worlds['Arm'] rpdat = arm.utils.get_rp() if rpdat.rp_hdr: assets.add_khafile_def('rp_hdr') else: wrd.world_defs += '_LDR' if rpdat.rp_shadows: wrd.world_defs += '_ShadowMap' assets.add_khafile_def('rp_shadowmap') assets.add_khafile_def('rp_shadowmap_cascade={0}'.format(rpdat.rp_shadowmap_cascade)) assets.add_khafile_def('rp_shadowmap_cube={0}'.format(rpdat.rp_shadowmap_cube)) assets.add_khafile_def('rp_background={0}'.format(rpdat.rp_background)) if rpdat.rp_background == 'World': assets.add_shader_pass('world_pass') 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 rpdat.arm_tonemap != 'Off': wrd.compo_defs = '_CTone' + rpdat.arm_tonemap if rpdat.rp_antialiasing == 'FXAA': wrd.compo_defs += '_CFXAA' if rpdat.arm_letterbox: wrd.compo_defs += '_CLetterbox' if rpdat.arm_grain: wrd.compo_defs += '_CGrain' if bpy.data.scenes[0].cycles.film_exposure != 1.0: wrd.compo_defs += '_CExposure' if rpdat.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' assets.add_khafile_def('rp_compositordepth') if rpdat.arm_lens_texture != '': wrd.compo_defs += '_CLensTex' assets.add_embedded_data('lenstexture.jpg') if rpdat.arm_fisheye: wrd.compo_defs += '_CFishEye' if rpdat.arm_vignette: wrd.compo_defs += '_CVignette' if rpdat.arm_lensflare: wrd.compo_defs += '_CGlare' if rpdat.arm_lut_texture != '': wrd.compo_defs += '_CLUT' assets.add_embedded_data('luttexture.jpg') if '_CDOF' in wrd.compo_defs or '_CFXAA' in wrd.compo_defs or '_CSharpen' in wrd.compo_defs: wrd.compo_defs += '_CTexStep' if '_CDOF' in wrd.compo_defs or '_CFog' in wrd.compo_defs or '_CGlare' in wrd.compo_defs: wrd.compo_defs += '_CCameraProj' assets.add_shader_pass('compositor_pass') else: assets.add_shader_pass('copy_pass') assets.add_khafile_def('rp_antialiasing={0}'.format(rpdat.rp_antialiasing)) if rpdat.rp_antialiasing == 'SMAA' or rpdat.rp_antialiasing == 'TAA': assets.add_shader_pass('smaa_edge_detect') assets.add_shader_pass('smaa_blend_weight') assets.add_shader_pass('smaa_neighborhood_blend') 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': assets.add_shader_pass('taa_pass') assets.add_shader_pass('copy_pass') if rpdat.rp_antialiasing == 'TAA' or rpdat.rp_motionblur == 'Object': assets.add_khafile_def('arm_veloc') wrd.world_defs += '_Veloc' if rpdat.rp_antialiasing == 'TAA': assets.add_khafile_def('arm_taa') assets.add_khafile_def('rp_supersampling={0}'.format(rpdat.rp_supersampling)) if rpdat.rp_supersampling == '4': assets.add_shader_pass('supersample_resolve') if rpdat.rp_volumetriclight: wrd.world_defs += '_Sun' assets.add_khafile_def('rp_volumetriclight') assets.add_shader_pass('volumetric_light') assets.add_shader_pass('blur_bilat_pass') assets.add_shader_pass('blur_bilat_blend_pass') assets.add(assets_path + 'blue_noise64.png') assets.add_embedded_data('blue_noise64.png') if rpdat.rp_bloom: assets.add_khafile_def('rp_bloom') assets.add_shader_pass('bloom_pass') assets.add_shader_pass('blur_gaus_pass') if rpdat.arm_rp_resolution == 'Custom': assets.add_khafile_def('rp_resolution_filter={0}'.format(rpdat.arm_rp_resolution_filter))
def build(): rpdat = arm.utils.get_rp() if rpdat.rp_driver != 'Armory' and arm.api.drivers[ rpdat.rp_driver]['make_rpath'] != None: arm.api.drivers[rpdat.rp_driver]['make_rpath']() return assets_path = arm.utils.get_sdk_path() + '/armory/Assets/' wrd = bpy.data.worlds['Arm'] add_world_defs() mobile_mat = rpdat.arm_material_model == 'Mobile' or rpdat.arm_material_model == 'Solid' if not mobile_mat: # Always include assets.add(assets_path + 'brdf.png') assets.add_embedded_data('brdf.png') 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_shadows: assets.add_khafile_def('rp_shadowmap') assets.add_khafile_def('rp_shadowmap_cascade={0}'.format( arm.utils.get_cascade_size(rpdat))) assets.add_khafile_def('rp_shadowmap_cube={0}'.format( rpdat.rp_shadowmap_cube)) assets.add_khafile_def('rp_background={0}'.format(rpdat.rp_background)) if rpdat.rp_background == 'World': assets.add_shader_pass('world_pass') if '_EnvClouds' in wrd.world_defs: assets.add(assets_path + 'clouds_base.raw') assets.add_embedded_data('clouds_base.raw') assets.add(assets_path + 'clouds_detail.raw') assets.add_embedded_data('clouds_detail.raw') assets.add(assets_path + 'clouds_map.png') assets.add_embedded_data('clouds_map.png') if rpdat.rp_renderer == 'Deferred' and not rpdat.rp_compositornodes: assets.add_shader_pass('copy_pass') if rpdat.rp_render_to_texture: assets.add_khafile_def('rp_render_to_texture') if rpdat.rp_renderer == 'Forward' and not rpdat.rp_compositornodes: assets.add_shader_pass('copy_pass') if rpdat.rp_compositornodes: assets.add_khafile_def('rp_compositornodes') compo_depth = False if rpdat.arm_tonemap != 'Off': wrd.compo_defs = '_CTone' + rpdat.arm_tonemap if rpdat.rp_antialiasing == 'FXAA': wrd.compo_defs += '_CFXAA' if rpdat.arm_letterbox: wrd.compo_defs += '_CLetterbox' if rpdat.arm_grain: wrd.compo_defs += '_CGrain' if rpdat.arm_sharpen: wrd.compo_defs += '_CSharpen' if bpy.data.scenes[0].view_settings.exposure != 0.0: wrd.compo_defs += '_CExposure' if rpdat.arm_fog: wrd.compo_defs += '_CFog' compo_depth = True focus_distance = 0.0 if len(bpy.data.cameras) > 0 and bpy.data.cameras[0].dof.use_dof: focus_distance = bpy.data.cameras[0].dof.focus_distance if focus_distance > 0.0: wrd.compo_defs += '_CDOF' compo_depth = True if rpdat.arm_lens_texture != '': wrd.compo_defs += '_CLensTex' assets.add_embedded_data('lenstexture.jpg') if rpdat.arm_lens_texture_masking: wrd.compo_defs += '_CLensTexMasking' if rpdat.arm_fisheye: wrd.compo_defs += '_CFishEye' if rpdat.arm_vignette: wrd.compo_defs += '_CVignette' if rpdat.arm_lensflare: wrd.compo_defs += '_CGlare' compo_depth = True if rpdat.arm_lut_texture != '': wrd.compo_defs += '_CLUT' assets.add_embedded_data('luttexture.jpg') if '_CDOF' in wrd.compo_defs or '_CFXAA' in wrd.compo_defs or '_CSharpen' in wrd.compo_defs: wrd.compo_defs += '_CTexStep' if '_CDOF' in wrd.compo_defs or '_CFog' in wrd.compo_defs or '_CGlare' in wrd.compo_defs: wrd.compo_defs += '_CCameraProj' if compo_depth: wrd.compo_defs += '_CDepth' assets.add_khafile_def('rp_compositordepth') if rpdat.rp_pp: wrd.compo_defs += '_CPostprocess' assets.add_shader_pass('compositor_pass') assets.add_khafile_def('rp_antialiasing={0}'.format( rpdat.rp_antialiasing)) if rpdat.rp_antialiasing == 'SMAA' or rpdat.rp_antialiasing == 'TAA': assets.add_shader_pass('smaa_edge_detect') assets.add_shader_pass('smaa_blend_weight') assets.add_shader_pass('smaa_neighborhood_blend') 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': assets.add_shader_pass('taa_pass') assets.add_shader_pass('copy_pass') if rpdat.rp_antialiasing == 'TAA' or rpdat.rp_motionblur == 'Object': assets.add_khafile_def('arm_veloc') wrd.world_defs += '_Veloc' if rpdat.rp_antialiasing == 'TAA': assets.add_khafile_def('arm_taa') assets.add_khafile_def('rp_supersampling={0}'.format( rpdat.rp_supersampling)) if rpdat.rp_supersampling == '4': assets.add_shader_pass('supersample_resolve') 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': assets.add_shader_pass('ssao_pass') assets.add_shader_pass('blur_edge_pass') else: assets.add_shader_pass('ssgi_pass') assets.add_shader_pass('blur_edge_pass') if rpdat.arm_ssgi_half_res: assets.add_khafile_def('rp_ssgi_half') if rpdat.rp_bloom: assets.add_khafile_def('rp_bloom') assets.add_shader_pass('bloom_pass') assets.add_shader_pass('blur_gaus_pass') if rpdat.rp_ssr: assets.add_khafile_def('rp_ssr') assets.add_shader_pass('ssr_pass') assets.add_shader_pass('blur_adaptive_pass') if rpdat.arm_ssr_half_res: assets.add_khafile_def('rp_ssr_half') if rpdat.rp_overlays: assets.add_khafile_def('rp_overlays') if rpdat.rp_translucency: assets.add_khafile_def('rp_translucency') assets.add_shader_pass('translucent_resolve') if rpdat.rp_stereo: assets.add_khafile_def('rp_stereo') assets.add_khafile_def('arm_vr') wrd.world_defs += '_VR' has_voxels = arm.utils.voxel_support() if rpdat.rp_voxelao and has_voxels and rpdat.arm_material_model == 'Full': assets.add_khafile_def('rp_voxelao') 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.arm_rp_resolution == 'Custom': assets.add_khafile_def('rp_resolution_filter={0}'.format( rpdat.arm_rp_resolution_filter)) if rpdat.rp_renderer == 'Deferred': if rpdat.arm_material_model == 'Full': assets.add_shader_pass('deferred_light') else: # mobile, solid assets.add_shader_pass('deferred_light_' + rpdat.arm_material_model.lower()) assets.add_khafile_def('rp_material_' + rpdat.arm_material_model.lower()) if len(bpy.data.lightprobes) > 0: wrd.world_defs += '_Probes' assets.add_khafile_def('rp_probes') assets.add_shader_pass('probe_planar') assets.add_shader_pass('probe_cubemap') assets.add_shader_pass('copy_pass') if rpdat.rp_volumetriclight: assets.add_khafile_def('rp_volumetriclight') assets.add_shader_pass('volumetric_light') assets.add_shader_pass('blur_bilat_pass') assets.add_shader_pass('blur_bilat_blend_pass') assets.add(assets_path + 'blue_noise64.png') assets.add_embedded_data('blue_noise64.png') if rpdat.rp_decals: assets.add_khafile_def('rp_decals') if rpdat.rp_water: assets.add_khafile_def('rp_water') assets.add_shader_pass('water_pass') assets.add_shader_pass('copy_pass') assets.add(assets_path + 'water_base.png') assets.add_embedded_data('water_base.png') assets.add(assets_path + 'water_detail.png') assets.add_embedded_data('water_detail.png') assets.add(assets_path + 'water_foam.png') assets.add_embedded_data('water_foam.png') if rpdat.rp_blending: assets.add_khafile_def('rp_blending') if rpdat.rp_sss: assets.add_khafile_def('rp_sss') wrd.world_defs += '_SSS' assets.add_shader_pass('sss_pass') if (rpdat.rp_ssr and rpdat.arm_ssr_half_res) or (rpdat.rp_ssgi != 'Off' and rpdat.arm_ssgi_half_res): assets.add_shader_pass('downsample_depth') if rpdat.rp_motionblur != 'Off': assets.add_khafile_def('rp_motionblur={0}'.format(rpdat.rp_motionblur)) assets.add_shader_pass('copy_pass') if rpdat.rp_motionblur == 'Camera': assets.add_shader_pass('motion_blur_pass') else: assets.add_shader_pass('motion_blur_veloc_pass') if rpdat.rp_compositornodes and rpdat.rp_autoexposure: assets.add_khafile_def('rp_autoexposure') assets.add_shader_pass('histogram_pass') if rpdat.rp_dynres: assets.add_khafile_def('rp_dynres') if rpdat.rp_pp: assets.add_khafile_def('rp_pp') if rpdat.rp_chromatic_aberration: assets.add_shader_pass('copy_pass') assets.add_khafile_def('rp_chromatic_aberration') assets.add_shader_pass('chromatic_aberration_pass') gbuffer2 = '_Veloc' in wrd.world_defs if gbuffer2: assets.add_khafile_def('rp_gbuffer2') wrd.world_defs += '_gbuffer2' if callback != None: callback()