[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