EEVEE Next: Ambient Occlusion #108398
|
@ -105,13 +105,12 @@ class Film {
|
|||
int cryptomatte_layer_max_get() const;
|
||||
int cryptomatte_layer_len_get() const;
|
||||
|
||||
/** WARNING: Film and RenderBuffers use different storage types for AO and Shadow. */
|
||||
static ePassStorageType pass_storage_type(eViewLayerEEVEEPassType pass_type)
|
||||
{
|
||||
switch (pass_type) {
|
||||
case EEVEE_RENDER_PASS_Z:
|
||||
case EEVEE_RENDER_PASS_MIST:
|
||||
case EEVEE_RENDER_PASS_SHADOW:
|
||||
case EEVEE_RENDER_PASS_AO:
|
||||
return PASS_STORAGE_VALUE;
|
||||
case EEVEE_RENDER_PASS_CRYPTOMATTE_OBJECT:
|
||||
case EEVEE_RENDER_PASS_CRYPTOMATTE_ASSET:
|
||||
|
@ -124,19 +123,8 @@ class Film {
|
|||
|
||||
static bool pass_is_float3(eViewLayerEEVEEPassType pass_type)
|
||||
{
|
||||
switch (pass_type) {
|
||||
case EEVEE_RENDER_PASS_NORMAL:
|
||||
case EEVEE_RENDER_PASS_DIFFUSE_LIGHT:
|
||||
case EEVEE_RENDER_PASS_DIFFUSE_COLOR:
|
||||
case EEVEE_RENDER_PASS_SPECULAR_LIGHT:
|
||||
case EEVEE_RENDER_PASS_SPECULAR_COLOR:
|
||||
case EEVEE_RENDER_PASS_VOLUME_LIGHT:
|
||||
case EEVEE_RENDER_PASS_EMIT:
|
||||
case EEVEE_RENDER_PASS_ENVIRONMENT:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
return pass_storage_type(pass_type) == PASS_STORAGE_COLOR &&
|
||||
pass_type != EEVEE_RENDER_PASS_COMBINED;
|
||||
}
|
||||
|
||||
/* Returns layer offset in the accumulation texture. -1 if the pass is not enabled. */
|
||||
|
|
|
@ -448,9 +448,8 @@ void Instance::update_passes(RenderEngine *engine, Scene *scene, ViewLayer *view
|
|||
CHECK_PASS_EEVEE(VOLUME_LIGHT, SOCK_RGBA, 3, "RGB");
|
||||
CHECK_PASS_LEGACY(EMIT, SOCK_RGBA, 3, "RGB");
|
||||
CHECK_PASS_LEGACY(ENVIRONMENT, SOCK_RGBA, 3, "RGB");
|
||||
/* TODO: CHECK_PASS_LEGACY(SHADOW, SOCK_RGBA, 3, "RGB");
|
||||
* CHECK_PASS_LEGACY(AO, SOCK_RGBA, 3, "RGB");
|
||||
* When available they should be converted from Value textures to RGB. */
|
||||
CHECK_PASS_LEGACY(SHADOW, SOCK_RGBA, 3, "RGB");
|
||||
CHECK_PASS_LEGACY(AO, SOCK_RGBA, 3, "RGB");
|
||||
|
||||
LISTBASE_FOREACH (ViewLayerAOV *, aov, &view_layer->aovs) {
|
||||
if ((aov->flag & AOV_CONFLICT) != 0) {
|
||||
|
|
|
@ -33,8 +33,8 @@ void RenderBuffers::sync()
|
|||
|
||||
auto pass_index_get = [&](eViewLayerEEVEEPassType pass_type, int dependent_passes = 0) {
|
||||
if (enabled_passes & (pass_type | dependent_passes)) {
|
||||
return inst_.film.pass_storage_type(pass_type) == PASS_STORAGE_COLOR ? data.color_len++ :
|
||||
data.value_len++;
|
||||
return pass_storage_type(pass_type) == PASS_STORAGE_COLOR ? data.color_len++ :
|
||||
data.value_len++;
|
||||
}
|
||||
return -1;
|
||||
};
|
||||
|
|
|
@ -40,6 +40,24 @@ class RenderBuffers {
|
|||
public:
|
||||
RenderBuffers(Instance &inst) : inst_(inst){};
|
||||
|
||||
/** WARNING: RenderBuffers and Film use different storage types for AO and Shadow. */
|
||||
static ePassStorageType pass_storage_type(eViewLayerEEVEEPassType pass_type)
|
||||
{
|
||||
switch (pass_type) {
|
||||
case EEVEE_RENDER_PASS_Z:
|
||||
case EEVEE_RENDER_PASS_MIST:
|
||||
case EEVEE_RENDER_PASS_SHADOW:
|
||||
case EEVEE_RENDER_PASS_AO:
|
||||
return PASS_STORAGE_VALUE;
|
||||
case EEVEE_RENDER_PASS_CRYPTOMATTE_OBJECT:
|
||||
case EEVEE_RENDER_PASS_CRYPTOMATTE_ASSET:
|
||||
case EEVEE_RENDER_PASS_CRYPTOMATTE_MATERIAL:
|
||||
return PASS_STORAGE_CRYPTOMATTE;
|
||||
default:
|
||||
return PASS_STORAGE_COLOR;
|
||||
}
|
||||
}
|
||||
|
||||
void sync();
|
||||
|
||||
/* Acquires (also ensures) the render buffer before rendering to them. */
|
||||
|
|
|
@ -717,8 +717,8 @@ void film_process_data(ivec2 texel_film, out vec4 out_color, out float out_depth
|
|||
film_store_color(dst, film_buf.diffuse_color_id, diffuse_color_accum, out_color);
|
||||
film_store_color(dst, film_buf.specular_color_id, specular_color_accum, out_color);
|
||||
film_store_color(dst, film_buf.environment_id, environment_accum, out_color);
|
||||
film_store_value(dst, film_buf.shadow_id, shadow_accum, out_color);
|
||||
film_store_value(dst, film_buf.ambient_occlusion_id, ao_accum, out_color);
|
||||
film_store_color(dst, film_buf.shadow_id, vec4(vec3(shadow_accum), 1.0), out_color);
|
||||
film_store_color(dst, film_buf.ambient_occlusion_id, vec4(vec3(ao_accum), 1.0), out_color);
|
||||
film_store_value(dst, film_buf.mist_id, mist_accum, out_color);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue