armory/blender/props.py

440 lines
26 KiB
Python
Raw Normal View History

2015-12-02 00:05:20 +01:00
import shutil
import bpy
import os
import json
2016-08-11 22:24:45 +02:00
import nodes_renderpath
2015-12-02 00:05:20 +01:00
from bpy.types import Menu, Panel, UIList
from bpy.props import *
2016-08-04 22:38:56 +02:00
import utils
2015-12-02 00:05:20 +01:00
2016-08-04 22:38:56 +02:00
def on_scene_update(context):
2015-12-02 00:05:20 +01:00
edit_obj = bpy.context.edit_object
if edit_obj is not None and edit_obj.is_updated_data is True:
2016-07-28 22:38:11 +02:00
if edit_obj.type == 'MESH':
2016-08-25 00:26:01 +02:00
edit_obj.data.mesh_cached = False
2016-07-28 22:38:11 +02:00
elif edit_obj.type == 'ARMATURE':
edit_obj.data.armature_cached = False
2015-12-02 00:05:20 +01:00
2016-08-22 21:56:28 +02:00
for text in bpy.data.texts:
if text.is_updated:
print('ASDASDASDASDASD')
2016-08-04 22:38:56 +02:00
def invalidate_shader_cache(self, context):
# compiled.glsl changed, recompile all shaders next time
fp = utils.get_fp()
2016-08-25 00:26:01 +02:00
if os.path.isdir(fp + '/build/compiled/ShaderDatas'):
shutil.rmtree(fp + '/build/compiled/ShaderDatas')
2016-08-04 22:38:56 +02:00
def invalidate_compiled_data(self, context):
fp = utils.get_fp()
2016-08-22 21:56:28 +02:00
if os.path.isdir(fp + '/build/compiled/Assets'):
shutil.rmtree(fp + '/build/compiled/Assets')
2016-08-25 00:26:01 +02:00
if os.path.isdir(fp + '/build/compiled/ShaderDatas'):
shutil.rmtree(fp + '/build/compiled/ShaderDatas')
2016-08-04 22:38:56 +02:00
2016-08-25 00:26:01 +02:00
def invalidate_mesh_data(self, context):
2016-08-04 22:38:56 +02:00
fp = utils.get_fp()
2016-08-25 00:26:01 +02:00
if os.path.isdir(fp + '/build/compiled/Assets/meshes'):
shutil.rmtree(fp + '/build/compiled/Assets/meshes')
2016-08-04 22:38:56 +02:00
2016-01-11 21:10:33 +01:00
def initProperties():
2016-06-30 13:22:05 +02:00
# For project
2016-08-15 01:59:49 +02:00
bpy.types.World.ArmVersion = StringProperty(name = "ArmVersion", default="")
bpy.types.World.ArmProjectTarget = EnumProperty(
items = [('html5', 'HTML5', 'html5'),
('windows', 'Windows', 'windows'),
('osx', 'OSX', 'osx'),
('linux', 'Linux', 'linux'),
('ios', 'iOS', 'ios'),
('android-native', 'Android', 'android-native')],
name = "Target", default='html5')
bpy.types.World.ArmProjectName = StringProperty(name = "Name", default="ArmoryGame")
bpy.types.World.ArmProjectPackage = StringProperty(name = "Package", default="game")
bpy.types.World.ArmProjectScene = StringProperty(name = "Scene")
2016-08-15 23:45:03 +02:00
bpy.types.World.ArmProjectSamplesPerPixel = IntProperty(name = "Samples per Pixel", default=1)
2016-08-15 01:59:49 +02:00
bpy.types.World.ArmPhysics = EnumProperty(
2016-06-30 13:22:05 +02:00
items = [('Disabled', 'Disabled', 'Disabled'),
('Bullet', 'Bullet', 'Bullet')],
name = "Physics", default='Bullet')
2016-08-15 01:59:49 +02:00
bpy.types.World.ArmKhafile = StringProperty(name = "Khafile")
bpy.types.World.ArmMinimize = BoolProperty(name="Minimize Data", default=True, update=invalidate_compiled_data)
2016-08-25 00:26:01 +02:00
bpy.types.World.ArmOptimizeMesh = BoolProperty(name="Optimize Meshes", default=False, update=invalidate_mesh_data)
2016-08-15 01:59:49 +02:00
bpy.types.World.ArmSampledAnimation = BoolProperty(name="Sampled Animation", default=False, update=invalidate_compiled_data)
bpy.types.World.ArmDeinterleavedBuffers = BoolProperty(name="Deinterleaved Buffers", default=False)
bpy.types.World.ArmCacheShaders = BoolProperty(name="Cache Shaders", default=True)
bpy.types.World.ArmPlayViewportCamera = BoolProperty(name="Viewport Camera", default=False)
bpy.types.World.ArmPlayViewportNavigation = EnumProperty(
2016-07-27 14:25:01 +02:00
items = [('None', 'None', 'None'),
('Walk', 'Walk', 'Walk')],
name = "Navigation", default='Walk')
2016-08-15 01:59:49 +02:00
bpy.types.World.ArmPlayConsole = BoolProperty(name="Debug Console", default=False)
bpy.types.World.ArmPlayDeveloperTools = BoolProperty(name="Developer Tools", default=False)
bpy.types.World.ArmPlayRuntime = EnumProperty(
2016-07-17 20:29:53 +02:00
items = [('Electron', 'Electron', 'Electron'),
2016-08-21 00:16:13 +02:00
('Browser', 'Browser', 'Browser'),
('Native', 'Native', 'Native'),
2016-07-17 20:29:53 +02:00
('Krom', 'Krom', 'Krom')],
name = "Runtime", default='Electron')
2016-06-30 13:22:05 +02:00
2016-01-11 21:10:33 +01:00
# For object
2016-01-25 20:43:11 +01:00
bpy.types.Object.instanced_children = bpy.props.BoolProperty(name="Instanced Children", default=False)
2016-07-28 22:38:11 +02:00
bpy.types.Object.instanced_children_loc_x = bpy.props.BoolProperty(name="X", default=True)
bpy.types.Object.instanced_children_loc_y = bpy.props.BoolProperty(name="Y", default=True)
bpy.types.Object.instanced_children_loc_z = bpy.props.BoolProperty(name="Z", default=True)
bpy.types.Object.instanced_children_rot_x = bpy.props.BoolProperty(name="X", default=False)
bpy.types.Object.instanced_children_rot_y = bpy.props.BoolProperty(name="Y", default=False)
bpy.types.Object.instanced_children_rot_z = bpy.props.BoolProperty(name="Z", default=False)
bpy.types.Object.instanced_children_scale_x = bpy.props.BoolProperty(name="X", default=False)
bpy.types.Object.instanced_children_scale_y = bpy.props.BoolProperty(name="Y", default=False)
bpy.types.Object.instanced_children_scale_z = bpy.props.BoolProperty(name="Z", default=False)
2016-07-21 13:05:40 +02:00
bpy.types.Object.override_material = bpy.props.BoolProperty(name="Override Material", default=False)
bpy.types.Object.override_material_name = bpy.props.StringProperty(name="Name", default="")
2016-08-16 23:54:37 +02:00
bpy.types.Object.game_export = bpy.props.BoolProperty(name="Export", default=True)
2016-08-25 00:26:01 +02:00
bpy.types.Object.spawn = bpy.props.BoolProperty(name="Spawn", description="Auto-add this object when creating scene", default=True)
# For mesh
bpy.types.Mesh.mesh_cached = bpy.props.BoolProperty(name="Mesh Cached", default=False)
bpy.types.Mesh.mesh_cached_verts = bpy.props.IntProperty(name="Last Verts", default=0)
bpy.types.Mesh.mesh_cached_edges = bpy.props.IntProperty(name="Last Edges", default=0)
2016-01-25 20:43:11 +01:00
bpy.types.Mesh.static_usage = bpy.props.BoolProperty(name="Static Usage", default=True)
2016-07-21 14:31:33 +02:00
bpy.types.Curve.static_usage = bpy.props.BoolProperty(name="Static Usage", default=True)
2016-07-28 22:38:11 +02:00
# For armature
bpy.types.Armature.armature_cached = bpy.props.BoolProperty(name="Armature Cached", default=False)
2016-01-11 16:03:55 +01:00
# For camera
bpy.types.Camera.frustum_culling = bpy.props.BoolProperty(name="Frustum Culling", default=True)
2016-08-15 12:08:50 +02:00
bpy.types.Camera.pipeline_path = bpy.props.StringProperty(name="Render Path", default="deferred_path")
2016-05-06 19:46:56 +02:00
bpy.types.Camera.pipeline_id = bpy.props.StringProperty(name="Pipeline ID", default="deferred")
# TODO: Specify multiple material ids, merge ids from multiple cameras
2016-08-04 22:38:56 +02:00
bpy.types.Camera.pipeline_passes = bpy.props.StringProperty(name="Pipeline passes", default="")
2016-08-25 00:26:01 +02:00
bpy.types.Camera.mesh_context = bpy.props.StringProperty(name="Mesh", default="mesh")
bpy.types.Camera.mesh_context_empty = bpy.props.StringProperty(name="Mesh Empty", default="depthwrite")
2016-05-27 01:12:21 +02:00
bpy.types.Camera.shadows_context = bpy.props.StringProperty(name="Shadows", default="shadowmap")
bpy.types.Camera.translucent_context = bpy.props.StringProperty(name="Translucent", default="translucent")
2016-07-21 11:22:34 +02:00
bpy.types.Camera.overlay_context = bpy.props.StringProperty(name="Overlay", default="overlay")
2016-06-07 09:38:49 +02:00
bpy.types.Camera.is_probe = bpy.props.BoolProperty(name="Probe", default=False)
2016-06-30 13:22:05 +02:00
bpy.types.Camera.probe_generate_radiance = bpy.props.BoolProperty(name="Generate Radiance", default=False)
2016-06-07 09:38:49 +02:00
bpy.types.Camera.probe_texture = bpy.props.StringProperty(name="Texture", default="")
bpy.types.Camera.probe_num_mips = bpy.props.IntProperty(name="Number of mips", default=0)
bpy.types.Camera.probe_volume = bpy.props.StringProperty(name="Volume", default="")
bpy.types.Camera.probe_strength = bpy.props.FloatProperty(name="Strength", default=1.0)
bpy.types.Camera.probe_blending = bpy.props.FloatProperty(name="Blending", default=0.0)
2016-04-08 16:17:57 +02:00
# TODO: move to world
bpy.types.Camera.world_envtex_name = bpy.props.StringProperty(name="Environment Texture", default='')
bpy.types.Camera.world_envtex_num_mips = bpy.props.IntProperty(name="Number of mips", default=0)
2016-07-10 00:51:39 +02:00
bpy.types.Camera.world_envtex_color = bpy.props.FloatVectorProperty(name="Environment Color", size=4, default=[0,0,0,1])
bpy.types.Camera.world_envtex_strength = bpy.props.FloatProperty(name="Environment Strength", default=1.0)
2016-06-30 13:22:05 +02:00
bpy.types.Camera.world_envtex_sun_direction = bpy.props.FloatVectorProperty(name="Sun Direction", size=3, default=[0,0,0])
bpy.types.Camera.world_envtex_turbidity = bpy.props.FloatProperty(name="Turbidity", default=1.0)
bpy.types.Camera.world_envtex_ground_albedo = bpy.props.FloatProperty(name="Ground Albedo", default=0.0)
2016-05-18 01:34:21 +02:00
bpy.types.Camera.last_decal_context = bpy.props.StringProperty(name="Decal Context", default='')
2016-06-03 17:18:38 +02:00
bpy.types.World.world_defs = bpy.props.StringProperty(name="World Shader Defs", default='')
2016-08-15 23:45:03 +02:00
bpy.types.World.generate_radiance = bpy.props.BoolProperty(name="Radiance Probes", default=True, update=invalidate_shader_cache)
bpy.types.World.generate_clouds = bpy.props.BoolProperty(name="Clouds", default=False, update=invalidate_shader_cache)
2016-08-23 22:55:46 +02:00
bpy.types.World.generate_clouds_density = bpy.props.FloatProperty(name="Density", default=0.5, min=0.0, max=10.0, update=invalidate_shader_cache)
2016-08-04 22:38:56 +02:00
bpy.types.World.generate_clouds_size = bpy.props.FloatProperty(name="Size", default=1.0, min=0.0, max=10.0, update=invalidate_shader_cache)
bpy.types.World.generate_clouds_lower = bpy.props.FloatProperty(name="Lower", default=2.0, min=1.0, max=10.0, update=invalidate_shader_cache)
bpy.types.World.generate_clouds_upper = bpy.props.FloatProperty(name="Upper", default=3.5, min=1.0, max=10.0, update=invalidate_shader_cache)
bpy.types.World.generate_clouds_wind = bpy.props.FloatVectorProperty(name="Wind", default=[0.2, 0.06], size=2, update=invalidate_shader_cache)
bpy.types.World.generate_clouds_secondary = bpy.props.FloatProperty(name="Secondary", default=0.0, min=0.0, max=10.0, update=invalidate_shader_cache)
bpy.types.World.generate_clouds_precipitation = bpy.props.FloatProperty(name="Precipitation", default=1.0, min=0.0, max=2.0, update=invalidate_shader_cache)
bpy.types.World.generate_clouds_eccentricity = bpy.props.FloatProperty(name="Eccentricity", default=0.6, min=0.0, max=1.0, update=invalidate_shader_cache)
bpy.types.World.shadowmap_size = bpy.props.IntProperty(name="Shadowmap Size", default=0, update=invalidate_shader_cache)
2016-07-10 00:51:39 +02:00
bpy.types.World.scripts_list = bpy.props.CollectionProperty(type=bpy.types.PropertyGroup)
bpy.types.World.bundled_scripts_list = bpy.props.CollectionProperty(type=bpy.types.PropertyGroup)
2016-08-15 23:45:03 +02:00
bpy.types.World.generate_ocean = bpy.props.BoolProperty(name="Ocean", default=False, update=invalidate_shader_cache)
2016-08-04 22:38:56 +02:00
bpy.types.World.generate_ocean_base_color = bpy.props.FloatVectorProperty(name="Base Color", size=3, default=[0.1, 0.19, 0.37], subtype='COLOR', update=invalidate_shader_cache)
bpy.types.World.generate_ocean_water_color = bpy.props.FloatVectorProperty(name="Water Color", size=3, default=[0.6, 0.7, 0.9], subtype='COLOR', update=invalidate_shader_cache)
bpy.types.World.generate_ocean_level = bpy.props.FloatProperty(name="Level", default=0.0, update=invalidate_shader_cache)
bpy.types.World.generate_ocean_amplitude = bpy.props.FloatProperty(name="Amplitude", default=2.5, update=invalidate_shader_cache)
bpy.types.World.generate_ocean_height = bpy.props.FloatProperty(name="Height", default=0.6, update=invalidate_shader_cache)
bpy.types.World.generate_ocean_choppy = bpy.props.FloatProperty(name="Choppy", default=4.0, update=invalidate_shader_cache)
bpy.types.World.generate_ocean_speed = bpy.props.FloatProperty(name="Speed", default=1.0, update=invalidate_shader_cache)
bpy.types.World.generate_ocean_freq = bpy.props.FloatProperty(name="Freq", default=0.16, update=invalidate_shader_cache)
bpy.types.World.generate_ocean_fade = bpy.props.FloatProperty(name="Fade", default=1.8, update=invalidate_shader_cache)
2016-08-15 23:45:03 +02:00
bpy.types.World.generate_ssao = bpy.props.BoolProperty(name="SSAO", description="Screen-Space Ambient Occlusion", default=True, update=invalidate_shader_cache)
2016-08-04 22:38:56 +02:00
bpy.types.World.generate_ssao_size = bpy.props.FloatProperty(name="Size", default=0.08, update=invalidate_shader_cache)
bpy.types.World.generate_ssao_strength = bpy.props.FloatProperty(name="Strength", default=0.30, update=invalidate_shader_cache)
2016-08-09 23:51:40 +02:00
bpy.types.World.generate_ssao_texture_scale = bpy.props.FloatProperty(name="Texture Scale", default=1.0, min=0.0, max=1.0, update=invalidate_shader_cache)
2016-08-15 23:45:03 +02:00
bpy.types.World.generate_shadows = bpy.props.BoolProperty(name="Shadows", default=True, update=invalidate_shader_cache)
bpy.types.World.generate_bloom = bpy.props.BoolProperty(name="Bloom", default=True, update=invalidate_shader_cache)
2016-08-04 22:38:56 +02:00
bpy.types.World.generate_bloom_treshold = bpy.props.FloatProperty(name="Treshold", default=3.0, update=invalidate_shader_cache)
2016-08-09 23:51:40 +02:00
bpy.types.World.generate_bloom_strength = bpy.props.FloatProperty(name="Strength", default=0.15, update=invalidate_shader_cache)
2016-08-15 23:45:03 +02:00
bpy.types.World.generate_motion_blur = bpy.props.BoolProperty(name="Motion Blur", default=True, update=invalidate_shader_cache)
2016-08-04 22:38:56 +02:00
bpy.types.World.generate_motion_blur_intensity = bpy.props.FloatProperty(name="Intensity", default=1.0, update=invalidate_shader_cache)
2016-08-15 23:45:03 +02:00
bpy.types.World.generate_ssr = bpy.props.BoolProperty(name="SSR", description="Screen-Space Reflections", default=True, update=invalidate_shader_cache)
2016-08-04 22:38:56 +02:00
bpy.types.World.generate_ssr_ray_step = bpy.props.FloatProperty(name="Ray Step", default=0.04, update=invalidate_shader_cache)
bpy.types.World.generate_ssr_min_ray_step = bpy.props.FloatProperty(name="Ray Step Min", default=0.05, update=invalidate_shader_cache)
bpy.types.World.generate_ssr_search_dist = bpy.props.FloatProperty(name="Search Dist", default=5.0, update=invalidate_shader_cache)
bpy.types.World.generate_ssr_falloff_exp = bpy.props.FloatProperty(name="Falloff Exp", default=5.0, update=invalidate_shader_cache)
bpy.types.World.generate_ssr_jitter = bpy.props.FloatProperty(name="Jitter", default=0.6, update=invalidate_shader_cache)
2016-08-09 23:51:40 +02:00
bpy.types.World.generate_ssr_texture_scale = bpy.props.FloatProperty(name="Texture Scale", default=0.5, min=0.0, max=1.0, update=invalidate_shader_cache)
2016-08-15 23:45:03 +02:00
bpy.types.World.generate_letterbox = bpy.props.BoolProperty(name="Letterbox", default=False, update=invalidate_shader_cache)
bpy.types.World.generate_letterbox_size = bpy.props.FloatProperty(name="Size", default=0.1, update=invalidate_shader_cache)
bpy.types.World.generate_grain = bpy.props.BoolProperty(name="Film Grain", default=False, update=invalidate_shader_cache)
bpy.types.World.generate_grain_strength = bpy.props.FloatProperty(name="Strength", default=2.0, update=invalidate_shader_cache)
bpy.types.World.generate_fog = bpy.props.BoolProperty(name="Volumetric Fog", default=False, update=invalidate_shader_cache)
bpy.types.World.generate_fog_color = bpy.props.FloatVectorProperty(name="Color", size=3, subtype='COLOR', default=[0.5, 0.6, 0.7], update=invalidate_shader_cache)
2016-08-21 00:16:13 +02:00
bpy.types.World.generate_fog_amounta = bpy.props.FloatProperty(name="Amount A", default=0.25, update=invalidate_shader_cache)
bpy.types.World.generate_fog_amountb = bpy.props.FloatProperty(name="Amount B", default=0.5, update=invalidate_shader_cache)
2016-08-23 22:55:46 +02:00
bpy.types.World.generate_gpu_skin = bpy.props.BoolProperty(name="GPU Skinning", default=True, update=invalidate_shader_cache)
bpy.types.World.generate_gpu_skin_max_bones = bpy.props.IntProperty(name="Max Bones", default=50, min=1, max=84, update=invalidate_shader_cache)
2016-01-11 16:03:55 +01:00
# For material
2016-01-25 20:43:11 +01:00
bpy.types.Material.receive_shadow = bpy.props.BoolProperty(name="Receive Shadow", default=True)
2016-07-21 13:05:40 +02:00
bpy.types.Material.override_shader = bpy.props.BoolProperty(name="Override Shader", default=False)
bpy.types.Material.override_shader_name = bpy.props.StringProperty(name="Name", default='')
bpy.types.Material.override_shader_context = bpy.props.BoolProperty(name="Override Context", default=False)
bpy.types.Material.override_shader_context_name = bpy.props.StringProperty(name="Name", default='')
2016-04-02 18:19:52 +02:00
bpy.types.Material.stencil_mask = bpy.props.IntProperty(name="Stencil Mask", default=0)
2016-01-25 20:43:11 +01:00
bpy.types.Material.export_tangents = bpy.props.BoolProperty(name="Export Tangents", default=False)
2016-05-16 13:02:16 +02:00
bpy.types.Material.skip_context = bpy.props.StringProperty(name="Skip Context", default='')
2016-07-21 11:22:34 +02:00
bpy.types.Material.overlay = bpy.props.BoolProperty(name="X-Ray", default=False)
2016-07-30 11:56:57 +02:00
bpy.types.Material.override_cull = bpy.props.BoolProperty(name="Override Cull-Mode", default=False)
bpy.types.Material.override_cull_mode = EnumProperty(
items = [('none', 'None', 'None'),
('clockwise', 'Clockwise', 'Clockwise'),
('counter_clockwise', 'Counter-Clockwise', 'Counter-Clockwise')],
name = "Cull-Mode", default='clockwise')
bpy.types.Material.override_compare = bpy.props.BoolProperty(name="Override Compare-Mode", default=False)
bpy.types.Material.override_compare_mode = EnumProperty(
items = [('Always', 'Always', 'Always'),
('Less', 'Less', 'Less')],
name = "Compare-Mode", default='Less')
bpy.types.Material.override_depthwrite = bpy.props.BoolProperty(name="Override Depth-Write", default=False)
bpy.types.Material.override_depthwrite_mode = EnumProperty(
items = [('True', 'True', 'True'),
('False', 'False', 'False')],
name = "Depth-Write", default='True')
2016-06-30 13:22:05 +02:00
# For scene
2016-08-16 23:54:37 +02:00
bpy.types.Scene.game_export = bpy.props.BoolProperty(name="Export", default=True)
2016-08-25 00:26:01 +02:00
# For lamp
bpy.types.Lamp.lamp_clip_start = bpy.props.FloatProperty(name="Clip Start", default=0.1)
bpy.types.Lamp.lamp_clip_end = bpy.props.FloatProperty(name="Clip End", default=50.0)
bpy.types.Lamp.lamp_fov = bpy.props.FloatProperty(name="FoV", default=0.785)
bpy.types.Lamp.lamp_shadows_bias = bpy.props.FloatProperty(name="Shadows Bias", default=0.0001)
2015-12-02 00:05:20 +01:00
2015-12-03 14:38:33 +01:00
# Menu in object region
2016-01-11 16:03:55 +01:00
class ObjectPropsPanel(bpy.types.Panel):
2016-07-10 00:51:39 +02:00
bl_label = "Armory Props"
2015-12-02 00:05:20 +01:00
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "object"
def draw(self, context):
layout = self.layout
obj = bpy.context.object
2016-05-18 01:34:21 +02:00
layout.prop(obj, 'game_export')
2016-08-25 00:26:01 +02:00
if obj.game_export:
layout.prop(obj, 'spawn')
2015-12-02 00:05:20 +01:00
if obj.type == 'MESH':
layout.prop(obj, 'instanced_children')
2016-07-28 22:38:11 +02:00
if obj.instanced_children:
layout.label('Location')
row = layout.row()
row.prop(obj, 'instanced_children_loc_x')
row.prop(obj, 'instanced_children_loc_y')
row.prop(obj, 'instanced_children_loc_z')
layout.label('Rotation')
row = layout.row()
row.prop(obj, 'instanced_children_rot_x')
row.prop(obj, 'instanced_children_rot_y')
row.prop(obj, 'instanced_children_rot_z')
layout.label('Scale')
row = layout.row()
row.prop(obj, 'instanced_children_scale_x')
row.prop(obj, 'instanced_children_scale_y')
row.prop(obj, 'instanced_children_scale_z')
2016-07-21 13:05:40 +02:00
layout.prop(obj, 'override_material')
if obj.override_material:
layout.prop(obj, 'override_material_name')
2016-01-11 16:03:55 +01:00
2016-07-17 20:29:53 +02:00
# Menu in modifiers region
class ModifiersPropsPanel(bpy.types.Panel):
bl_label = "Armory Props"
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "modifier"
def draw(self, context):
layout = self.layout
obj = bpy.context.object
# Assume as first modifier
if len(obj.modifiers) > 0 and obj.modifiers[0].type == 'OCEAN':
layout.prop(bpy.data.worlds[0], 'generate_ocean_base_color')
layout.prop(bpy.data.worlds[0], 'generate_ocean_water_color')
2016-07-27 14:25:01 +02:00
layout.prop(bpy.data.worlds[0], 'generate_ocean_fade')
2016-07-17 20:29:53 +02:00
2016-01-11 21:10:33 +01:00
# Menu in data region
2016-01-11 16:03:55 +01:00
class DataPropsPanel(bpy.types.Panel):
2016-07-10 00:51:39 +02:00
bl_label = "Armory Props"
2016-01-11 16:03:55 +01:00
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "data"
def draw(self, context):
layout = self.layout
obj = bpy.context.object
if obj.type == 'CAMERA':
2016-06-07 09:38:49 +02:00
layout.prop(obj.data, 'is_probe')
if obj.data.is_probe == True:
layout.prop(obj.data, 'probe_texture')
layout.prop_search(obj.data, "probe_volume", bpy.data, "objects")
layout.prop(obj.data, 'probe_strength')
layout.prop(obj.data, 'probe_blending')
2016-01-11 16:03:55 +01:00
layout.prop(obj.data, 'frustum_culling')
2016-01-26 14:36:55 +01:00
layout.prop_search(obj.data, "pipeline_path", bpy.data, "node_groups")
2016-08-15 12:08:50 +02:00
layout.operator("arm.reimport_paths_menu")
2016-07-21 14:31:33 +02:00
elif obj.type == 'MESH' or obj.type == 'FONT':
2016-01-11 21:10:33 +01:00
layout.prop(obj.data, 'static_usage')
2016-08-15 12:08:50 +02:00
layout.operator("arm.invalidate_cache")
2016-07-17 20:29:53 +02:00
elif obj.type == 'LAMP':
2016-08-25 00:26:01 +02:00
layout.prop(obj.data, 'lamp_clip_start')
layout.prop(obj.data, 'lamp_clip_end')
layout.prop(obj.data, 'lamp_fov')
layout.prop(obj.data, 'lamp_shadows_bias')
2015-12-02 00:05:20 +01:00
2016-06-30 13:22:05 +02:00
class ScenePropsPanel(bpy.types.Panel):
bl_label = "Armory Props"
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
def draw(self, context):
layout = self.layout
obj = bpy.context.scene
layout.prop(obj, 'game_export')
2016-08-15 12:08:50 +02:00
class ReimportPathsMenu(bpy.types.Menu):
2016-08-16 23:54:37 +02:00
bl_label = "OK?"
2016-08-15 12:08:50 +02:00
bl_idname = "OBJECT_MT_reimport_paths_menu"
def draw(self, context):
layout = self.layout
layout.operator("arm.reimport_paths")
class ReimportPathsButton(bpy.types.Operator):
bl_label = "Reimport Paths"
bl_idname = "arm.reimport_paths_menu"
def execute(self, context):
bpy.ops.wm.call_menu(name=ReimportPathsMenu.bl_idname)
return {"FINISHED"}
class OBJECT_OT_REIMPORTPATHSButton(bpy.types.Operator):
bl_idname = "arm.reimport_paths"
bl_label = "Reimport Paths"
2016-01-27 23:40:33 +01:00
def execute(self, context):
2016-08-11 22:24:45 +02:00
nodes_renderpath.load_library()
2016-01-27 23:40:33 +01:00
return{'FINISHED'}
2016-06-21 13:29:27 +02:00
class OBJECT_OT_INVALIDATECACHEButton(bpy.types.Operator):
2016-08-15 12:08:50 +02:00
bl_idname = "arm.invalidate_cache"
2016-06-21 13:29:27 +02:00
bl_label = "Invalidate Cache"
def execute(self, context):
2016-08-25 00:26:01 +02:00
context.object.data.mesh_cached = False
2016-06-21 13:29:27 +02:00
return{'FINISHED'}
2015-12-03 14:38:33 +01:00
# Menu in materials region
class MatsPropsPanel(bpy.types.Panel):
2016-07-10 00:51:39 +02:00
bl_label = "Armory Props"
2015-12-03 14:38:33 +01:00
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "material"
def draw(self, context):
layout = self.layout
mat = bpy.context.material
layout.prop(mat, 'receive_shadow')
2016-07-21 13:05:40 +02:00
layout.prop(mat, 'override_shader')
if mat.override_shader:
layout.prop(mat, 'override_shader_name')
layout.prop(mat, 'override_shader_context')
if mat.override_shader_context:
layout.prop(mat, 'override_shader_context_name')
2016-07-30 11:56:57 +02:00
layout.prop(mat, 'override_cull')
if mat.override_cull:
layout.prop(mat, 'override_cull_mode')
# layout.prop(mat, 'override_compare')
# if mat.override_compare:
# layout.prop(mat, 'override_compare_mode')
# layout.prop(mat, 'override_depthwrite')
# if mat.override_depthwrite:
# layout.prop(mat, 'override_depthwrite_mode')
2016-08-15 12:08:50 +02:00
layout.prop(mat, 'overlay')
layout.prop(mat, 'stencil_mask')
layout.prop(mat, 'skip_context')
2015-12-03 14:38:33 +01:00
2016-06-30 13:22:05 +02:00
# Menu in world region
class WorldPropsPanel(bpy.types.Panel):
2016-07-10 00:51:39 +02:00
bl_label = "Armory Props"
2016-06-30 13:22:05 +02:00
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "world"
def draw(self, context):
layout = self.layout
wrd = bpy.context.world
2016-08-15 23:45:03 +02:00
layout.prop(wrd, 'generate_shadows')
2016-06-30 13:22:05 +02:00
layout.prop(wrd, 'generate_radiance')
2016-07-12 00:09:02 +02:00
layout.prop(wrd, 'generate_clouds')
if wrd.generate_clouds:
layout.prop(wrd, 'generate_clouds_density')
layout.prop(wrd, 'generate_clouds_size')
layout.prop(wrd, 'generate_clouds_lower')
layout.prop(wrd, 'generate_clouds_upper')
layout.prop(wrd, 'generate_clouds_wind')
layout.prop(wrd, 'generate_clouds_secondary')
layout.prop(wrd, 'generate_clouds_precipitation')
layout.prop(wrd, 'generate_clouds_eccentricity')
2016-07-17 20:29:53 +02:00
layout.prop(wrd, 'generate_ssao')
if wrd.generate_ssao:
layout.prop(wrd, 'generate_ssao_size')
layout.prop(wrd, 'generate_ssao_strength')
2016-08-09 23:51:40 +02:00
layout.prop(wrd, 'generate_ssao_texture_scale')
layout.prop(wrd, 'generate_bloom')
if wrd.generate_bloom:
layout.prop(wrd, 'generate_bloom_treshold')
2016-08-07 01:43:21 +02:00
layout.prop(wrd, 'generate_bloom_strength')
layout.prop(wrd, 'generate_motion_blur')
if wrd.generate_motion_blur:
layout.prop(wrd, 'generate_motion_blur_intensity')
layout.prop(wrd, 'generate_ssr')
if wrd.generate_ssr:
layout.prop(wrd, 'generate_ssr_ray_step')
layout.prop(wrd, 'generate_ssr_min_ray_step')
layout.prop(wrd, 'generate_ssr_search_dist')
layout.prop(wrd, 'generate_ssr_falloff_exp')
layout.prop(wrd, 'generate_ssr_jitter')
2016-08-09 23:51:40 +02:00
layout.prop(wrd, 'generate_ssr_texture_scale')
2016-08-15 23:45:03 +02:00
layout.label('Compositor')
layout.prop(wrd, 'generate_letterbox')
if wrd.generate_letterbox:
layout.prop(wrd, 'generate_letterbox_size')
layout.prop(wrd, 'generate_grain')
if wrd.generate_grain:
layout.prop(wrd, 'generate_grain_strength')
layout.prop(wrd, 'generate_fog')
if wrd.generate_fog:
layout.prop(wrd, 'generate_fog_color')
layout.prop(wrd, 'generate_fog_amounta')
layout.prop(wrd, 'generate_fog_amountb')
2016-01-27 23:40:33 +01:00
2016-08-23 22:55:46 +02:00
layout.label('Skinning')
layout.prop(wrd, 'generate_gpu_skin')
if wrd.generate_gpu_skin:
layout.prop(wrd, 'generate_gpu_skin_max_bones')
2015-12-02 00:05:20 +01:00
# Registration
2015-12-07 20:04:23 +01:00
def register():
bpy.utils.register_module(__name__)
2016-01-11 21:10:33 +01:00
initProperties()
2016-08-04 22:38:56 +02:00
bpy.app.handlers.scene_update_post.append(on_scene_update)
2015-12-07 20:04:23 +01:00
def unregister():
2016-08-04 22:38:56 +02:00
bpy.app.handlers.scene_update_post.remove(on_scene_update)
2015-12-07 20:04:23 +01:00
bpy.utils.unregister_module(__name__)