Merge branch 'master' into blender2.8
This commit is contained in:
commit
33b6f944c6
|
@ -51,7 +51,8 @@ shader node_principled_volume(
|
|||
|
||||
/* Add scattering and absorption closures. */
|
||||
color scatter_coeff = scatter_color;
|
||||
color absorption_coeff = max(1.0 - scatter_color, 0.0) * max(1.0 - AbsorptionColor, 0.0);
|
||||
color absorption_color = sqrt(max(AbsorptionColor, 0.0));
|
||||
color absorption_coeff = max(1.0 - scatter_color, 0.0) * max(1.0 - absorption_color, 0.0);
|
||||
Volume = scatter_coeff * density * henyey_greenstein(Anisotropy) +
|
||||
absorption_coeff * density * absorption();
|
||||
}
|
||||
|
|
|
@ -893,7 +893,7 @@ ccl_device void svm_node_principled_volume(KernelGlobals *kg, ShaderData *sd, fl
|
|||
/* Add extinction weight. */
|
||||
float3 zero = make_float3(0.0f, 0.0f, 0.0f);
|
||||
float3 one = make_float3(1.0f, 1.0f, 1.0f);
|
||||
float3 absorption_color = stack_load_float3(stack, absorption_color_offset);
|
||||
float3 absorption_color = max(sqrt(stack_load_float3(stack, absorption_color_offset)), zero);
|
||||
float3 absorption = max(one - color, zero) * max(one - absorption_color, zero);
|
||||
volume_extinction_setup(sd, (color + absorption) * density);
|
||||
}
|
||||
|
|
|
@ -57,6 +57,7 @@ ccl_device_inline float3 clamp(const float3& a, const float3& mn, const float3&
|
|||
ccl_device_inline float3 fabs(const float3& a);
|
||||
ccl_device_inline float3 mix(const float3& a, const float3& b, float t);
|
||||
ccl_device_inline float3 rcp(const float3& a);
|
||||
ccl_device_inline float3 sqrt(const float3& a);
|
||||
#endif /* !__KERNEL_OPENCL__ */
|
||||
|
||||
ccl_device_inline float min3(float3 a);
|
||||
|
@ -270,6 +271,15 @@ ccl_device_inline float3 fabs(const float3& a)
|
|||
#endif
|
||||
}
|
||||
|
||||
ccl_device_inline float3 sqrt(const float3& a)
|
||||
{
|
||||
#ifdef __KERNEL_SSE__
|
||||
return float3(_mm_sqrt_ps(a));
|
||||
#else
|
||||
return make_float3(sqrtf(a.x), sqrtf(a.y), sqrtf(a.z));
|
||||
#endif
|
||||
}
|
||||
|
||||
ccl_device_inline float3 mix(const float3& a, const float3& b, float t)
|
||||
{
|
||||
return a + t*(b - a);
|
||||
|
|
|
@ -472,7 +472,7 @@ EditBone *duplicateEditBone(EditBone *curBone, const char *name, ListBase *editb
|
|||
return duplicateEditBoneObjects(curBone, name, editbones, ob, ob);
|
||||
}
|
||||
|
||||
static int armature_duplicate_selected_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
static int armature_duplicate_selected_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
bArmature *arm;
|
||||
EditBone *ebone_iter;
|
||||
|
@ -484,7 +484,9 @@ static int armature_duplicate_selected_exec(bContext *C, wmOperator *UNUSED(op))
|
|||
/* cancel if nothing selected */
|
||||
if (CTX_DATA_COUNT(C, selected_bones) == 0)
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
|
||||
const bool do_flip_names = RNA_boolean_get(op->ptr, "do_flip_names");
|
||||
|
||||
ED_armature_sync_selection(arm->edbo); // XXX why is this needed?
|
||||
|
||||
preEditBoneDuplicate(arm->edbo);
|
||||
|
@ -512,8 +514,20 @@ static int armature_duplicate_selected_exec(bContext *C, wmOperator *UNUSED(op))
|
|||
(ebone_iter->flag & BONE_SELECTED))
|
||||
{
|
||||
EditBone *ebone;
|
||||
char new_bone_name_buff[MAXBONENAME];
|
||||
char *new_bone_name = ebone_iter->name;
|
||||
|
||||
ebone = duplicateEditBone(ebone_iter, ebone_iter->name, arm->edbo, obedit);
|
||||
if (do_flip_names) {
|
||||
BLI_string_flip_side_name(new_bone_name_buff, ebone_iter->name, false, sizeof(new_bone_name_buff));
|
||||
|
||||
/* Only use flipped name if not yet in use. Otherwise we'd get again inconsistent namings
|
||||
* (different numbers), better keep default behavior in this case. */
|
||||
if (ED_armature_bone_find_name(arm->edbo, new_bone_name_buff) == NULL) {
|
||||
new_bone_name = new_bone_name_buff;
|
||||
}
|
||||
}
|
||||
|
||||
ebone = duplicateEditBone(ebone_iter, new_bone_name, arm->edbo, obedit);
|
||||
|
||||
if (!ebone_first_dupe) {
|
||||
ebone_first_dupe = ebone;
|
||||
|
@ -590,6 +604,10 @@ void ARMATURE_OT_duplicate(wmOperatorType *ot)
|
|||
|
||||
/* flags */
|
||||
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
||||
|
||||
RNA_def_boolean(
|
||||
ot->srna, "do_flip_names", false,
|
||||
"Flip Names", "Try to flip names of the bones, if possible, instead of adding a number extension");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -314,8 +314,9 @@ typedef struct BoneFlipNameData {
|
|||
*
|
||||
* \param arm: Armature the bones belong to
|
||||
* \param bones_names: List of BoneConflict elems.
|
||||
* \param do_flip_numbers: if set, try to get rid of dot-numbers at end of bone names.
|
||||
*/
|
||||
void ED_armature_bones_flip_names(bArmature *arm, ListBase *bones_names)
|
||||
void ED_armature_bones_flip_names(bArmature *arm, ListBase *bones_names, const bool do_strip_numbers)
|
||||
{
|
||||
ListBase bones_names_conflicts = {NULL};
|
||||
BoneFlipNameData *bfn;
|
||||
|
@ -327,9 +328,9 @@ void ED_armature_bones_flip_names(bArmature *arm, ListBase *bones_names)
|
|||
char name_flip[MAXBONENAME];
|
||||
char *name = link->data;
|
||||
|
||||
/* Do not strip numbers, otherwise we'll end up with completely mismatched names in cases like
|
||||
/* WARNING: if do_strip_numbers is set, expect completely mismatched names in cases like
|
||||
* Bone.R, Bone.R.001, Bone.R.002, etc. */
|
||||
BLI_string_flip_side_name(name_flip, name, false, sizeof(name_flip));
|
||||
BLI_string_flip_side_name(name_flip, name, do_strip_numbers, sizeof(name_flip));
|
||||
|
||||
ED_armature_bone_rename(arm, name, name_flip);
|
||||
|
||||
|
@ -352,7 +353,7 @@ void ED_armature_bones_flip_names(bArmature *arm, ListBase *bones_names)
|
|||
/* ************************************************** */
|
||||
/* Bone Renaming - EditMode */
|
||||
|
||||
static int armature_flip_names_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
static int armature_flip_names_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Object *ob = CTX_data_edit_object(C);
|
||||
bArmature *arm;
|
||||
|
@ -361,6 +362,8 @@ static int armature_flip_names_exec(bContext *C, wmOperator *UNUSED(op))
|
|||
if (ELEM(NULL, ob, ob->pose))
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
const bool do_strip_numbers = RNA_boolean_get(op->ptr, "do_strip_numbers");
|
||||
|
||||
arm = ob->data;
|
||||
|
||||
ListBase bones_names = {NULL};
|
||||
|
@ -371,7 +374,7 @@ static int armature_flip_names_exec(bContext *C, wmOperator *UNUSED(op))
|
|||
}
|
||||
CTX_DATA_END;
|
||||
|
||||
ED_armature_bones_flip_names(arm, &bones_names);
|
||||
ED_armature_bones_flip_names(arm, &bones_names, do_strip_numbers);
|
||||
|
||||
BLI_freelistN(&bones_names);
|
||||
|
||||
|
@ -401,6 +404,10 @@ void ARMATURE_OT_flip_names(wmOperatorType *ot)
|
|||
|
||||
/* flags */
|
||||
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
||||
|
||||
RNA_def_boolean(ot->srna, "do_strip_numbers", false, "Strip Numbers",
|
||||
"Try to remove right-most dot-number from flipped names "
|
||||
"(WARNING: may result in incoherent naming in some cases)");
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -601,7 +601,7 @@ static void pose_copy_menu(Scene *scene)
|
|||
|
||||
/* ********************************************** */
|
||||
|
||||
static int pose_flip_names_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
static int pose_flip_names_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Object *ob = BKE_object_pose_armature_get(CTX_data_active_object(C));
|
||||
bArmature *arm;
|
||||
|
@ -610,6 +610,8 @@ static int pose_flip_names_exec(bContext *C, wmOperator *UNUSED(op))
|
|||
if (ELEM(NULL, ob, ob->pose))
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
const bool do_strip_numbers = RNA_boolean_get(op->ptr, "do_strip_numbers");
|
||||
|
||||
arm = ob->data;
|
||||
|
||||
ListBase bones_names = {NULL};
|
||||
|
@ -620,7 +622,7 @@ static int pose_flip_names_exec(bContext *C, wmOperator *UNUSED(op))
|
|||
}
|
||||
CTX_DATA_END;
|
||||
|
||||
ED_armature_bones_flip_names(arm, &bones_names);
|
||||
ED_armature_bones_flip_names(arm, &bones_names, do_strip_numbers);
|
||||
|
||||
BLI_freelistN(&bones_names);
|
||||
|
||||
|
@ -646,6 +648,10 @@ void POSE_OT_flip_names(wmOperatorType *ot)
|
|||
|
||||
/* flags */
|
||||
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
||||
|
||||
RNA_def_boolean(ot->srna, "do_strip_numbers", false, "Strip Numbers",
|
||||
"Try to remove right-most dot-number from flipped names "
|
||||
"(WARNING: may result in incoherent naming in some cases)");
|
||||
}
|
||||
|
||||
/* ------------------ */
|
||||
|
|
|
@ -186,7 +186,7 @@ void create_vgroups_from_armature(
|
|||
/* if bone is already in list, pass it as param to ignore it */
|
||||
void unique_editbone_name(struct ListBase *ebones, char *name, EditBone *bone);
|
||||
void ED_armature_bone_rename(struct bArmature *arm, const char *oldnamep, const char *newnamep);
|
||||
void ED_armature_bones_flip_names(struct bArmature *arm, struct ListBase *bones_names);
|
||||
void ED_armature_bones_flip_names(struct bArmature *arm, struct ListBase *bones_names, const bool do_strip_numbers);
|
||||
|
||||
void undo_push_armature(struct bContext *C, const char *name);
|
||||
|
||||
|
|
|
@ -3122,6 +3122,7 @@ void node_volume_principled(
|
|||
vec3 scatter_color = color.rgb * color_attribute.rgb;
|
||||
|
||||
scatter_coeff = scatter_color * density;
|
||||
absorption_color.rgb = sqrt(max(absorption_color.rgb, 0.0));
|
||||
absorption_coeff = max(1.0 - scatter_color, 0.0) * max(1.0 - absorption_color.rgb, 0.0) * density;
|
||||
}
|
||||
|
||||
|
|
|
@ -32,8 +32,8 @@
|
|||
static bNodeSocketTemplate sh_node_bsdf_principled_in[] = {
|
||||
{ SOCK_RGBA, 1, N_("Base Color"), 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
|
||||
{ SOCK_FLOAT, 1, N_("Subsurface"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
|
||||
{ SOCK_VECTOR, 1, N_("Subsurface Radius"), 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f},
|
||||
{ SOCK_RGBA, 1, N_("Subsurface Color"), 0.7f, 0.1f, 0.1f, 1.0f, 0.0f, 1.0f},
|
||||
{ SOCK_VECTOR, 1, N_("Subsurface Radius"), 1.0f, 0.2f, 0.1f, 0.0f, 0.0f, 100.0f},
|
||||
{ SOCK_RGBA, 1, N_("Subsurface Color"), 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
|
||||
{ SOCK_FLOAT, 1, N_("Metallic"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
|
||||
{ SOCK_FLOAT, 1, N_("Specular"), 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
|
||||
{ SOCK_FLOAT, 1, N_("Specular Tint"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
|
||||
|
@ -60,7 +60,7 @@ static bNodeSocketTemplate sh_node_bsdf_principled_out[] = {
|
|||
|
||||
static void node_shader_init_principled(bNodeTree *UNUSED(ntree), bNode *node)
|
||||
{
|
||||
node->custom1 = SHD_GLOSSY_MULTI_GGX;
|
||||
node->custom1 = SHD_GLOSSY_GGX;
|
||||
node->custom2 = SHD_SUBSURFACE_BURLEY;
|
||||
}
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
static bNodeSocketTemplate sh_node_subsurface_scattering_in[] = {
|
||||
{ SOCK_RGBA, 1, N_("Color"), 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
|
||||
{ SOCK_FLOAT, 1, N_("Scale"), 1.0, 0.0f, 0.0f, 0.0f, 0.0f, 1000.0f},
|
||||
{ SOCK_VECTOR, 1, N_("Radius"), 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f},
|
||||
{ SOCK_VECTOR, 1, N_("Radius"), 1.0f, 0.2f, 0.1f, 0.0f, 0.0f, 100.0f},
|
||||
{ SOCK_FLOAT, 1, N_("Sharpness"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
|
||||
{ SOCK_FLOAT, 1, N_("Texture Blur"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
|
||||
{ SOCK_VECTOR, 1, N_("Normal"), 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, PROP_NONE, SOCK_HIDE_VALUE},
|
||||
|
|
|
@ -3218,26 +3218,38 @@ static void WM_OT_radial_control(wmOperatorType *ot)
|
|||
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING;
|
||||
|
||||
/* all paths relative to the context */
|
||||
RNA_def_string(ot->srna, "data_path_primary", NULL, 0, "Primary Data Path", "Primary path of property to be set by the radial control");
|
||||
PropertyRNA *prop;
|
||||
prop = RNA_def_string(ot->srna, "data_path_primary", NULL, 0, "Primary Data Path", "Primary path of property to be set by the radial control");
|
||||
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
|
||||
|
||||
RNA_def_string(ot->srna, "data_path_secondary", NULL, 0, "Secondary Data Path", "Secondary path of property to be set by the radial control");
|
||||
prop = RNA_def_string(ot->srna, "data_path_secondary", NULL, 0, "Secondary Data Path", "Secondary path of property to be set by the radial control");
|
||||
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
|
||||
|
||||
RNA_def_string(ot->srna, "use_secondary", NULL, 0, "Use Secondary", "Path of property to select between the primary and secondary data paths");
|
||||
prop = RNA_def_string(ot->srna, "use_secondary", NULL, 0, "Use Secondary", "Path of property to select between the primary and secondary data paths");
|
||||
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
|
||||
|
||||
RNA_def_string(ot->srna, "rotation_path", NULL, 0, "Rotation Path", "Path of property used to rotate the texture display");
|
||||
prop = RNA_def_string(ot->srna, "rotation_path", NULL, 0, "Rotation Path", "Path of property used to rotate the texture display");
|
||||
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
|
||||
|
||||
RNA_def_string(ot->srna, "color_path", NULL, 0, "Color Path", "Path of property used to set the color of the control");
|
||||
prop = RNA_def_string(ot->srna, "color_path", NULL, 0, "Color Path", "Path of property used to set the color of the control");
|
||||
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
|
||||
|
||||
RNA_def_string(ot->srna, "fill_color_path", NULL, 0, "Fill Color Path", "Path of property used to set the fill color of the control");
|
||||
prop = RNA_def_string(ot->srna, "fill_color_path", NULL, 0, "Fill Color Path", "Path of property used to set the fill color of the control");
|
||||
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
|
||||
|
||||
RNA_def_string(ot->srna, "fill_color_override_path", NULL, 0, "Fill Color Override Path", "");
|
||||
RNA_def_string(ot->srna, "fill_color_override_test_path", NULL, 0, "Fill Color Override Test", "");
|
||||
prop = RNA_def_string(ot->srna, "fill_color_override_path", NULL, 0, "Fill Color Override Path", "");
|
||||
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
|
||||
prop = RNA_def_string(ot->srna, "fill_color_override_test_path", NULL, 0, "Fill Color Override Test", "");
|
||||
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
|
||||
|
||||
RNA_def_string(ot->srna, "zoom_path", NULL, 0, "Zoom Path", "Path of property used to set the zoom level for the control");
|
||||
prop = RNA_def_string(ot->srna, "zoom_path", NULL, 0, "Zoom Path", "Path of property used to set the zoom level for the control");
|
||||
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
|
||||
|
||||
RNA_def_string(ot->srna, "image_id", NULL, 0, "Image ID", "Path of ID that is used to generate an image for the control");
|
||||
prop = RNA_def_string(ot->srna, "image_id", NULL, 0, "Image ID", "Path of ID that is used to generate an image for the control");
|
||||
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
|
||||
|
||||
RNA_def_boolean(ot->srna, "secondary_tex", false, "Secondary Texture", "Tweak brush secondary/mask texture");
|
||||
prop = RNA_def_boolean(ot->srna, "secondary_tex", false, "Secondary Texture", "Tweak brush secondary/mask texture");
|
||||
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
|
||||
}
|
||||
|
||||
/* ************************** timer for testing ***************** */
|
||||
|
|
Loading…
Reference in New Issue