EEVEE-Next: Add back data passes UI and missing passes #112162
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue