EEVEE-Next: Add back data passes UI and missing passes #112162

Merged
Miguel Pozo merged 7 commits from pragma37/blender:pull-eeevee-next-missing-passes into main 2023-09-11 20:14:12 +02:00
10 changed files with 29 additions and 5 deletions
Showing only changes of commit bbb03a3012 - Show all commits

View File

@ -176,6 +176,7 @@ static eViewLayerEEVEEPassType enabled_passes(const ViewLayer *view_layer)
ENABLE_FROM_LEGACY(Z, Z)
ENABLE_FROM_LEGACY(MIST, MIST)
ENABLE_FROM_LEGACY(NORMAL, NORMAL)
ENABLE_FROM_LEGACY(POSITION, POSITION)
ENABLE_FROM_LEGACY(SHADOW, SHADOW)
ENABLE_FROM_LEGACY(AO, AO)
ENABLE_FROM_LEGACY(EMIT, EMIT)
@ -283,6 +284,7 @@ void Film::init(const int2 &extent, const rcti *output_rect)
}
const eViewLayerEEVEEPassType data_passes = EEVEE_RENDER_PASS_Z | EEVEE_RENDER_PASS_NORMAL |
EEVEE_RENDER_PASS_POSITION |
EEVEE_RENDER_PASS_VECTOR;
const eViewLayerEEVEEPassType color_passes_1 = EEVEE_RENDER_PASS_DIFFUSE_LIGHT |
EEVEE_RENDER_PASS_SPECULAR_LIGHT |
@ -328,6 +330,7 @@ void Film::init(const int2 &extent, const rcti *output_rect)
data_.mist_id = pass_index_get(EEVEE_RENDER_PASS_MIST);
data_.normal_id = pass_index_get(EEVEE_RENDER_PASS_NORMAL);
data_.position_id = pass_index_get(EEVEE_RENDER_PASS_POSITION);
data_.vector_id = pass_index_get(EEVEE_RENDER_PASS_VECTOR);
data_.diffuse_light_id = pass_index_get(EEVEE_RENDER_PASS_DIFFUSE_LIGHT);
data_.diffuse_color_id = pass_index_get(EEVEE_RENDER_PASS_DIFFUSE_COLOR);

View File

