Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2019-03-20 16:32:42 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-03-20 16:51:06 +0300
commitf391362f8cde96fa06a64c45194c68d36639bd17 (patch)
treef0dc940d76dffff974634af6ba7790f2cb7ec703 /source/blender/draw/engines
parent6d6020753739c7ffea7c00ff2e024a978bfaf3b0 (diff)
Fix T60190 Z-fighting with (Culled) Backface
Create a separate pass for backface culled objects.
Diffstat (limited to 'source/blender/draw/engines')
-rw-r--r--source/blender/draw/engines/eevee/eevee_engine.c1
-rw-r--r--source/blender/draw/engines/eevee/eevee_lightprobes.c4
-rw-r--r--source/blender/draw/engines/eevee/eevee_materials.c7
-rw-r--r--source/blender/draw/engines/eevee/eevee_private.h2
-rw-r--r--source/blender/draw/engines/eevee/eevee_render.c1
-rw-r--r--source/blender/draw/engines/eevee/eevee_subsurface.c1
6 files changed, 14 insertions, 2 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c
index 50062088dbe..49cc8e8b791 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -269,6 +269,7 @@ static void eevee_draw_background(void *vedata)
}
EEVEE_draw_default_passes(psl);
DRW_draw_pass(psl->material_pass);
+ DRW_draw_pass(psl->material_pass_cull);
EEVEE_subsurface_data_render(sldata, vedata);
DRW_stats_group_end();
diff --git a/source/blender/draw/engines/eevee/eevee_lightprobes.c b/source/blender/draw/engines/eevee/eevee_lightprobes.c
index c0dd9a81313..b0e0a986630 100644
--- a/source/blender/draw/engines/eevee/eevee_lightprobes.c
+++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c
@@ -833,7 +833,9 @@ static void lightbake_render_scene_face(int face, EEVEE_BakeRenderData *user_dat
DRW_draw_pass(psl->depth_pass_cull);
DRW_draw_pass(psl->probe_background);
DRW_draw_pass(psl->material_pass);
+ DRW_draw_pass(psl->material_pass_cull);
DRW_draw_pass(psl->sss_pass); /* Only output standard pass */
+ DRW_draw_pass(psl->sss_pass_cull);
EEVEE_draw_default_passes(psl);
}
@@ -911,7 +913,9 @@ static void lightbake_render_scene_reflected(int layer, EEVEE_BakeRenderData *us
/* Shading pass */
EEVEE_draw_default_passes(psl);
DRW_draw_pass(psl->material_pass);
+ DRW_draw_pass(psl->material_pass_cull);
DRW_draw_pass(psl->sss_pass); /* Only output standard pass */
+ DRW_draw_pass(psl->sss_pass_cull);
DRW_draw_pass(psl->refract_pass);
/* Transparent */
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index cfe493cf3e4..94f484cd4d1 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -1037,7 +1037,8 @@ void EEVEE_materials_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
{
DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL | DRW_STATE_CLIP_PLANES | DRW_STATE_WIRE;
- psl->material_pass = DRW_pass_create("Material Shader Pass", state);
+ psl->material_pass = DRW_pass_create("Material Pass", state);
+ psl->material_pass_cull = DRW_pass_create("Material Pass Cull", state | DRW_STATE_CULL_BACK);
}
{
@@ -1075,6 +1076,7 @@ void EEVEE_materials_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL | DRW_STATE_CLIP_PLANES |
DRW_STATE_WIRE | DRW_STATE_WRITE_STENCIL);
psl->sss_pass = DRW_pass_create("Subsurface Pass", state);
+ psl->sss_pass_cull = DRW_pass_create("Subsurface Pass Cull", state | DRW_STATE_CULL_BACK);
e_data.sss_count = 0;
}
@@ -1230,7 +1232,8 @@ static void material_opaque(
*shgrp = DRW_shgroup_material_create(
*gpumat,
(use_ssrefract) ? psl->refract_pass :
- (use_sss) ? psl->sss_pass : psl->material_pass);
+ (use_sss) ? ((do_cull) ? psl->sss_pass_cull : psl->sss_pass)
+ : ((do_cull) ? psl->material_pass_cull : psl->material_pass));
add_standard_uniforms(*shgrp, sldata, vedata, ssr_id, &ma->refract_depth,
use_diffuse, use_glossy, use_refract, use_ssrefract, false);
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index c9ae245c550..25902bce62d 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -253,7 +253,9 @@ typedef struct EEVEE_PassList {
struct DRWPass *refract_depth_pass_clip_cull;
struct DRWPass *default_pass[VAR_MAT_MAX];
struct DRWPass *sss_pass;
+ struct DRWPass *sss_pass_cull;
struct DRWPass *material_pass;
+ struct DRWPass *material_pass_cull;
struct DRWPass *refract_pass;
struct DRWPass *transparent_pass;
struct DRWPass *background_pass;
diff --git a/source/blender/draw/engines/eevee/eevee_render.c b/source/blender/draw/engines/eevee/eevee_render.c
index b7b592decd0..158b008bc14 100644
--- a/source/blender/draw/engines/eevee/eevee_render.c
+++ b/source/blender/draw/engines/eevee/eevee_render.c
@@ -555,6 +555,7 @@ void EEVEE_render_draw(EEVEE_Data *vedata, RenderEngine *engine, RenderLayer *rl
GPU_framebuffer_bind(fbl->main_fb);
EEVEE_draw_default_passes(psl);
DRW_draw_pass(psl->material_pass);
+ DRW_draw_pass(psl->material_pass_cull);
EEVEE_subsurface_data_render(sldata, vedata);
/* Effects pre-transparency */
EEVEE_subsurface_compute(sldata, vedata);
diff --git a/source/blender/draw/engines/eevee/eevee_subsurface.c b/source/blender/draw/engines/eevee/eevee_subsurface.c
index 5954774b00e..8abbaa64fd2 100644
--- a/source/blender/draw/engines/eevee/eevee_subsurface.c
+++ b/source/blender/draw/engines/eevee/eevee_subsurface.c
@@ -285,6 +285,7 @@ void EEVEE_subsurface_data_render(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Dat
GPU_framebuffer_bind(fbl->main_fb);
DRW_draw_pass(psl->sss_pass);
+ DRW_draw_pass(psl->sss_pass_cull);
/* Restore */
GPU_framebuffer_ensure_config(&fbl->main_fb, {