Replace some wrd defs by individual word defs

This commit is contained in:
Moritz Brückner 2020-06-22 22:03:02 +02:00
parent 1152b99e10
commit 569d139e4e
4 changed files with 106 additions and 57 deletions

View file

@ -2796,20 +2796,21 @@ class ArmoryExporter:
bgcol = world.arm_envtex_color
# No compositor used
if '_LDR' in wrd.world_defs:
if '_LDR' in world.world_defs:
for i in range(0, 3):
bgcol[i] = pow(bgcol[i], 1.0 / 2.2)
out_world['background_color'] = arm.utils.color_to_int(bgcol)
if '_EnvSky' in wrd.world_defs:
if '_EnvSky' in world.world_defs:
# Sky data for probe
out_world['sun_direction'] = list(world.arm_envtex_sun_direction)
out_world['turbidity'] = world.arm_envtex_turbidity
out_world['ground_albedo'] = world.arm_envtex_ground_albedo
disable_hdr = world.arm_envtex_name.endswith('.jpg')
if '_EnvTex' in wrd.world_defs or '_EnvImg' in wrd.world_defs:
o['envmap'] = world.arm_envtex_name.rsplit('.', 1)[0]
print('_EnvTex' in world.world_defs)
if '_EnvTex' in world.world_defs or '_EnvImg' in world.world_defs:
out_world['envmap'] = world.arm_envtex_name.rsplit('.', 1)[0]
if disable_hdr:
out_world['envmap'] += '.jpg'
else:
@ -2822,10 +2823,11 @@ class ArmoryExporter:
arm_radiance = False
radtex = world.arm_envtex_name.rsplit('.', 1)[0]
irrsharmonics = world.arm_envtex_irr_name
# Radiance
if '_EnvTex' in wrd.world_defs:
if '_EnvTex' in world.world_defs:
arm_radiance = rpdat.arm_radiance
elif '_EnvSky' in wrd.world_defs:
elif '_EnvSky' in world.world_defs:
arm_radiance = rpdat.arm_radiance
radtex = 'hosek'
num_mips = world.arm_envtex_num_mips

View file

@ -18,10 +18,11 @@ def build():
worlds.append(scene.world)
build_node_tree(scene.world)
def build_node_tree(world):
wname = arm.utils.safestr(world.name)
wrd = bpy.data.worlds['Arm']
wrd.world_defs = ''
def build_node_tree(world: bpy.types.World, frag: Shader, vert: Shader):
"""Generates the shader code for the given world."""
world_name = arm.utils.safestr(world.name)
world.world_defs = ''
rpdat = arm.utils.get_rp()
if callback is not None:
@ -38,31 +39,31 @@ def build_node_tree(world):
if not is_parsed:
solid_mat = rpdat.arm_material_model == 'Solid'
if rpdat.arm_irradiance and not solid_mat:
wrd.world_defs += '_Irr'
world.world_defs += '_Irr'
c = world.color
world.arm_envtex_color = [c[0], c[1], c[2], 1.0]
world.arm_envtex_strength = 1.0
# Clear to color if no texture or sky is provided
if '_EnvSky' not in wrd.world_defs and '_EnvTex' not in wrd.world_defs:
if '_EnvImg' not in wrd.world_defs:
wrd.world_defs += '_EnvCol'
if '_EnvSky' not in world.world_defs and '_EnvTex' not in world.world_defs:
if '_EnvImg' not in world.world_defs:
world.world_defs += '_EnvCol'
# Irradiance json file name
world.arm_envtex_name = wname
world.arm_envtex_irr_name = wname
write_probes.write_color_irradiance(wname, world.arm_envtex_color)
world.arm_envtex_name = world_name
world.arm_envtex_irr_name = world_name
write_probes.write_color_irradiance(world_name, world.arm_envtex_color)
# film_transparent
if bpy.context.scene is not None and hasattr(bpy.context.scene.render, 'film_transparent') and bpy.context.scene.render.film_transparent:
wrd.world_defs += '_EnvTransp'
wrd.world_defs += '_EnvCol'
world.world_defs += '_EnvTransp'
world.world_defs += '_EnvCol'
# Clouds enabled
if rpdat.arm_clouds:
wrd.world_defs += '_EnvClouds'
world.world_defs += '_EnvClouds'
if '_EnvSky' in wrd.world_defs or '_EnvTex' in wrd.world_defs or '_EnvImg' in wrd.world_defs or '_EnvClouds' in wrd.world_defs:
wrd.world_defs += '_EnvStr'
if '_EnvSky' in world.world_defs or '_EnvTex' in world.world_defs or '_EnvImg' in world.world_defs or '_EnvClouds' in world.world_defs:
world.world_defs += '_EnvStr'
def parse_world_output(world, node):
if node.inputs[0].is_linked:
@ -165,10 +166,10 @@ def parse_color(world, node):
world.arm_envtex_num_mips = mip_count
# Append envtex define
wrd.world_defs += '_EnvTex'
world.world_defs += '_EnvTex'
# Append LDR define
if disable_hdr:
wrd.world_defs += '_EnvLDR'
world.world_defs += '_EnvLDR'
# Append radiance define
if rpdat.arm_irradiance and rpdat.arm_radiance and not mobile_mat:
wrd.world_defs += '_Rad'
@ -201,8 +202,8 @@ def parse_color(world, node):
elif node.type == 'TEX_SKY':
# Match to cycles
world.arm_envtex_strength *= 0.1
wrd.world_defs += '_EnvSky'
world.world_defs += '_EnvSky'
assets.add_khafile_def('arm_hosek')
world.arm_envtex_sun_direction = [node.sun_direction[0], node.sun_direction[1], node.sun_direction[2]]

View file

@ -269,6 +269,30 @@ def init_properties():
bpy.types.World.arm_wasm_list = CollectionProperty(type=bpy.types.PropertyGroup)
bpy.types.World.world_defs = StringProperty(name="World Shader Defs", default='')
bpy.types.World.compo_defs = StringProperty(name="Compositor Shader Defs", default='')
bpy.types.World.arm_use_fog = BoolProperty(name="Volumetric Fog", default=False, update=assets.invalidate_shader_cache)
bpy.types.World.arm_fog_color = FloatVectorProperty(name="Color", size=3, subtype='COLOR', default=[0.5, 0.6, 0.7], min=0, max=1, update=assets.invalidate_shader_cache)
bpy.types.World.arm_fog_amounta = FloatProperty(name="Amount A", default=0.25, update=assets.invalidate_shader_cache)
bpy.types.World.arm_fog_amountb = FloatProperty(name="Amount B", default=0.5, update=assets.invalidate_shader_cache)
bpy.types.World.arm_use_clouds = BoolProperty(name="Clouds", default=False, update=assets.invalidate_shader_cache)
bpy.types.World.arm_clouds_lower = FloatProperty(name="Lower", default=1.0, min=0.1, max=10.0, update=assets.invalidate_shader_cache)
bpy.types.World.arm_clouds_upper = FloatProperty(name="Upper", default=1.0, min=0.1, max=10.0, update=assets.invalidate_shader_cache)
bpy.types.World.arm_clouds_wind = FloatVectorProperty(name="Wind", default=[1.0, 0.0], size=2, update=assets.invalidate_shader_cache)
bpy.types.World.arm_clouds_secondary = FloatProperty(name="Secondary", default=1.0, min=0.1, max=10.0, update=assets.invalidate_shader_cache)
bpy.types.World.arm_clouds_precipitation = FloatProperty(name="Precipitation", default=1.0, min=0.1, max=10.0, update=assets.invalidate_shader_cache)
bpy.types.World.arm_clouds_steps = IntProperty(name="Steps", default=24, min=1, max=240, update=assets.invalidate_shader_cache)
bpy.types.World.arm_use_water = BoolProperty(name="Water", description="Water surface pass", default=False, update=props_renderpath.update_renderpath)
bpy.types.World.arm_water_color = FloatVectorProperty(name="Color", size=3, default=[1, 1, 1], subtype='COLOR', min=0, max=1, update=assets.invalidate_shader_cache)
bpy.types.World.arm_water_level = FloatProperty(name="Level", default=0.0, update=assets.invalidate_shader_cache)
bpy.types.World.arm_water_displace = FloatProperty(name="Displace", default=1.0, update=assets.invalidate_shader_cache)
bpy.types.World.arm_water_speed = FloatProperty(name="Speed", default=1.0, update=assets.invalidate_shader_cache)
bpy.types.World.arm_water_freq = FloatProperty(name="Freq", default=1.0, update=assets.invalidate_shader_cache)
bpy.types.World.arm_water_density = FloatProperty(name="Density", default=1.0, update=assets.invalidate_shader_cache)
bpy.types.World.arm_water_refract = FloatProperty(name="Refract", default=1.0, update=assets.invalidate_shader_cache)
bpy.types.World.arm_water_reflect = FloatProperty(name="Reflect", default=1.0, update=assets.invalidate_shader_cache)
bpy.types.Material.export_uvs = BoolProperty(name="Export UVs", default=False)
bpy.types.Material.export_vcols = BoolProperty(name="Export VCols", default=False)
bpy.types.Material.export_tangents = BoolProperty(name="Export Tangents", default=False)

View file

@ -1,16 +1,16 @@
import bpy
import webbrowser
import os
from bpy.types import Menu, Panel, UIList
from bpy.props import *
import arm.utils
import arm.make as make
import arm.make_state as state
import bpy
import arm.api
import arm.assets as assets
import arm.log as log
import arm.proxy
import arm.api
import arm.make as make
import arm.make_state as state
import arm.props as props
import arm.props_properties
import arm.proxy
import arm.utils
# Menu in object region
class ARM_PT_ObjectPropsPanel(bpy.types.Panel):
@ -145,6 +145,49 @@ class ARM_PT_DataPropsPanel(bpy.types.Panel):
layout.prop(obj.data, 'arm_autobake')
pass
class ARM_PT_WorldPropsPanel(bpy.types.Panel):
bl_label = "Armory World Properties"
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "world"
def draw(self, context):
layout = self.layout
layout.use_property_split = True
layout.use_property_decorate = False
world = context.world
if world is None:
return
layout.prop(world, 'arm_use_fog')
col = layout.column(align=True)
col.enabled = world.arm_use_fog
col.prop(world, 'arm_fog_color')
col.prop(world, 'arm_fog_amounta')
col.prop(world, 'arm_fog_amountb')
layout.prop(world, 'arm_use_clouds')
col = layout.column(align=True)
col.enabled = world.arm_use_clouds
col.prop(world, 'arm_clouds_lower')
col.prop(world, 'arm_clouds_upper')
col.prop(world, 'arm_clouds_precipitation')
col.prop(world, 'arm_clouds_secondary')
col.prop(world, 'arm_clouds_wind')
col.prop(world, 'arm_clouds_steps')
layout.prop(world, "arm_use_water")
col = layout.column(align=True)
col.enabled = world.arm_use_water
col.prop(world, 'arm_water_level')
col.prop(world, 'arm_water_density')
col.prop(world, 'arm_water_displace')
col.prop(world, 'arm_water_speed')
col.prop(world, 'arm_water_freq')
col.prop(world, 'arm_water_refract')
col.prop(world, 'arm_water_reflect')
col.prop(world, 'arm_water_color')
class ARM_PT_ScenePropsPanel(bpy.types.Panel):
bl_label = "Armory Props"
bl_space_type = "PROPERTIES"
@ -826,25 +869,7 @@ class ARM_PT_RenderPathWorldPanel(bpy.types.Panel):
colb.enabled = rpdat.arm_radiance
colb.prop(rpdat, 'arm_radiance_size')
layout.prop(rpdat, 'arm_clouds')
col = layout.column()
col.enabled = rpdat.arm_clouds
col.prop(rpdat, 'arm_clouds_lower')
col.prop(rpdat, 'arm_clouds_upper')
col.prop(rpdat, 'arm_clouds_precipitation')
col.prop(rpdat, 'arm_clouds_secondary')
col.prop(rpdat, 'arm_clouds_wind')
col.prop(rpdat, 'arm_clouds_steps')
layout.prop(rpdat, "rp_water")
col = layout.column()
col.enabled = rpdat.rp_water
col.prop(rpdat, 'arm_water_level')
col.prop(rpdat, 'arm_water_density')
col.prop(rpdat, 'arm_water_displace')
col.prop(rpdat, 'arm_water_speed')
col.prop(rpdat, 'arm_water_freq')
col.prop(rpdat, 'arm_water_refract')
col.prop(rpdat, 'arm_water_reflect')
col.prop(rpdat, 'arm_water_color')
class ARM_PT_RenderPathPostProcessPanel(bpy.types.Panel):
bl_label = "Post Process"
@ -978,11 +1003,6 @@ class ARM_PT_RenderPathCompositorPanel(bpy.types.Panel):
col.enabled = rpdat.arm_grain
col.prop(rpdat, 'arm_grain_strength')
layout.prop(rpdat, 'arm_fog')
col = layout.column()
col.enabled = rpdat.arm_fog
col.prop(rpdat, 'arm_fog_color')
col.prop(rpdat, 'arm_fog_amounta')
col.prop(rpdat, 'arm_fog_amountb')
layout.separator()
layout.prop(rpdat, "rp_autoexposure")
col = layout.column()
@ -1433,6 +1453,7 @@ def register():
bpy.utils.register_class(ARM_PT_PhysicsPropsPanel)
bpy.utils.register_class(ARM_PT_DataPropsPanel)
bpy.utils.register_class(ARM_PT_ScenePropsPanel)
bpy.utils.register_class(ARM_PT_WorldPropsPanel)
bpy.utils.register_class(InvalidateCacheButton)
bpy.utils.register_class(InvalidateMaterialCacheButton)
bpy.utils.register_class(ARM_PT_MaterialPropsPanel)
@ -1482,6 +1503,7 @@ def unregister():
bpy.utils.unregister_class(ARM_PT_ParticlesPropsPanel)
bpy.utils.unregister_class(ARM_PT_PhysicsPropsPanel)
bpy.utils.unregister_class(ARM_PT_DataPropsPanel)
bpy.utils.unregister_class(ARM_PT_WorldPropsPanel)
bpy.utils.unregister_class(ARM_PT_ScenePropsPanel)
bpy.utils.unregister_class(InvalidateCacheButton)
bpy.utils.unregister_class(InvalidateMaterialCacheButton)