Workbench: Combine Xray Alpha with object/material alpha ...
... instead of overiding it (previous behavior). In practice it's not really noticeable. This means an object with alpha will never be more opaque when enabling xray.
This commit is contained in:
parent
c2a762c8e6
commit
2002b29ecd
|
@ -24,6 +24,8 @@
|
|||
|
||||
#include "DNA_userdef_types.h"
|
||||
|
||||
#include "ED_view3d.h"
|
||||
|
||||
#include "UI_resources.h"
|
||||
|
||||
#include "GPU_batch.h"
|
||||
|
@ -55,6 +57,7 @@ void workbench_private_data_init(WORKBENCH_PrivateData *wpd)
|
|||
wpd->shading = v3d->shading;
|
||||
wpd->use_color_render_settings = false;
|
||||
}
|
||||
wpd->shading.xray_alpha = XRAY_ALPHA(v3d);
|
||||
|
||||
wpd->use_color_management = BKE_scene_check_color_management_enabled(scene);
|
||||
|
||||
|
|
|
@ -451,6 +451,8 @@ void workbench_deferred_engine_init(WORKBENCH_Data *vedata)
|
|||
WORKBENCH_PrivateData *wpd = stl->g_data;
|
||||
workbench_private_data_init(wpd);
|
||||
|
||||
wpd->shading.xray_alpha = 1.0f;
|
||||
|
||||
workbench_dof_engine_init(vedata, camera);
|
||||
|
||||
if (OIT_ENABLED(wpd)) {
|
||||
|
@ -987,8 +989,6 @@ void workbench_deferred_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob)
|
|||
int color_type = workbench_material_determine_color_type(
|
||||
wpd, image, ob, use_sculpt_pbvh);
|
||||
if (color_type == V3D_SHADING_MATERIAL_COLOR && mat && mat->a < 1.0) {
|
||||
/* Hack */
|
||||
wpd->shading.xray_alpha = mat->a;
|
||||
material = workbench_forward_get_or_create_material_data(
|
||||
vedata, ob, mat, image, iuser, color_type, 0, use_sculpt_pbvh);
|
||||
has_transp_mat = true;
|
||||
|
@ -1009,8 +1009,6 @@ void workbench_deferred_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob)
|
|||
int color_type = workbench_material_determine_color_type(wpd, NULL, ob, use_sculpt_pbvh);
|
||||
|
||||
if ((ob->color[3] < 1.0f) && (color_type == V3D_SHADING_OBJECT_COLOR)) {
|
||||
/* Hack */
|
||||
wpd->shading.xray_alpha = ob->color[3];
|
||||
material = workbench_forward_get_or_create_material_data(
|
||||
vedata, ob, NULL, NULL, NULL, color_type, 0, use_sculpt_pbvh);
|
||||
has_transp_mat = true;
|
||||
|
@ -1046,8 +1044,6 @@ void workbench_deferred_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob)
|
|||
for (int i = 0; i < materials_len; ++i) {
|
||||
struct Material *mat = give_current_material(ob, i + 1);
|
||||
if (mat != NULL && mat->a < 1.0f) {
|
||||
/* Hack */
|
||||
wpd->shading.xray_alpha = mat->a;
|
||||
material = workbench_forward_get_or_create_material_data(
|
||||
vedata, ob, mat, NULL, NULL, V3D_SHADING_MATERIAL_COLOR, 0, use_sculpt_pbvh);
|
||||
has_transp_mat = true;
|
||||
|
@ -1071,8 +1067,6 @@ void workbench_deferred_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob)
|
|||
if (geoms != NULL && geoms[i] != NULL) {
|
||||
Material *mat = give_current_material(ob, i + 1);
|
||||
if (mat != NULL && mat->a < 1.0f) {
|
||||
/* Hack */
|
||||
wpd->shading.xray_alpha = mat->a;
|
||||
material = workbench_forward_get_or_create_material_data(
|
||||
vedata, ob, mat, NULL, NULL, V3D_SHADING_MATERIAL_COLOR, 0, use_sculpt_pbvh);
|
||||
has_transp_mat = true;
|
||||
|
|
|
@ -178,7 +178,7 @@ WORKBENCH_MaterialData *workbench_forward_get_or_create_material_data(WORKBENCH_
|
|||
wpd->transparent_accum_uniform_sh,
|
||||
psl->transparent_accum_pass);
|
||||
DRW_shgroup_uniform_block(grp, "world_block", wpd->world_ubo);
|
||||
DRW_shgroup_uniform_float_copy(grp, "alpha", wpd->shading.xray_alpha);
|
||||
DRW_shgroup_uniform_float_copy(grp, "alpha", material_template.alpha);
|
||||
DRW_shgroup_uniform_vec4(grp, "viewvecs[0]", (float *)wpd->viewvecs, 3);
|
||||
workbench_material_copy(material, &material_template);
|
||||
if (STUDIOLIGHT_TYPE_MATCAP_ENABLED(wpd)) {
|
||||
|
|
|
@ -53,6 +53,7 @@ void workbench_material_update_data(WORKBENCH_PrivateData *wpd,
|
|||
copy_v3_fl3(data->specular_color, 0.05f, 0.05f, 0.05f); /* Dielectric: 5% reflective. */
|
||||
data->metallic = 0.0f;
|
||||
data->roughness = 0.632455532f; /* sqrtf(0.4f); */
|
||||
data->alpha = wpd->shading.xray_alpha;
|
||||
|
||||
if (color_type == V3D_SHADING_SINGLE_COLOR) {
|
||||
copy_v3_v3(data->diffuse_color, wpd->shading.single_color);
|
||||
|
@ -72,10 +73,12 @@ void workbench_material_update_data(WORKBENCH_PrivateData *wpd,
|
|||
else if (ELEM(color_type, V3D_SHADING_OBJECT_COLOR, V3D_SHADING_VERTEX_COLOR)) {
|
||||
copy_v3_v3(data->diffuse_color, ob->color);
|
||||
copy_v3_v3(data->base_color, data->diffuse_color);
|
||||
data->alpha *= ob->color[3];
|
||||
}
|
||||
else {
|
||||
/* V3D_SHADING_MATERIAL_COLOR */
|
||||
if (mat) {
|
||||
data->alpha *= mat->a;
|
||||
if (SPECULAR_HIGHLIGHT_ENABLED(wpd)) {
|
||||
copy_v3_v3(data->base_color, &mat->r);
|
||||
mul_v3_v3fl(data->diffuse_color, &mat->r, 1.0f - mat->metallic);
|
||||
|
|
|
@ -286,6 +286,7 @@ typedef struct WORKBENCH_MaterialData {
|
|||
float base_color[3];
|
||||
float diffuse_color[3];
|
||||
float specular_color[3];
|
||||
float alpha;
|
||||
float metallic;
|
||||
float roughness;
|
||||
int object_id;
|
||||
|
|
Loading…
Reference in New Issue