Edit Mesh: Make "fresnel effect" not transparent but mix between 2 colors

Alpha blending is causing too many issues.
Revert back to something simpler.
This commit is contained in:
2018-12-10 18:30:37 +01:00
parent 834bf357c8
commit 8e37eb10a1
6 changed files with 12 additions and 2 deletions

View File

@@ -87,6 +87,10 @@ void DRW_globals_update(void)
UI_GetThemeColor4fv(TH_FACE_DOT, ts.colorFaceDot);
UI_GetThemeColor4fv(TH_BACK, ts.colorBackground);
/* Custom median color to slightly affect the edit mesh colors. */
interp_v4_v4v4(ts.colorEditMeshMiddle, ts.colorVertexSelect, ts.colorWireEdit, 0.35f);
copy_v3_fl(ts.colorEditMeshMiddle, dot_v3v3(ts.colorEditMeshMiddle, (float[3]){0.3333f, 0.3333f, 0.3333f})); /* Desaturate */
#ifdef WITH_FREESTYLE
UI_GetThemeColor4fv(TH_FREESTYLE_EDGE_MARK, ts.colorEdgeFreestyle);
UI_GetThemeColor4fv(TH_FREESTYLE_FACE_MARK, ts.colorFaceFreestyle);

View File

@@ -80,6 +80,7 @@ typedef struct GlobalsUboStorage {
float colorLampNoAlpha[4];
float colorBackground[4];
float colorEditMeshMiddle[4];
float colorHandleFree[4];
float colorHandleAuto[4];

View File

@@ -360,12 +360,14 @@ static DRWPass *edit_mesh_create_overlay_pass(
DRW_shgroup_uniform_vec2(*r_lverts_shgrp, "viewportSize", DRW_viewport_size_get(), 1);
DRW_shgroup_uniform_float(*r_lverts_shgrp, "edgeScale", edge_width_scale, 1);
DRW_shgroup_state_enable(*r_lverts_shgrp, DRW_STATE_WRITE_DEPTH);
DRW_shgroup_state_disable(*r_lverts_shgrp, DRW_STATE_BLEND);
*r_verts_shgrp = DRW_shgroup_create(e_data.overlay_vert_sh, pass);
DRW_shgroup_uniform_block(*r_verts_shgrp, "globalsBlock", globals_ubo);
DRW_shgroup_uniform_vec2(*r_verts_shgrp, "viewportSize", DRW_viewport_size_get(), 1);
DRW_shgroup_uniform_float(*r_verts_shgrp, "edgeScale", edge_width_scale, 1);
DRW_shgroup_state_enable(*r_verts_shgrp, DRW_STATE_WRITE_DEPTH);
DRW_shgroup_state_disable(*r_verts_shgrp, DRW_STATE_BLEND);
}
if ((tsettings->selectmode & SCE_SELECT_FACE) != 0) {

View File

@@ -36,6 +36,7 @@ layout(std140) uniform globalsBlock {
vec4 colorLampNoAlpha;
vec4 colorBackground;
vec4 colorEditMeshMiddle;
vec4 colorHandleFree;
vec4 colorHandleAuto;

View File

@@ -144,7 +144,7 @@ void main()
#endif
#ifdef VERTEX_FACING
FragColor.a *= 1.0 - abs(facing) * 0.4;
FragColor.rgb = mix(colorEditMeshMiddle.rgb, FragColor.rgb, 1.0 - abs(facing) * 0.4);
#endif
/* don't write depth if not opaque */

View File

@@ -38,8 +38,10 @@ void main()
? normalize(vPos.xyz)
: vec3(0.0, 0.0, 1.0);
float facing = dot(view_vec, view_normal);
facing = 1.0 - abs(facing) * 0.4;
finalColor.a *= 1.0 - abs(facing) * 0.4;
finalColor = mix(colorEditMeshMiddle, finalColor, facing);
finalColor.a = 1.0;
#endif
if ((data.x & VERTEX_EXISTS) == 0) {