[Bf-blender-cvs] [7372ead5edb] hair_guides_grooming: Fix hair fiber prepass shader and add missin HAIR_SHADER define to compile it.
Lukas Tönne
noreply at git.blender.org
Wed Jun 6 22:35:03 CEST 2018
Commit: 7372ead5edbcfa2a4a0d67195ac9d55c47322bfa
Author: Lukas Tönne
Date: Wed Jun 6 21:33:45 2018 +0100
Branches: hair_guides_grooming
https://developer.blender.org/rB7372ead5edbcfa2a4a0d67195ac9d55c47322bfa
Fix hair fiber prepass shader and add missin HAIR_SHADER define to compile it.
===================================================================
M source/blender/draw/engines/eevee/eevee_materials.c
M source/blender/draw/engines/eevee/shaders/prepass_vert.glsl
M source/blender/draw/intern/draw_hair_fibers.c
===================================================================
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index 3ac7ff295be..14b12d748c4 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -1553,7 +1553,8 @@ static void material_hair(
/*DRWShadingGroup *shgrp =*/ DRW_shgroup_hair_fibers_create(scene, ob, hsys, scalp, psl->depth_pass, e_data.default_prepass_hair_fiber_sh);
}
{
- /*DRWShadingGroup *shgrp =*/ DRW_shgroup_hair_fibers_create(scene, ob, hsys, scalp, psl->depth_pass_clip, e_data.default_prepass_hair_fiber_clip_sh);
+ DRWShadingGroup *shgrp = DRW_shgroup_hair_fibers_create(scene, ob, hsys, scalp, psl->depth_pass_clip, e_data.default_prepass_hair_fiber_clip_sh);
+ DRW_shgroup_uniform_block(shgrp, "clip_block", sldata->clip_ubo);
}
{
diff --git a/source/blender/draw/engines/eevee/shaders/prepass_vert.glsl b/source/blender/draw/engines/eevee/shaders/prepass_vert.glsl
index 823a5cd1f08..52192a4ce86 100644
--- a/source/blender/draw/engines/eevee/shaders/prepass_vert.glsl
+++ b/source/blender/draw/engines/eevee/shaders/prepass_vert.glsl
@@ -2,6 +2,8 @@
uniform mat4 ModelViewProjectionMatrix;
uniform mat4 ModelMatrix;
uniform mat4 ModelViewMatrix;
+uniform mat4 ModelViewMatrixInverse;
+uniform mat4 ProjectionMatrix;
/* keep in sync with DRWManager.view_data */
layout(std140) uniform clip_block {
@@ -22,19 +24,24 @@ in vec3 pos;
void main()
{
#ifdef HAIR_SHADER
+ bool is_persp = (ProjectionMatrix[3][3] == 0.0);
#ifdef HAIR_SHADER_FIBERS
- vec3 pos;
- vec3 nor;
- vec2 view_offset;
- hair_fiber_get_vertex(fiber_index, curve_param, ModelViewMatrix, pos, nor, view_offset);
+ float time, thick_time, thickness;
+ vec3 pos, tang, binor;
+ hair_fiber_get_vertex(
+ fiber_index, curve_param,
+ is_persp, ModelViewMatrixInverse[3].xyz, ModelViewMatrixInverse[2].xyz,
+ pos, tang, binor,
+ time, thickness, thick_time);
+
gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
- gl_Position.xy += view_offset * gl_Position.w;
+ vec4 worldPosition = ModelMatrix * vec4(pos, 1.0);
#else
float time, thick_time, thickness;
vec3 pos, tan, binor;
hair_get_pos_tan_binor_time(
- (ProjectionMatrix[3][3] == 0.0),
+ is_persp,
ViewMatrixInverse[3].xyz, ViewMatrixInverse[2].xyz,
pos, tan, binor, time, thickness, thick_time);
diff --git a/source/blender/draw/intern/draw_hair_fibers.c b/source/blender/draw/intern/draw_hair_fibers.c
index 263522538d2..290c478fc90 100644
--- a/source/blender/draw/intern/draw_hair_fibers.c
+++ b/source/blender/draw/intern/draw_hair_fibers.c
@@ -41,7 +41,7 @@ const char* DRW_hair_shader_defines(void)
{
static char str[256];
- BLI_snprintf(str, sizeof(str), "#define HAIR_SHADER_FIBERS\n#define HAIR_SHADER_TEX_WIDTH %d\n",
+ BLI_snprintf(str, sizeof(str), "#define HAIR_SHADER\n#define HAIR_SHADER_FIBERS\n#define HAIR_SHADER_TEX_WIDTH %d\n",
GPU_max_texture_size());
return str;
More information about the Bf-blender-cvs
mailing list