Workbench: Background Dithering
Background dithering was introduced to solve banding issues on gradient backgrounds. This patch will enable dithering based on the texture that is used for drawing. Only when using a GPU_RGBA8 texture the dithering will be enabled. This disables dithering for final rendering, vertex and texture paint modes. Reviewed By: fclem Differential Revision: https://developer.blender.org/D6056
This commit is contained in:
parent
80f0bc99a9
commit
b0476f0631
|
@ -1,5 +1,5 @@
|
|||
vec3 background_color(WorldData world_data, float y)
|
||||
{
|
||||
return mix(world_data.background_color_low, world_data.background_color_high, y).xyz +
|
||||
bayer_dither_noise();
|
||||
(world_data.background_dither_factor * bayer_dither_noise());
|
||||
}
|
||||
|
|
|
@ -16,5 +16,6 @@ struct WorldData {
|
|||
float background_alpha;
|
||||
float curvature_ridge;
|
||||
float curvature_valley;
|
||||
int pad[3];
|
||||
float background_dither_factor;
|
||||
int pad[2];
|
||||
};
|
||||
|
|
|
@ -111,6 +111,7 @@ void workbench_private_data_init(WORKBENCH_PrivateData *wpd)
|
|||
zero_v3(wd->background_color_low);
|
||||
zero_v3(wd->background_color_high);
|
||||
}
|
||||
wd->background_dither_factor = workbench_background_dither_factor(wpd);
|
||||
|
||||
studiolight_update_world(wpd, wpd->studio_light, wd);
|
||||
|
||||
|
|
|
@ -194,7 +194,8 @@ typedef struct WORKBENCH_UBO_World {
|
|||
float background_alpha;
|
||||
float curvature_ridge;
|
||||
float curvature_valley;
|
||||
int pad[3];
|
||||
float background_dither_factor;
|
||||
int pad[2];
|
||||
} WORKBENCH_UBO_World;
|
||||
BLI_STATIC_ASSERT_ALIGN(WORKBENCH_UBO_World, 16)
|
||||
|
||||
|
@ -406,6 +407,12 @@ BLI_INLINE eGPUTextureFormat workbench_color_texture_format(const WORKBENCH_Priv
|
|||
return result;
|
||||
}
|
||||
|
||||
BLI_INLINE bool workbench_background_dither_factor(const WORKBENCH_PrivateData *wpd) {
|
||||
/* Only apply dithering when rendering on a RGBA8 texture.
|
||||
* The dithering will remove banding when using a gradient as background */
|
||||
return workbench_color_texture_format(wpd) == GPU_RGBA8;
|
||||
}
|
||||
|
||||
/* workbench_deferred.c */
|
||||
void workbench_deferred_engine_init(WORKBENCH_Data *vedata);
|
||||
void workbench_deferred_engine_free(void);
|
||||
|
|
Loading…
Reference in New Issue