[Bf-blender-cvs] [05517c9bedf] temp-eeveelightcache: Merge remote-tracking branch 'origin/blender2.8' into temp-eeveelightcache

Clément Foucault noreply at git.blender.org
Mon Jul 9 23:03:59 CEST 2018


Commit: 05517c9bedfdd6afbae0a7d99dbbaba54563303b
Author: Clément Foucault
Date:   Mon Jul 9 23:03:21 2018 +0200
Branches: temp-eeveelightcache
https://developer.blender.org/rB05517c9bedfdd6afbae0a7d99dbbaba54563303b

Merge remote-tracking branch 'origin/blender2.8' into temp-eeveelightcache

# Conflicts:
#	source/blender/draw/engines/eevee/eevee_lightprobes.c

===================================================================



===================================================================

diff --cc source/blender/draw/engines/eevee/eevee_lightprobes.c
index 54bf59234b3,c4cf56483fa..1cb9a957211
--- a/source/blender/draw/engines/eevee/eevee_lightprobes.c
+++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c
@@@ -1111,25 -1100,25 +1111,25 @@@ void EEVEE_lightbake_filter_glossy
  
  #if 1 /* Variable Sample count (fast) */
  		switch (i) {
- 			case 0: pinfo->samples_ct = 1.0f; break;
- 			case 1: pinfo->samples_ct = 16.0f; break;
- 			case 2: pinfo->samples_ct = 32.0f; break;
- 			case 3: pinfo->samples_ct = 64.0f; break;
- 			default: pinfo->samples_ct = 128.0f; break;
+ 			case 0: pinfo->samples_len = 1.0f; break;
+ 			case 1: pinfo->samples_len = 16.0f; break;
+ 			case 2: pinfo->samples_len = 32.0f; break;
+ 			case 3: pinfo->samples_len = 64.0f; break;
+ 			default: pinfo->samples_len = 128.0f; break;
  		}
  #else /* Constant Sample count (slow) */
- 		pinfo->samples_ct = 1024.0f;
+ 		pinfo->samples_len = 1024.0f;
  #endif
  
- 		pinfo->invsamples_ct = 1.0f / pinfo->samples_ct;
- 		pinfo->lodfactor = bias + 0.5f * log((float)(target_size * target_size) * pinfo->invsamples_ct) / log(2);
+ 		pinfo->samples_len_inv = 1.0f / pinfo->samples_len;
 -		pinfo->lodfactor = bias + 0.5f * log((float)(pinfo->target_size * pinfo->target_size) * pinfo->samples_len_inv) / log(2);