@ -158,6 +158,8 @@ class Film {
return data_.mist_id;
case EEVEE_RENDER_PASS_NORMAL:
return data_.normal_id;
case EEVEE_RENDER_PASS_POSITION:
return data_.position_id;
case EEVEE_RENDER_PASS_VECTOR:
return data_.vector_id;
case EEVEE_RENDER_PASS_DIFFUSE_LIGHT:
@ -219,6 +221,9 @@ class Film {
case EEVEE_RENDER_PASS_NORMAL:
result.append(RE_PASSNAME_NORMAL);
break;
case EEVEE_RENDER_PASS_POSITION:
result.append(RE_PASSNAME_POSITION);
break;
case EEVEE_RENDER_PASS_VECTOR:
result.append(RE_PASSNAME_VECTOR);
break;

View File

@ -348,7 +348,8 @@ void Instance::render_sample()
void Instance::render_read_result(RenderLayer *render_layer, const char *view_name)
{
eViewLayerEEVEEPassType pass_bits = film.enabled_passes_get();
for (auto i : IndexRange(EEVEE_RENDER_PASS_MAX_BIT)) {
for (auto i : IndexRange(EEVEE_RENDER_PASS_MAX_BIT + 1)) {
eViewLayerEEVEEPassType pass_type = eViewLayerEEVEEPassType(pass_bits & (1 << i));
if (pass_type == 0) {
continue;
@ -496,6 +497,7 @@ void Instance::update_passes(RenderEngine *engine, Scene *scene, ViewLayer *view
CHECK_PASS_LEGACY(Z, SOCK_FLOAT, 1, "Z");
CHECK_PASS_LEGACY(MIST, SOCK_FLOAT, 1, "Z");
CHECK_PASS_LEGACY(NORMAL, SOCK_VECTOR, 3, "XYZ");
CHECK_PASS_LEGACY(POSITION, SOCK_VECTOR, 3, "XYZ");
CHECK_PASS_LEGACY(VECTOR, SOCK_VECTOR, 4, "XYZW");
CHECK_PASS_LEGACY(DIFFUSE_DIRECT, SOCK_RGBA, 3, "RGB");
CHECK_PASS_LEGACY(DIFFUSE_COLOR, SOCK_RGBA, 3, "RGB");

View File

@ -40,6 +40,7 @@ void RenderBuffers::sync()
};
data.normal_id = pass_index_get(EEVEE_RENDER_PASS_NORMAL, EEVEE_RENDER_PASS_AO);
data.position_id = pass_index_get(EEVEE_RENDER_PASS_POSITION);
data.diffuse_light_id = pass_index_get(EEVEE_RENDER_PASS_DIFFUSE_LIGHT);
data.diffuse_color_id = pass_index_get(EEVEE_RENDER_PASS_DIFFUSE_COLOR);
data.specular_light_id = pass_index_get(EEVEE_RENDER_PASS_SPECULAR_LIGHT);

View File

@ -267,12 +267,13 @@ struct FilmData {
bool1 any_render_pass_2;
/** Controlled by user in lookdev mode or by render settings. */
float background_opacity;
float _pad0, _pad1, _pad2;
float _pad0, _pad1;
/** Output counts per type. */
int color_len, value_len;
/** Index in color_accum_img or value_accum_img of each pass. -1 if pass is not enabled. */
int mist_id;
int normal_id;
int position_id;
int vector_id;
int diffuse_light_id;
int diffuse_color_id;
@ -364,6 +365,7 @@ struct RenderBuffersInfoData {
/* Color. */
int color_len;
int normal_id;
int position_id;
int diffuse_light_id;
int diffuse_color_id;
int specular_light_id;
@ -375,6 +377,7 @@ struct RenderBuffersInfoData {
int value_len;
int shadow_id;
int ambient_occlusion_id;
int _pad0, _pad1, _pad2;
};
BLI_STATIC_ASSERT_ALIGN(RenderBuffersInfoData, 16)

View File

@ -645,14 +645,20 @@ void film_process_data(ivec2 texel_film, out vec4 out_color, out float out_depth
FilmSample film_sample = film_sample_get(0, texel_film);
if (film_buf.use_reprojection || film_sample.weight < film_distance) {
vec4 normal = texelFetch(rp_color_tx, ivec3(film_sample.texel, rp_buf.normal_id), 0);
float depth = texelFetch(depth_tx, film_sample.texel, 0).x;
vec4 vector = velocity_resolve(vector_tx, film_sample.texel, depth);
/* Transform to pixel space. */
vector *= vec4(vec2(film_buf.render_extent), -vec2(film_buf.render_extent));
film_store_depth(texel_film, depth, out_depth);
film_store_data(texel_film, film_buf.normal_id, normal, out_color);
if (film_buf.normal_id != -1) {
vec4 normal = texelFetch(rp_color_tx, ivec3(film_sample.texel, rp_buf.normal_id), 0);
film_store_data(texel_film, film_buf.normal_id, normal, out_color);
}
if (film_buf.position_id != -1) {
vec4 position = texelFetch(rp_color_tx, ivec3(film_sample.texel, rp_buf.position_id), 0);
film_store_data(texel_film, film_buf.position_id, position, out_color);
}
film_store_data(texel_film, film_buf.vector_id, vector, out_color);
film_store_distance(texel_film, film_sample.weight);
}

View File

@ -77,6 +77,7 @@ void main()
imageStore(rp_cryptomatte_img, out_texel, cryptomatte_output);
}
output_renderpass_color(rp_buf.normal_id, vec4(out_normal, 1.0));
output_renderpass_color(rp_buf.position_id, vec4(g_data.P, 1.0));
output_renderpass_color(rp_buf.diffuse_color_id, vec4(g_diffuse_data.color, 1.0));
output_renderpass_color(rp_buf.specular_color_id, vec4(specular_color, 1.0));
output_renderpass_color(rp_buf.emission_id, vec4(g_emission, 1.0));

View File

@ -121,6 +121,7 @@ void main()
imageStore(rp_cryptomatte_img, out_texel, cryptomatte_output);
}
output_renderpass_color(rp_buf.normal_id, vec4(out_normal, 1.0));
output_renderpass_color(rp_buf.position_id, vec4(g_data.P, 1.0));
output_renderpass_color(rp_buf.diffuse_color_id, vec4(g_diffuse_data.color, 1.0));
output_renderpass_color(rp_buf.diffuse_light_id, vec4(diffuse_light, 1.0));
output_renderpass_color(rp_buf.specular_color_id, vec4(specular_color, 1.0));

View File

@ -46,6 +46,7 @@ void main()
vec4 clear_color = vec4(0.0, 0.0, 0.0, 1.0);
output_renderpass_color(rp_buf.normal_id, clear_color);
output_renderpass_color(rp_buf.position_id, clear_color);
output_renderpass_color(rp_buf.diffuse_light_id, clear_color);
output_renderpass_color(rp_buf.specular_light_id, clear_color);
output_renderpass_color(rp_buf.diffuse_color_id, clear_color);

View File

@ -45,8 +45,9 @@ typedef enum eViewLayerEEVEEPassType {
EEVEE_RENDER_PASS_CRYPTOMATTE_MATERIAL = (1 << 18),
EEVEE_RENDER_PASS_VECTOR = (1 << 19),
EEVEE_RENDER_PASS_TRANSPARENT = (1 << 20),
EEVEE_RENDER_PASS_POSITION = (1 << 21),
} eViewLayerEEVEEPassType;
#define EEVEE_RENDER_PASS_MAX_BIT 20
#define EEVEE_RENDER_PASS_MAX_BIT 21
ENUM_OPERATORS(eViewLayerEEVEEPassType, 1 << EEVEE_RENDER_PASS_MAX_BIT)
/* #ViewLayerAOV.type */