The BGE tracker has a bug report referencing this commit. It appears to cause problems if users set custom normals: [#36255] Inverted custom vertex normal's<https://projects.blender.org/tracker/index.php?func=detail&aid=36255&group_id=9&atid=306>
I am not sure if there is a way we can detect if the user is already controlling normals and not bother flipping them, or possibly adding a UI option to toggle this flipping. Regards, Daniel Stokes On Mon, Jun 24, 2013 at 6:46 AM, Brecht Van Lommel < [email protected]> wrote: > Revision: 57702 > > http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57702 > Author: blendix > Date: 2013-06-24 13:46:34 +0000 (Mon, 24 Jun 2013) > Log Message: > ----------- > Fix GLSL not showing shading properly on the backside of faces. Now it > flips > the normal towards the viewer, seems to give consistent results with > blender > internal, cycles, normal maps, etc. > > Started from patch #32761 by Vitor Balbio, but changed it to do normal > flipping > earlier so it solves all cases. > > Modified Paths: > -------------- > trunk/blender/source/blender/gpu/intern/gpu_codegen.c > trunk/blender/source/blender/gpu/shaders/gpu_shader_material.glsl > > Modified: trunk/blender/source/blender/gpu/intern/gpu_codegen.c > =================================================================== > --- trunk/blender/source/blender/gpu/intern/gpu_codegen.c 2013-06-24 > 13:45:35 UTC (rev 57701) > +++ trunk/blender/source/blender/gpu/intern/gpu_codegen.c 2013-06-24 > 13:46:34 UTC (rev 57702) > @@ -461,7 +461,7 @@ > BLI_ghash_free(definehash, NULL, NULL); > } > > -static void codegen_print_uniforms_functions(DynStr *ds, ListBase *nodes) > +static int codegen_print_uniforms_functions(DynStr *ds, ListBase *nodes) > { > GPUNode *node; > GPUInput *input; > @@ -516,6 +516,8 @@ > } > > BLI_dynstr_append(ds, "\n"); > + > + return builtins; > } > > static void codegen_declare_tmps(DynStr *ds, ListBase *nodes) > @@ -564,8 +566,12 @@ > codegen_convert_datatype(ds, > input->link->output->type, input->type, > "tmp", input->link->output->id); > } > - else if (input->source == GPU_SOURCE_BUILTIN) > - BLI_dynstr_appendf(ds, "%s", > GPU_builtin_name(input->builtin)); > + else if (input->source == GPU_SOURCE_BUILTIN) { > + if(input->builtin == GPU_VIEW_NORMAL) > + BLI_dynstr_append(ds, > "facingnormal"); > + else > + BLI_dynstr_append(ds, > GPU_builtin_name(input->builtin)); > + } > else if (input->source == GPU_SOURCE_VEC_UNIFORM) { > if (input->dynamicvec) > BLI_dynstr_appendf(ds, "unf%d", > input->id); > @@ -596,11 +602,12 @@ > { > DynStr *ds = BLI_dynstr_new(); > char *code; > + int builtins; > > /*BLI_dynstr_append(ds, FUNCTION_PROTOTYPES);*/ > > codegen_set_unique_ids(nodes); > - codegen_print_uniforms_functions(ds, nodes); > + builtins = codegen_print_uniforms_functions(ds, nodes); > > //if (G.debug & G_DEBUG) > // BLI_dynstr_appendf(ds, "/* %s */\n", name); > @@ -608,6 +615,10 @@ > BLI_dynstr_append(ds, "void main(void)\n"); > BLI_dynstr_append(ds, "{\n"); > > + if(builtins & GPU_VIEW_NORMAL) > + BLI_dynstr_append(ds, "\tvec3 facingnormal = > (gl_FrontFacing)? varnormal: -varnormal;\n"); > + > + > codegen_declare_tmps(ds, nodes); > codegen_call_functions(ds, nodes, output); > > > Modified: trunk/blender/source/blender/gpu/shaders/gpu_shader_material.glsl > =================================================================== > --- trunk/blender/source/blender/gpu/shaders/gpu_shader_material.glsl > 2013-06-24 13:45:35 UTC (rev 57701) > +++ trunk/blender/source/blender/gpu/shaders/gpu_shader_material.glsl > 2013-06-24 13:46:34 UTC (rev 57702) > @@ -147,7 +147,7 @@ > normal = -normalize(nor); /* blender render normal is > negated */ > vcol_attribute(attvcol, vcol); > vcol_alpha = attvcol.a; > - frontback = 1.0; > + frontback = (gl_FrontFacing)? 1.0: 0.0; > } > > void mapping(vec3 vec, mat4 mat, vec3 minvec, vec3 maxvec, float domin, > float domax, out vec3 outvec) > @@ -2116,7 +2116,7 @@ > void node_fresnel(float ior, vec3 N, vec3 I, out float result) > { > float eta = max(ior, 0.00001); > - result = fresnel_dielectric(I, N, eta); //backfacing() ? 1.0/eta: > eta); > + result = fresnel_dielectric(I, N, (gl_FrontFacing)? eta: 1.0/eta); > } > > /* geometry */ > @@ -2139,7 +2139,7 @@ > true_normal = N; > incoming = I; > parametric = vec3(0.0); > - backfacing = 0.0; > + backfacing = (gl_FrontFacing)? 0.0: 1.0; > } > > void node_tex_coord(vec3 I, vec3 N, mat4 viewinvmat, mat4 obinvmat, > > _______________________________________________ > Bf-blender-cvs mailing list > [email protected] > http://lists.blender.org/mailman/listinfo/bf-blender-cvs > _______________________________________________ Bf-committers mailing list [email protected] http://lists.blender.org/mailman/listinfo/bf-committers
