Merge branch 'blender-v2.82-release'

This commit is contained in:
Campbell Barton
2020-01-28 16:15:38 +11:00
4 changed files with 90 additions and 23 deletions

View File

@@ -409,26 +409,18 @@ def app_template_paths(subdir=None):
:return: app template paths.
:rtype: generator
"""
# Note: keep in sync with: Blender's BKE_appdir_app_template_any
subdir_tuple = (subdir,) if subdir is not None else ()
# Avoid adding 'bl_app_templates_system' twice.
# Either we have a portable build or an installed system build.
for resource_type, module_name in (
('USER', "bl_app_templates_user"),
('LOCAL', "bl_app_templates_system"),
('SYSTEM', "bl_app_templates_system"),
subdir_args = (subdir,) if subdir is not None else ()
# Note: keep in sync with: Blender's 'BKE_appdir_app_template_any'.
# Uses 'BLENDER_USER_SCRIPTS', 'BLENDER_SYSTEM_SCRIPTS'
# ... in this case 'system' accounts for 'local' too.
scripts_system, scripts_user = _bpy_script_paths()
for resource_fn, module_name in (
(_user_resource, "bl_app_templates_user"),
(system_resource, "bl_app_templates_system"),
):
path = resource_path(resource_type)
if path:
path = _os.path.join(
*(path, "scripts", "startup", module_name, *subdir_tuple))
if _os.path.isdir(path):
path = resource_fn('SCRIPTS', _os.path.join("startup", module_name, *subdir_args))
if path and _os.path.isdir(path):
yield path
# Only load LOCAL or SYSTEM (never both).
if resource_type == 'LOCAL':
break
def preset_paths(subdir):

View File

@@ -401,6 +401,14 @@ void EEVEE_volumes_cache_object_add(EEVEE_ViewLayerData *sldata,
return;
}
float size[3];
mat4_to_size(size, ob->obmat);
/* Check if any of the axes have 0 length. (see T69070) */
const float epsilon = 1e-8f;
if ((size[0] < epsilon) || (size[1] < epsilon) || (size[2] < epsilon)) {
return;
}
struct GPUMaterial *mat = EEVEE_material_mesh_volume_get(scene, ma);
eGPUMaterialStatus status = GPU_material_status(mat);

View File

@@ -1,8 +1,41 @@
void curves_vec(float fac, vec3 vec, sampler1DArray curvemap, float layer, out vec3 outvec)
/* ext is vec4(in_x, in_dy, out_x, out_dy). */
float curve_extrapolate(float x, float y, vec4 ext)
{
vec4 co = vec4(vec * 0.5 + 0.5, layer);
if (x < 0.0) {
return y + x * ext.y;
}
else if (x > 1.0) {
return y + (x - 1.0) * ext.w;
}
else {
return y;
}
}
#define RANGE_RESCALE(x, min, range) ((x - min) * range)
void curves_vec(float fac,
vec3 vec,
sampler1DArray curvemap,
float layer,
vec3 range,
vec4 ext_x,
vec4 ext_y,
vec4 ext_z,
out vec3 outvec)
{
vec4 co = vec4(vec, layer);
vec3 xyz_min = vec3(ext_x.x, ext_y.x, ext_z.x);
co.xyz = RANGE_RESCALE(co.xyz, xyz_min, range);
outvec.x = texture(curvemap, co.xw).x;
outvec.y = texture(curvemap, co.yw).y;
outvec.z = texture(curvemap, co.zw).z;
outvec.x = curve_extrapolate(co.x, outvec.r, ext_x);
outvec.y = curve_extrapolate(co.y, outvec.g, ext_y);
outvec.z = curve_extrapolate(co.z, outvec.b, ext_z);
outvec = mix(vec, outvec, fac);
}

View File

@@ -64,10 +64,44 @@ static int gpu_shader_curve_vec(GPUMaterial *mat,
float *array, layer;
int size;
BKE_curvemapping_table_RGBA(node->storage, &array, &size);
CurveMapping *cumap = node->storage;
BKE_curvemapping_table_RGBA(cumap, &array, &size);
GPUNodeLink *tex = GPU_color_band(mat, size, array, &layer);
return GPU_stack_link(mat, node, "curves_vec", in, out, tex, GPU_constant(&layer));
float ext_xyz[3][4];
float range_xyz[3];
for (int a = 0; a < 3; a++) {
const CurveMap *cm = &cumap->cm[a];
ext_xyz[a][0] = cm->mintable;
ext_xyz[a][2] = cm->maxtable;
range_xyz[a] = 1.0f / max_ff(1e-8f, cm->maxtable - cm->mintable);
/* Compute extrapolation gradients. */
if ((cumap->flag & CUMA_EXTEND_EXTRAPOLATE) != 0) {
ext_xyz[a][1] = (cm->ext_in[0] != 0.0f) ? (cm->ext_in[1] / (cm->ext_in[0] * range_xyz[a])) :
1e8f;
ext_xyz[a][3] = (cm->ext_out[0] != 0.0f) ?
(cm->ext_out[1] / (cm->ext_out[0] * range_xyz[a])) :
1e8f;
}
else {
ext_xyz[a][1] = 0.0f;
ext_xyz[a][3] = 0.0f;
}
}
return GPU_stack_link(mat,
node,
"curves_vec",
in,
out,
tex,
GPU_constant(&layer),
GPU_uniform(range_xyz),
GPU_uniform(ext_xyz[0]),
GPU_uniform(ext_xyz[1]),
GPU_uniform(ext_xyz[2]));
}
void register_node_type_sh_curve_vec(void)