Object info and hsv nodes

This commit is contained in:
Lubos Lenco 2017-03-20 01:56:46 +01:00
parent 9afaaabbcb
commit 2f80c4baf4
4 changed files with 39 additions and 18 deletions

View file

@ -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():

View file

@ -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

View file

@ -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);
}
"""

View file

@ -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(