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:
authorIvan Perevala <ivpe>2020-11-13 10:24:52 +0300
committerJeroen Bakker <jeroen@blender.org>2020-11-13 10:26:27 +0300
commit4efd87d56b65e4fb5c10de399ab15ef59a9c305f (patch)
tree7c75d20c4a88502484e7b1322495e617864a1700 /source/blender/draw/engines/eevee/eevee_lookdev.c
parentb35b8c884909307bff2f71ce766621144fbc85a1 (diff)
UI: Adaptive HDRI preview resolution
HDRI preview should have resolution dependent on dpi, viewport scale and HDRI gizmo size. This patch uses a LOD to render a more round sphere. Reviewed By: Jeroen Bakker Differential Revision: https://developer.blender.org/D9382
Diffstat (limited to 'source/blender/draw/engines/eevee/eevee_lookdev.c')
-rw-r--r--source/blender/draw/engines/eevee/eevee_lookdev.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_lookdev.c b/source/blender/draw/engines/eevee/eevee_lookdev.c
index 710d2c70479..628941f68a2 100644
--- a/source/blender/draw/engines/eevee/eevee_lookdev.c
+++ b/source/blender/draw/engines/eevee/eevee_lookdev.c
@@ -65,7 +65,8 @@ static void eevee_lookdev_hdri_preview_init(EEVEE_Data *vedata, EEVEE_ViewLayerD
Scene *scene = draw_ctx->scene;
DRWShadingGroup *grp;
- struct GPUBatch *sphere = DRW_cache_sphere_get();
+ const EEVEE_EffectsInfo *effects = vedata->stl->effects;
+ struct GPUBatch *sphere = DRW_cache_sphere_get(effects->sphere_lod);
int mat_options = VAR_MAT_MESH | VAR_MAT_LOOKDEV;
DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_ALWAYS |
@@ -126,6 +127,19 @@ void EEVEE_lookdev_init(EEVEE_Data *vedata)
if (sphere_size != effects->sphere_size || rect->xmax != effects->anchor[0] ||
rect->ymin != effects->anchor[1]) {
+ /* Make sphere resolution adaptive to viewport_scale, dpi and lookdev_sphere_size */
+ float res_scale = clamp_f(
+ (U.lookdev_sphere_size / 400.0f) * viewport_scale * U.dpi_fac, 0.1f, 1.0f);
+
+ if (res_scale > 0.7f) {
+ effects->sphere_lod = DRW_LOD_HIGH;
+ }
+ else if (res_scale > 0.25f) {
+ effects->sphere_lod = DRW_LOD_MEDIUM;
+ }
+ else {
+ effects->sphere_lod = DRW_LOD_LOW;
+ }
/* If sphere size or anchor point moves, reset TAA to avoid ghosting issue.
* This needs to happen early because we are changing taa_current_sample. */
effects->sphere_size = sphere_size;