From 2f80c4baf47e4ab8f32711cdc1104c147b2d820d Mon Sep 17 00:00:00 2001 From: Lubos Lenco Date: Mon, 20 Mar 2017 01:56:46 +0100 Subject: [PATCH] Object info and hsv nodes --- blender/arm/make.py | 3 ++- blender/arm/material/cycles.py | 32 +++++++++++++++---------------- blender/arm/material/functions.py | 21 ++++++++++++++++++++ blender/arm/write_data.py | 1 - 4 files changed, 39 insertions(+), 18 deletions(-) diff --git a/blender/arm/make.py b/blender/arm/make.py index 394be0d9..62e876b2 100755 --- a/blender/arm/make.py +++ b/blender/arm/make.py @@ -45,6 +45,7 @@ def export_data(fp, sdk_path, is_play=False, is_publish=False, in_viewport=False wrd = bpy.data.worlds['Arm'] print('\nArmory v' + wrd.arm_version) + print('OS: ' + arm.utils.get_os() + ', Target: ' + state.target) # Clean compiled variants if cache is disabled if wrd.arm_cache_shaders == False: @@ -443,7 +444,7 @@ def on_compiled(mode): # build, play, play_viewport, publish krom_location = sdk_path + '/linux64/Krom/linux' krom_path = krom_location + '/Krom' os.chdir(krom_location) - state.playproc = subprocess.Popen([krom_path, arm.utils.get_fp() + '/build/window/krom', arm.utils.get_fp() + '/build/window/krom-resources'], stderr=subprocess.PIPE) + state.playproc = subprocess.Popen([krom_path, arm.utils.get_fp() + '/build/window/krom', arm.utils.get_fp() + '/build/window/krom-resources', '--nosound'], stderr=subprocess.PIPE) watch_play() def clean_cache(): diff --git a/blender/arm/material/cycles.py b/blender/arm/material/cycles.py index 39e029f5..2cb0dada 100644 --- a/blender/arm/material/cycles.py +++ b/blender/arm/material/cycles.py @@ -540,16 +540,13 @@ def parse_rgb(node, socket): return 'pow({0}, vec3({1}))'.format(out_col, gamma) elif node.type == 'HUE_SAT': -# hue = parse_value_input(node.inputs[0]) -# sat = parse_value_input(node.inputs[1]) -# val = parse_value_input(node.inputs[2]) -# fac = parse_value_input(node.inputs[3]) - out_col = parse_vector_input(node.inputs[4]) -# curshader.add_function(\ -# """vec3 hue_sat(const float hue, const float sat, const float val, const float fac, const vec3 col) { -# } -# """) - return out_col + curshader.add_function(functions.str_hsv_to_rgb) + hue = parse_value_input(node.inputs[0]) + sat = parse_value_input(node.inputs[1]) + val = parse_value_input(node.inputs[2]) + # fac = parse_value_input(node.inputs[3]) + # col = parse_vector_input(node.inputs[4]) + return 'hsv_to_rgb(vec3({0}, {1}, {2}))'.format(hue, sat, val) elif node.type == 'INVERT': fac = parse_value_input(node.inputs[0]) @@ -943,12 +940,15 @@ def parse_value(node, socket): return '0.0' elif node.type == 'OBJECT_INFO': - if socket == node.outputs[0]: # Object Index - return '0.0' - elif socket == node.outputs[1]: # Material Index - return '0.0' - elif socket == node.outputs[2]: # Random - return '0.0' + if socket == node.outputs[1]: # Object Index + curshader.add_uniform('float objectInfoIndex', link='_objectInfoIndex') + return 'objectInfoIndex' + elif socket == node.outputs[2]: # Material Index + curshader.add_uniform('float objectInfoMaterialIndex', link='_objectInfoMaterialIndex') + return 'objectInfoMaterialIndex' + elif socket == node.outputs[3]: # Random + curshader.add_uniform('float objectInfoRandom', link='_objectInfoRandom') + return 'objectInfoRandom' elif node.type == 'PARTICLE_INFO': if socket == node.outputs[0]: # Index diff --git a/blender/arm/material/functions.py b/blender/arm/material/functions.py index 5ab136ed..fca3ac2c 100644 --- a/blender/arm/material/functions.py +++ b/blender/arm/material/functions.py @@ -122,3 +122,24 @@ float tex_noise(const vec2 p) { return tex_noise(vec3(p.x, p.y, 1.0)); } """ + +str_hsv_to_rgb = """ +vec3 hsv_to_rgb(const vec3 c) { + vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +} +""" + +str_rgb_to_hsv = """ +vec3 rgb_to_hsv(const vec3 c) +{ + vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g)); + vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r)); + + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); +} +""" diff --git a/blender/arm/write_data.py b/blender/arm/write_data.py index 46c84e3c..c8f6a75e 100755 --- a/blender/arm/write_data.py +++ b/blender/arm/write_data.py @@ -225,7 +225,6 @@ const float PI = 3.1415926535; const float PI2 = PI * 2.0; const vec2 cameraPlane = vec2(""" + str(round(clip_start * 100) / 100) + """, """ + str(round(clip_end * 100) / 100) + """); const vec2 shadowmapSize = vec2(""" + str(shadowmap_size) + """, """ + str(shadowmap_size) + """); -const vec2 shadowmapCubeSize = shadowmapSize / 4.0; """) if wrd.generate_clouds: f.write(