Overlay: Remove use of NormalMatrix
This commit is contained in:
parent
8204675689
commit
c9537ee5c3
|
@ -233,6 +233,7 @@ extern char datatoc_armature_stick_frag_glsl[];
|
|||
extern char datatoc_armature_dof_vert_glsl[];
|
||||
|
||||
extern char datatoc_common_globals_lib_glsl[];
|
||||
extern char datatoc_common_view_lib_glsl[];
|
||||
|
||||
extern char datatoc_gpu_shader_flat_color_frag_glsl[];
|
||||
extern char datatoc_gpu_shader_3D_smooth_color_frag_glsl[];
|
||||
|
@ -826,8 +827,14 @@ DRWShadingGroup *shgroup_instance_bone_shape_outline(DRWPass *pass,
|
|||
if (sh_data->shape_outline == NULL) {
|
||||
const GPUShaderConfigData *sh_cfg_data = &GPU_shader_cfg_data[sh_cfg];
|
||||
sh_data->shape_outline = GPU_shader_create_from_arrays({
|
||||
.vert = (const char *[]){sh_cfg_data->lib, datatoc_armature_shape_outline_vert_glsl, NULL},
|
||||
.geom = (const char *[]){sh_cfg_data->lib, datatoc_armature_shape_outline_geom_glsl, NULL},
|
||||
.vert = (const char *[]){sh_cfg_data->lib,
|
||||
datatoc_common_view_lib_glsl,
|
||||
datatoc_armature_shape_outline_vert_glsl,
|
||||
NULL},
|
||||
.geom = (const char *[]){sh_cfg_data->lib,
|
||||
datatoc_common_view_lib_glsl,
|
||||
datatoc_armature_shape_outline_geom_glsl,
|
||||
NULL},
|
||||
.frag = (const char *[]){datatoc_gpu_shader_flat_color_frag_glsl, NULL},
|
||||
.defs = (const char *[]){sh_cfg_data->def, NULL},
|
||||
});
|
||||
|
@ -857,7 +864,10 @@ DRWShadingGroup *shgroup_instance_bone_shape_solid(DRWPass *pass,
|
|||
if (sh_data->shape_solid == NULL) {
|
||||
const GPUShaderConfigData *sh_cfg_data = &GPU_shader_cfg_data[sh_cfg];
|
||||
sh_data->shape_solid = GPU_shader_create_from_arrays({
|
||||
.vert = (const char *[]){sh_cfg_data->lib, datatoc_armature_shape_solid_vert_glsl, NULL},
|
||||
.vert = (const char *[]){sh_cfg_data->lib,
|
||||
datatoc_common_view_lib_glsl,
|
||||
datatoc_armature_shape_solid_vert_glsl,
|
||||
NULL},
|
||||
.frag = (const char *[]){datatoc_armature_shape_solid_frag_glsl, NULL},
|
||||
.defs = (const char *[]){sh_cfg_data->def, NULL},
|
||||
});
|
||||
|
|
|
@ -60,6 +60,7 @@ extern char datatoc_edit_mesh_overlay_mesh_analysis_vert_glsl[];
|
|||
extern char datatoc_edit_normals_vert_glsl[];
|
||||
extern char datatoc_edit_normals_geom_glsl[];
|
||||
extern char datatoc_common_globals_lib_glsl[];
|
||||
extern char datatoc_common_view_lib_glsl[];
|
||||
|
||||
extern char datatoc_gpu_shader_uniform_color_frag_glsl[];
|
||||
extern char datatoc_gpu_shader_3D_smooth_color_frag_glsl[];
|
||||
|
@ -207,6 +208,7 @@ static void EDIT_MESH_engine_init(void *vedata)
|
|||
|
||||
char *lib = BLI_string_joinN(sh_cfg_data->lib,
|
||||
datatoc_common_globals_lib_glsl,
|
||||
datatoc_common_view_lib_glsl,
|
||||
datatoc_edit_mesh_overlay_common_lib_glsl);
|
||||
/* Use geometry shader to draw edge wireframe. This ensure us
|
||||
* the same result accross platforms and more flexibility. But
|
||||
|
@ -265,27 +267,31 @@ static void EDIT_MESH_engine_init(void *vedata)
|
|||
sh_data->overlay_mix = DRW_shader_create_fullscreen(datatoc_edit_mesh_overlay_mix_frag_glsl,
|
||||
NULL);
|
||||
|
||||
lib = BLI_string_joinN(sh_cfg_data->lib, datatoc_common_view_lib_glsl);
|
||||
|
||||
sh_data->normals_face = GPU_shader_create_from_arrays({
|
||||
.vert = (const char *[]){sh_cfg_data->lib, datatoc_edit_normals_vert_glsl, NULL},
|
||||
.geom = (const char *[]){sh_cfg_data->lib, datatoc_edit_normals_geom_glsl, NULL},
|
||||
.vert = (const char *[]){lib, datatoc_edit_normals_vert_glsl, NULL},
|
||||
.geom = (const char *[]){lib, datatoc_edit_normals_geom_glsl, NULL},
|
||||
.frag = (const char *[]){datatoc_gpu_shader_uniform_color_frag_glsl, NULL},
|
||||
.defs = (const char *[]){sh_cfg_data->def, "#define FACE_NORMALS\n", NULL},
|
||||
});
|
||||
|
||||
sh_data->normals_loop = GPU_shader_create_from_arrays({
|
||||
.vert = (const char *[]){sh_cfg_data->lib, datatoc_edit_normals_vert_glsl, NULL},
|
||||
.geom = (const char *[]){sh_cfg_data->lib, datatoc_edit_normals_geom_glsl, NULL},
|
||||
.vert = (const char *[]){lib, datatoc_edit_normals_vert_glsl, NULL},
|
||||
.geom = (const char *[]){lib, datatoc_edit_normals_geom_glsl, NULL},
|
||||
.frag = (const char *[]){datatoc_gpu_shader_uniform_color_frag_glsl, NULL},
|
||||
.defs = (const char *[]){sh_cfg_data->def, "#define LOOP_NORMALS\n", NULL},
|
||||
});
|
||||
|
||||
sh_data->normals = GPU_shader_create_from_arrays({
|
||||
.vert = (const char *[]){sh_cfg_data->lib, datatoc_edit_normals_vert_glsl, NULL},
|
||||
.geom = (const char *[]){sh_cfg_data->lib, datatoc_edit_normals_geom_glsl, NULL},
|
||||
.vert = (const char *[]){lib, datatoc_edit_normals_vert_glsl, NULL},
|
||||
.geom = (const char *[]){lib, datatoc_edit_normals_geom_glsl, NULL},
|
||||
.frag = (const char *[]){datatoc_gpu_shader_uniform_color_frag_glsl, NULL},
|
||||
.defs = (const char *[]){sh_cfg_data->def, NULL},
|
||||
});
|
||||
|
||||
MEM_freeN(lib);
|
||||
|
||||
/* Mesh Analysis */
|
||||
sh_data->mesh_analysis_face = GPU_shader_create_from_arrays({
|
||||
.vert = (const char *[]){sh_cfg_data->lib,
|
||||
|
|
|
@ -9,7 +9,6 @@ in vec2 ssNor[];
|
|||
in vec4 vColSize[];
|
||||
|
||||
flat out vec4 finalColor;
|
||||
uniform mat4 ProjectionMatrix;
|
||||
uniform vec2 viewportSize;
|
||||
uniform float lineThickness = 2.0;
|
||||
|
||||
|
|
|
@ -1,8 +1,4 @@
|
|||
|
||||
uniform mat3 NormalMatrix;
|
||||
|
||||
uniform mat4 ViewMatrix;
|
||||
uniform mat4 ProjectionMatrix;
|
||||
uniform vec2 viewportSize;
|
||||
|
||||
/* ---- Instantiated Attrs ---- */
|
||||
|
@ -27,20 +23,19 @@ vec2 proj(vec4 pos)
|
|||
|
||||
void main()
|
||||
{
|
||||
/* This is slow and run per vertex, but it's still faster than
|
||||
* doing it per instance on CPU and sending it on via instance attribute. */
|
||||
mat3 NormalMatrix = transpose(inverse(mat3(ViewMatrix * InstanceModelMatrix)));
|
||||
|
||||
vec4 worldPosition = InstanceModelMatrix * vec4(pos, 1.0);
|
||||
vec4 viewpos = ViewMatrix * worldPosition;
|
||||
|
||||
vPos = viewpos.xyz;
|
||||
pPos = ProjectionMatrix * viewpos;
|
||||
|
||||
/* This is slow and run per vertex, but it's still faster than
|
||||
* doing it per instance on CPU and sending it on via instance attribute. */
|
||||
mat3 normal_mat = transpose(inverse(mat3(InstanceModelMatrix)));
|
||||
/* TODO FIX: there is still a problem with this vector
|
||||
* when the bone is scaled or in persp mode. But it's
|
||||
* barelly visible at the outline corners. */
|
||||
ssNor = normalize((NormalMatrix * snor).xy);
|
||||
ssNor = normalize(transform_normal_world_to_view(normal_mat * snor).xy);
|
||||
|
||||
ssPos = proj(pPos);
|
||||
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
|
||||
uniform mat3 NormalMatrix;
|
||||
uniform mat4 ViewMatrixInverse;
|
||||
uniform mat4 ViewProjectionMatrix;
|
||||
|
||||
uniform mat4 ViewMatrix;
|
||||
uniform mat4 ProjectionMatrix;
|
||||
|
||||
/* ---- Instantiated Attrs ---- */
|
||||
in vec3 pos;
|
||||
in vec3 nor;
|
||||
|
@ -19,8 +12,10 @@ out vec4 finalColor;
|
|||
|
||||
void main()
|
||||
{
|
||||
mat3 NormalMatrix = transpose(inverse(mat3(ViewMatrix * InstanceModelMatrix)));
|
||||
vec3 normal = normalize(NormalMatrix * nor);
|
||||
/* This is slow and run per vertex, but it's still faster than
|
||||
* doing it per instance on CPU and sending it on via instance attribute. */
|
||||
mat3 normal_mat = transpose(inverse(mat3(InstanceModelMatrix)));
|
||||
vec3 normal = normalize(transform_normal_world_to_view(normal_mat * nor));
|
||||
|
||||
/* Do lighting at an angle to avoid flat shading on front facing bone. */
|
||||
const vec3 light = vec3(0.1, 0.1, 0.8);
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
|
||||
uniform mat3 NormalMatrix;
|
||||
uniform mat4 ProjectionMatrix;
|
||||
uniform mat4 ModelViewMatrix;
|
||||
uniform mat4 ModelViewProjectionMatrix;
|
||||
uniform mat4 ModelMatrix;
|
||||
uniform mat4 ModelMatrixInverse;
|
||||
|
||||
uniform float faceAlphaMod;
|
||||
uniform ivec4 dataMask = ivec4(0xFF);
|
||||
uniform float ofs;
|
||||
|
@ -77,7 +77,7 @@ void main()
|
|||
#if !defined(FACE)
|
||||
/* Facing based color blend */
|
||||
vec4 vpos = ModelViewMatrix * vec4(pos, 1.0);
|
||||
vec3 view_normal = normalize(NormalMatrix * vnor + 1e-4);
|
||||
vec3 view_normal = normalize(transform_normal_object_to_view(vnor) + 1e-4);
|
||||
vec3 view_vec = (ProjectionMatrix[3][3] == 0.0) ? normalize(vpos.xyz) : vec3(0.0, 0.0, 1.0);
|
||||
float facing = dot(view_vec, view_normal);
|
||||
facing = 1.0 - abs(facing) * 0.2;
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
|
||||
uniform mat4 ModelViewProjectionMatrix;
|
||||
uniform mat3 NormalMatrix;
|
||||
uniform mat4 ProjectionMatrix;
|
||||
uniform mat4 ModelMatrix;
|
||||
uniform mat4 ModelMatrixInverse;
|
||||
|
||||
uniform float normalSize;
|
||||
|
||||
in vec3 pos;
|
||||
|
@ -26,7 +26,7 @@ flat out vec4 v2;
|
|||
void main()
|
||||
{
|
||||
v1 = ModelViewProjectionMatrix * vec4(pos, 1.0);
|
||||
vec3 n = normalize(NormalMatrix * nor); /* viewspace */
|
||||
vec3 n = normalize(transform_normal_object_to_view(nor));
|
||||
v2 = v1 + ProjectionMatrix * vec4(n * normalSize, 0.0);
|
||||
#ifdef USE_WORLD_CLIP_PLANES
|
||||
world_clip_planes_calc_clip_distance((ModelMatrix * vec4(pos, 1.0)).xyz);
|
||||
|
|
Loading…
Reference in New Issue