Eevee: Draw background shader.
Also fixes some remaining errors caused by some matrices not updated.
This commit is contained in:
@@ -624,6 +624,8 @@ static void codegen_call_functions(DynStr *ds, ListBase *nodes, GPUOutput *final
|
||||
else if (input->source == GPU_SOURCE_BUILTIN) {
|
||||
if (input->builtin == GPU_INVERSE_VIEW_MATRIX)
|
||||
BLI_dynstr_append(ds, "viewinv");
|
||||
else if (input->builtin == GPU_INVERSE_OBJECT_MATRIX)
|
||||
BLI_dynstr_append(ds, "objinv");
|
||||
else if (input->builtin == GPU_VIEW_POSITION)
|
||||
BLI_dynstr_append(ds, "viewposition");
|
||||
else if (input->builtin == GPU_VIEW_NORMAL)
|
||||
@@ -691,6 +693,8 @@ static char *code_generate_fragment(ListBase *nodes, GPUOutput *output, bool use
|
||||
BLI_dynstr_append(ds, "void main()\n{\n");
|
||||
|
||||
if (use_new_shading) {
|
||||
if (builtins & GPU_INVERSE_OBJECT_MATRIX)
|
||||
BLI_dynstr_append(ds, "\tmat4 objinv = ModelMatrixInverse;\n");
|
||||
if (builtins & GPU_INVERSE_VIEW_MATRIX)
|
||||
BLI_dynstr_append(ds, "\tmat4 viewinv = ViewMatrixInverse;\n");
|
||||
if (builtins & GPU_VIEW_NORMAL)
|
||||
@@ -700,6 +704,8 @@ static char *code_generate_fragment(ListBase *nodes, GPUOutput *output, bool use
|
||||
|
||||
}
|
||||
else {
|
||||
if (builtins & GPU_INVERSE_OBJECT_MATRIX)
|
||||
BLI_dynstr_append(ds, "\tmat4 objinv = unfinvobmat;\n");
|
||||
if (builtins & GPU_INVERSE_VIEW_MATRIX)
|
||||
BLI_dynstr_append(ds, "\tmat4 viewinv = unfinvviewmat;\n");
|
||||
if (builtins & GPU_VIEW_NORMAL)
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
|
||||
uniform mat4 ModelViewMatrix;
|
||||
#ifndef PROBE_CAPTURE
|
||||
#ifndef WORLD_BACKGROUND
|
||||
uniform mat4 ProjectionMatrix;
|
||||
#endif
|
||||
#endif
|
||||
uniform mat4 ModelMatrixInverse;
|
||||
uniform mat4 ModelViewMatrixInverse;
|
||||
uniform mat4 ViewMatrixInverse;
|
||||
uniform mat4 ProjectionMatrixInverse;
|
||||
@@ -2816,10 +2819,20 @@ void background_transform_to_world(vec3 viewvec, out vec3 worldvec)
|
||||
worldvec = (ModelViewMatrixInverse * co).xyz;
|
||||
}
|
||||
|
||||
#ifdef PROBE_CAPTURE
|
||||
#if defined(PROBE_CAPTURE) || defined(WORLD_BACKGROUND)
|
||||
void environment_default_vector(out vec3 worldvec)
|
||||
{
|
||||
#ifdef WORLD_BACKGROUND
|
||||
vec4 v = (ProjectionMatrix[3][3] == 0.0) ? vec4(viewPosition, 1.0) : vec4(0.0, 0.0, 1.0, 1.0);
|
||||
vec4 co_homogenous = (ProjectionMatrixInverse * v);
|
||||
|
||||
vec4 co = vec4(co_homogenous.xyz / co_homogenous.w, 0.0);
|
||||
|
||||
co = normalize(co);
|
||||
worldvec = (ViewMatrixInverse * co).xyz;
|
||||
#else
|
||||
worldvec = normalize(worldPosition);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -2951,7 +2964,12 @@ void node_tex_coord_background(
|
||||
vec4 co = vec4(co_homogenous.xyz / co_homogenous.w, 0.0);
|
||||
|
||||
co = normalize(co);
|
||||
|
||||
#ifdef PROBE_CAPTURE
|
||||
vec3 coords = normalize(worldPosition);
|
||||
#else
|
||||
vec3 coords = (ModelViewMatrixInverse * co).xyz;
|
||||
#endif
|
||||
|
||||
generated = coords;
|
||||
normal = -coords;
|
||||
@@ -2966,6 +2984,10 @@ void node_tex_coord_background(
|
||||
reflection = -coords;
|
||||
}
|
||||
|
||||
#if defined(WORLD_BACKGROUND) || defined(PROBE_CAPTURE)
|
||||
#define node_tex_coord node_tex_coord_background
|
||||
#endif
|
||||
|
||||
/* textures */
|
||||
|
||||
float calc_gradient(vec3 p, int gradient_type)
|
||||
|
||||
Reference in New Issue
Block a user