Expose asset quality

This commit is contained in:
Lubos Lenco 2017-09-06 16:37:23 +02:00
parent 51a158fad0
commit 52c1b7b45d
4 changed files with 38 additions and 12 deletions

View file

@ -460,8 +460,10 @@ def on_compiled(mode): # build, play, play_viewport, publish
elif wrd.arm_play_runtime == 'Krom':
krom_location, krom_path = arm.utils.krom_paths()
os.chdir(krom_location)
# os.chdir(arm.utils.get_fp_build())
args = [krom_path, arm.utils.get_fp_build() + '/window/krom', arm.utils.get_fp_build() + '/window/krom-resources', '--nosound']
args = [krom_path, arm.utils.get_fp_build() + '/window/krom', arm.utils.get_fp_build() + '/window/krom-resources']
# TODO: Krom sound freezes on MacOS
if arm.utils.get_os() == 'mac':
args.append('--nosound')
if state.is_render:
args.append('--nowindow')
state.playproc = subprocess.Popen(args, stderr=subprocess.PIPE)

View file

@ -66,6 +66,8 @@ def init_properties():
name = "Hscript", default='Disabled', description="Include Hscript library")
bpy.types.World.arm_khafile = StringProperty(name="Khafile", description="Source appended to khafile.js")
bpy.types.World.arm_khamake = StringProperty(name="Khamake", description="Command line params appended to khamake")
bpy.types.World.arm_texture_quality = bpy.props.FloatProperty(name="Texture Quality", default=1.0, min=0.0, max=1.0, subtype='FACTOR')
bpy.types.World.arm_sound_quality = bpy.props.FloatProperty(name="Sound Quality", default=0.9, min=0.0, max=1.0, subtype='FACTOR')
bpy.types.World.arm_minimize = BoolProperty(name="Minimize Data", description="Export scene data in binary", default=True, update=assets.invalidate_compiled_data)
bpy.types.World.arm_optimize_mesh = BoolProperty(name="Optimize Meshes", description="Export more efficient geometry indices, can prolong build times", default=False, update=assets.invalidate_mesh_data)
bpy.types.World.arm_sampled_animation = BoolProperty(name="Sampled Animation", description="Export object animation as raw matrices", default=False, update=assets.invalidate_compiled_data)

View file

@ -404,6 +404,10 @@ class ArmoryProjectPanel(bpy.types.Panel):
col.prop(wrd, 'arm_winmaximize')
col.prop(wrd, 'arm_winminimize')
layout.label('Assets:')
layout.prop(wrd, 'arm_texture_quality')
layout.prop(wrd, 'arm_sound_quality')
layout.separator()
layout.label('Modules:')
layout.prop(wrd, 'arm_physics')

View file

@ -4,13 +4,14 @@ import shutil
import arm.utils
import arm.assets as assets
import arm.make_state as state
import glob
check_dot_path = False
def add_armory_library(sdk_path, name):
return ('project.addLibrary("' + sdk_path + '/' + name + '");\n').replace('\\', '/')
def add_assets(path):
def add_assets(path, quality=1.0):
global check_dot_path
if check_dot_path and '/.' in path: # Redirect path to local copy
armpath = arm.utils.build_dir() + '/compiled/ArmoryAssets/'
@ -20,18 +21,17 @@ def add_assets(path):
if not os.path.isfile(localpath):
shutil.copy(path, localpath)
path = localpath
return 'project.addAssets("' + path + '");\n'
s = 'project.addAssets("' + path + '"';
if quality < 1.0:
s += ', { quality: ' + str(quality) + ' }'
s += ');\n'
return s
# Write khafile.js
def write_khafilejs(is_play, export_physics, export_navigation, export_ui, is_publish, enable_dce, in_viewport, import_traits, import_logicnodes):
global check_dot_path
sdk_path = arm.utils.get_sdk_path()
# Merge duplicates and sort
shader_references = sorted(list(set(assets.shaders)))
shader_data_references = sorted(list(set(assets.shader_datas)))
asset_references = sorted(list(set(assets.assets)))
wrd = bpy.data.worlds['Arm']
with open('khafile.js', 'w') as f:
@ -53,7 +53,9 @@ project.addSources('Sources');
# Auto-add assets located in Bundled directory
if os.path.exists('Bundled'):
f.write(add_assets("Bundled/**"))
bundled = glob.glob("Bundled/*.*")
for file in bundled:
assets.add(file)
if not os.path.exists('Libraries/armory'):
f.write(add_armory_library(sdk_path, 'armory'))
@ -115,16 +117,32 @@ project.addSources('Sources');
# Scene patch
assets.add_khafile_def('arm_sceneload')
shader_references = sorted(list(set(assets.shaders)))
for ref in shader_references:
f.write("project.addShaders('" + ref + "');\n")
shader_data_references = sorted(list(set(assets.shader_datas)))
for ref in shader_data_references:
ref = ref.replace('\\', '/')
f.write(add_assets(ref))
asset_references = sorted(list(set(assets.assets)))
for ref in asset_references:
ref = ref.replace('\\', '/')
f.write(add_assets(ref))
quality = 1.0
print(ref)
s = ref.lower()
if s.endswith('.wav'):
quality = wrd.arm_sound_quality
elif s.endswith('.png') or s.endswith('.jpg'):
quality = wrd.arm_texture_quality
f.write(add_assets(ref, quality=quality))
if wrd.arm_sound_quality < 1.0 or state.target == 'html5':
assets.add_khafile_def('arm_soundcompress')
if wrd.arm_texture_quality < 1.0:
assets.add_khafile_def('arm_texcompress')
if wrd.arm_play_console:
assets.add_khafile_def('arm_profile')