++		pinfo->lodfactor = bias + 0.5f * log((float)(target_size * target_size) * pinfo->samples_len_inv) / log(2);
  
 -		GPU_framebuffer_ensure_config(&sldata->probe_filter_fb, {
 +		GPU_framebuffer_ensure_config(&fb, {
  			GPU_ATTACHMENT_NONE,
 -			GPU_ATTACHMENT_TEXTURE_MIP(sldata->probe_pool, i)
 +			GPU_ATTACHMENT_TEXTURE_MIP(light_cache->cube_tx.tex, i)
  		});
 -		GPU_framebuffer_bind(sldata->probe_filter_fb);
 -		GPU_framebuffer_viewport_set(sldata->probe_filter_fb, 0, 0, mipsize, mipsize);
 +		GPU_framebuffer_bind(fb);
 +		GPU_framebuffer_viewport_set(fb, 0, 0, mipsize, mipsize);
  		DRW_draw_pass(psl->probe_glossy_compute);
  
  		mipsize /= 2;
@@@ -1157,22 -1147,22 +1157,22 @@@ void EEVEE_lightbake_filter_diffuse
  	int size[2] = {3, 3};
  #elif defined(IRRADIANCE_CUBEMAP)
  	int size[2] = {8, 8};
- 	pinfo->samples_ct = 1024.0f;
+ 	pinfo->samples_len = 1024.0f;
  #elif defined(IRRADIANCE_HL2)
  	int size[2] = {3, 2};
- 	pinfo->samples_ct = 1024.0f;
+ 	pinfo->samples_len = 1024.0f;
  #endif
  
 -	int cell_per_row = pool_size[0] / size[0];
 -	int x = size[0] * (offset % cell_per_row);
 -	int y = size[1] * (offset / cell_per_row);
 +	int cell_per_row = GPU_texture_width(light_cache->grid_tx.tex) / size[0];
 +	int x = size[0] * (grid_offset % cell_per_row);
 +	int y = size[1] * (grid_offset / cell_per_row);
  
  #ifndef IRRADIANCE_SH_L2
  	/* Tweaking parameters to balance perf. vs precision */
  	const float bias = 0.0f;
- 	pinfo->invsamples_ct = 1.0f / pinfo->samples_ct;
- 	pinfo->lodfactor = bias + 0.5f * log((float)(target_size * target_size) * pinfo->invsamples_ct) / log(2);
+ 	pinfo->samples_len_inv = 1.0f / pinfo->samples_len;
 -	pinfo->lodfactor = bias + 0.5f * log((float)(pinfo->target_size * pinfo->target_size) * pinfo->samples_len_inv) / log(2);
 -	pinfo->lod_rt_max = floorf(log2f(pinfo->target_size)) - 2.0f;
++	pinfo->lodfactor = bias + 0.5f * log((float)(target_size * target_size) * pinfo->samples_len_inv) / log(2);
 +	pinfo->lod_rt_max = floorf(log2f(target_size)) - 2.0f;
  #else
  	pinfo->shres = 32; /* Less texture fetches & reduce branches */
  	pinfo->lod_rt_max = 2.0f; /* Improve cache reuse */
@@@ -1184,89 -1174,349 +1184,89 @@@
  		GPU_ATTACHMENT_NONE
  	});
  
 -	/* 4 - Compute spherical harmonics */
 -	EEVEE_downsample_cube_buffer(vedata, sldata->probe_rt, (int)(pinfo->lod_rt_max));
 +	/* 4 - Compute diffuse irradiance */
 +	EEVEE_downsample_cube_buffer(vedata, rt_color, (int)(pinfo->lod_rt_max));
  
 -	GPU_framebuffer_ensure_config(&sldata->probe_filter_fb, {
 +	GPU_framebuffer_ensure_config(&fb, {
  		GPU_ATTACHMENT_NONE,
 -		GPU_ATTACHMENT_TEXTURE_LAYER(sldata->irradiance_rt, 0)
 +		GPU_ATTACHMENT_TEXTURE_LAYER(light_cache->grid_tx.tex, 0)
  	});
 -	GPU_framebuffer_bind(sldata->probe_filter_fb);
 -	GPU_framebuffer_viewport_set(sldata->probe_filter_fb, x, y, size[0], size[1]);
 +	GPU_framebuffer_bind(fb);
 +	GPU_framebuffer_viewport_set(fb, x, y, size[0], size[1]);
  	DRW_draw_pass(psl->probe_diffuse_compute);
 -
 -	/* World irradiance have no visibility */
 -	if (offset > 0) {
 -		/* Compute visibility */
 -		pinfo->samples_len = 512.0f; /* TODO refine */
 -		pinfo->samples_len_inv = 1.0f / pinfo->samples_len;
 -		pinfo->shres = common_data->prb_irradiance_vis_size;
 -		pinfo->visibility_range = vis_range;
 -		pinfo->visibility_blur = vis_blur;
 -		pinfo->near_clip = -clipsta;
 -		pinfo->far_clip = -clipend;
 -		pinfo->texel_size = 1.0f / (float)common_data->prb_irradiance_vis_size;
 -
 -		int cell_per_col = pool_size[1] / common_data->prb_irradiance_vis_size;
 -		cell_per_row = pool_size[0] / common_data->prb_irradiance_vis_size;
 -		x = common_data->prb_irradiance_vis_size * (offset % cell_per_row);
 -		y = common_data->prb_irradiance_vis_size * ((offset / cell_per_row) % cell_per_col);
 -		int layer = 1 + ((offset / cell_per_row) / cell_per_col);
 -		const int vis_size = common_data->prb_irradiance_vis_size;
 -
 -		GPU_framebuffer_ensure_config(&sldata->probe_filter_fb, {
 -			GPU_ATTACHMENT_NONE,
 -			GPU_ATTACHMENT_TEXTURE_LAYER(sldata->irradiance_rt, layer)
 -		});
 -		GPU_framebuffer_bind(sldata->probe_filter_fb);
 -		GPU_framebuffer_viewport_set(sldata->probe_filter_fb, x, y, vis_size, vis_size);
 -		DRW_draw_pass(psl->probe_visibility_compute);
 -	}
  }
  
 -/* Render the scene to the probe_rt texture. */
 -static void render_scene_to_probe(
 +/* Filter rt_depth to light_cache->grid_tx.tex at index grid_offset */
 +void EEVEE_lightbake_filter_visibility(
          EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata,
 -        const float pos[3], float clipsta, float clipend)
 +        struct GPUTexture *UNUSED(rt_depth), struct GPUFrameBuffer *fb,
 +        int grid_offset, float clipsta, float clipend,
 +        float vis_range, float vis_blur, int vis_size)
  {
 -	EEVEE_TextureList *txl = vedata->txl;
  	EEVEE_PassList *psl = vedata->psl;
  	EEVEE_LightProbesInfo *pinfo = sldata->probes;
 +	LightCache *light_cache = vedata->stl->g_data->light_cache;
  
- 	pinfo->samples_ct = 512.0f; /* TODO refine */
- 	pinfo->invsamples_ct = 1.0f / pinfo->samples_ct;
 -	DRWMatrixState matstate;
 -	float (*viewmat)[4] = matstate.mat[DRW_MAT_VIEW];
 -	float (*viewinv)[4] = matstate.mat[DRW_MAT_VIEWINV];
 -	float (*persmat)[4] = matstate.mat[DRW_MAT_PERS];
 -	float (*persinv)[4] = matstate.mat[DRW_MAT_PERSINV];
 -	float (*winmat)[4] = matstate.mat[DRW_MAT_WIN];
 -	float (*wininv)[4] = matstate.mat[DRW_MAT_WININV];
 -
 -	float posmat[4][4];
 -	unit_m4(posmat);
 -
 -	/* Move to capture position */
 -	negate_v3_v3(posmat[3], pos);
 -
 -	/* 1 - Render to each cube-face individually.
 -	 * We do this instead of using geometry shader because a) it's faster,
 -	 * b) it's easier than fixing the node-tree shaders (for view dependent effects). */
 -	pinfo->layer = 0;
 -	perspective_m4(winmat, -clipsta, clipsta, -clipsta, clipsta, clipsta, clipend);
 -
 -	/* Avoid using the texture attached to framebuffer when rendering. */
 -	/* XXX */
 -	GPUTexture *tmp_planar_pool = txl->planar_pool;
 -	GPUTexture *tmp_maxz = txl->maxzbuffer;
 -	txl->planar_pool = e_data.planar_pool_placeholder;
 -	txl->maxzbuffer = e_data.depth_placeholder;
 -
 -	DRW_stats_group_start("Cubemap Render");
 -
 -	/* Update common uniforms */
 -	DRW_uniformbuffer_update(sldata->common_ubo, &sldata->common_data);
 -
 -	for (int i = 0; i < 6; ++i) {
 -		/* Recompute only on 1st drawloop. */
 -		pinfo->vis_data.cached = (i != 0);
 -
 -		DRW_stats_group_start("Cubemap Face");
 -
 -		/* Setup custom matrices */
 -		mul_m4_m4m4(viewmat, cubefacemat[i], posmat);
 -		mul_m4_m4m4(persmat, winmat, viewmat);
 -		invert_m4_m4(persinv, persmat);
 -		invert_m4_m4(viewinv, viewmat);
 -		invert_m4_m4(wininv, winmat);
 -
 -		DRW_viewport_matrix_override_set_all(&matstate);
 -
 -		/* Be sure that cascaded shadow maps are updated. */
 -		EEVEE_draw_shadows(sldata, psl);
 -
 -		GPU_framebuffer_bind(sldata->probe_face_fb[i]);
 -		GPU_framebuffer_clear_depth(sldata->probe_face_fb[i], 1.0);
 -
 -		/* Depth prepass */
 -		DRW_draw_pass(psl->depth_pass);
 -		DRW_draw_pass(psl->depth_pass_cull);
 -
 -		DRW_draw_pass(psl->probe_background);
 -
 -		// EEVEE_create_minmax_buffer(vedata, sldata->probe_depth_rt);
 -
 -		/* Rebind Target FB */
 -		GPU_framebuffer_bind(sldata->probe_face_fb[i]);
 -
 -		/* Shading pass */
 -		EEVEE_draw_default_passes(psl);
 -		DRW_draw_pass(psl->material_pass);
 -		DRW_draw_pass(psl->sss_pass); /* Only output standard pass */
 -
 -		DRW_stats_group_end();
 -	}
 -
 -	DRW_stats_group_end();
 -
 -	/* Make sure no aditionnal visibility check runs after this. */
 -	pinfo->vis_data.collection = NULL;
 -
 -	/* Restore */
 -	txl->planar_pool = tmp_planar_pool;
 -	txl->maxzbuffer = tmp_maxz;
 -}
 -
 -static void render_scene_to_planar(
 -        EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, int layer,
 -        EEVEE_LightProbeEngineData *ped)
 -{
 -	EEVEE_LightProbesInfo *pinfo = sldata->probes;
 -	EEVEE_FramebufferList *fbl = vedata->fbl;
 -	EEVEE_TextureList *txl = vedata->txl;
 -	EEVEE_PassList *psl = vedata->psl;
 -
 -	float (*viewmat)[4] = ped->mats.mat[DRW_MAT_VIEW];
 -	float (*viewinv)[4] = ped->mats.mat[DRW_MAT_VIEWINV];
 -	float (*persmat)[4] = ped->mats.mat[DRW_MAT_PERS];
 -	float (*persinv)[4] = ped->mats.mat[DRW_MAT_PERSINV];
 -	float (*winmat)[4] = ped->mats.mat[DRW_MAT_WIN];
 -	float (*wininv)[4] = ped->mats.mat[DRW_MAT_WININV];
 -
 -	invert_m4_m4(viewinv, viewmat);
 -	invert_m4_m4(persinv, persmat);
 -	invert_m4_m4(wininv, winmat);
 -
 -	DRW_stats_group_start("Planar Reflection");
 -
 -	DRW_viewport_matrix_override_set_all(&ped->mats);
 -
 -	/* Don't reuse previous visibility. */
 -	pinfo->vis_data.cached = false;
 -
 -	/* Be sure that cascaded shadow maps are updated. */
 -	EEVEE_draw_shadows(sldata, psl);
 -
 -	/* Since we are rendering with an inverted view matrix, we need
 -	 * to invert the facing for back-face culling to be the same. */
 -	DRW_state_invert_facing();
 -

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list