EEVEE-Next: Add back data passes UI and missing passes
The `VIEWLAYER_PT_eevee_next_layer_passes_data` class name was re-used by mistake for Workbench Next inba982119cd, and the actual EEVEE Next class was then removed in678dc456e3. This adds back the UI as it was, and the missing passes (Vector and Position) it referenced. Pull Request: https://projects.blender.org/blender/blender/pulls/112162
This commit is contained in:
@@ -78,6 +78,31 @@ class VIEWLAYER_PT_eevee_layer_passes_data(ViewLayerButtonsPanel, Panel):
|
||||
col.prop(view_layer, "use_pass_normal")
|
||||
|
||||
|
||||
class VIEWLAYER_PT_eevee_next_layer_passes_data(ViewLayerButtonsPanel, Panel):
|
||||
bl_label = "Data"
|
||||
bl_parent_id = "VIEWLAYER_PT_layer_passes"
|
||||
|
||||
COMPAT_ENGINES = {'BLENDER_EEVEE_NEXT'}
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
layout.use_property_split = True
|
||||
layout.use_property_decorate = False
|
||||
|
||||
scene = context.scene
|
||||
view_layer = context.view_layer
|
||||
|
||||
col = layout.column()
|
||||
col.prop(view_layer, "use_pass_combined")
|
||||
col.prop(view_layer, "use_pass_z")
|
||||
col.prop(view_layer, "use_pass_mist")
|
||||
col.prop(view_layer, "use_pass_normal")
|
||||
col.prop(view_layer, "use_pass_position")
|
||||
sub = col.column()
|
||||
sub.active = not scene.eevee.use_motion_blur
|
||||
sub.prop(view_layer, "use_pass_vector")
|
||||
|
||||
|
||||
class VIEWLAYER_PT_workbench_layer_passes_data(ViewLayerButtonsPanel, Panel):
|
||||
bl_label = "Data"
|
||||
bl_parent_id = "VIEWLAYER_PT_layer_passes"
|
||||
@@ -269,6 +294,7 @@ classes = (
|
||||
VIEWLAYER_PT_layer_passes,
|
||||
VIEWLAYER_PT_workbench_layer_passes_data,
|
||||
VIEWLAYER_PT_eevee_layer_passes_data,
|
||||
VIEWLAYER_PT_eevee_next_layer_passes_data,
|
||||
VIEWLAYER_PT_eevee_layer_passes_light,
|
||||
VIEWLAYER_PT_eevee_layer_passes_effects,
|
||||
VIEWLAYER_PT_layer_passes_cryptomatte,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -143,7 +143,7 @@ class Film {
|
||||
static bool pass_is_float3(eViewLayerEEVEEPassType pass_type)
|
||||
{
|
||||
return pass_storage_type(pass_type) == PASS_STORAGE_COLOR &&
|
||||
pass_type != EEVEE_RENDER_PASS_COMBINED;
|
||||
!ELEM(pass_type, EEVEE_RENDER_PASS_COMBINED, EEVEE_RENDER_PASS_VECTOR);
|
||||
}
|
||||
|
||||
/* Returns layer offset in the accumulation texture. -1 if the pass is not enabled. */
|
||||
@@ -158,6 +158,10 @@ 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:
|
||||
return data_.diffuse_light_id;
|
||||
case EEVEE_RENDER_PASS_DIFFUSE_COLOR:
|
||||
@@ -182,8 +186,6 @@ class Film {
|
||||
return data_.cryptomatte_asset_id;
|
||||
case EEVEE_RENDER_PASS_CRYPTOMATTE_MATERIAL:
|
||||
return data_.cryptomatte_material_id;
|
||||
case EEVEE_RENDER_PASS_VECTOR:
|
||||
return data_.vector_id;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
@@ -219,6 +221,12 @@ 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;
|
||||
case EEVEE_RENDER_PASS_DIFFUSE_LIGHT:
|
||||
result.append(RE_PASSNAME_DIFFUSE_DIRECT);
|
||||
break;
|
||||
@@ -255,9 +263,6 @@ class Film {
|
||||
case EEVEE_RENDER_PASS_CRYPTOMATTE_MATERIAL:
|
||||
build_cryptomatte_passes(RE_PASSNAME_CRYPTOMATTE_MATERIAL);
|
||||
break;
|
||||
case EEVEE_RENDER_PASS_VECTOR:
|
||||
result.append(RE_PASSNAME_VECTOR);
|
||||
break;
|
||||
default:
|
||||
BLI_assert(0);
|
||||
break;
|
||||
|
||||
@@ -350,7 +350,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;
|
||||
@@ -498,6 +499,8 @@ 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");
|
||||
CHECK_PASS_LEGACY(GLOSSY_DIRECT, 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)
|
||||
|
||||
|
||||
@@ -647,15 +647,22 @@ 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 (uniform_buf.film.use_reprojection || film_sample.weight < film_distance) {
|
||||
vec4 normal = texelFetch(
|
||||
rp_color_tx, ivec3(film_sample.texel, uniform_buf.render_pass.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(uniform_buf.film.render_extent), -vec2(uniform_buf.film.render_extent));
|
||||
/* Transform to pixel space, matching Cycles format. */
|
||||
vector *= vec4(vec2(uniform_buf.film.render_extent), vec2(uniform_buf.film.render_extent));
|
||||
|
||||
film_store_depth(texel_film, depth, out_depth);
|
||||
film_store_data(texel_film, uniform_buf.film.normal_id, normal, out_color);
|
||||
if (uniform_buf.film.normal_id != -1) {
|
||||
vec4 normal = texelFetch(
|
||||
rp_color_tx, ivec3(film_sample.texel, uniform_buf.render_pass.normal_id), 0);
|
||||
film_store_data(texel_film, uniform_buf.film.normal_id, normal, out_color);
|
||||
}
|
||||
if (uniform_buf.film.position_id != -1) {
|
||||
vec4 position = texelFetch(
|
||||
rp_color_tx, ivec3(film_sample.texel, uniform_buf.render_pass.position_id), 0);
|
||||
film_store_data(texel_film, uniform_buf.film.position_id, position, out_color);
|
||||
}
|
||||
film_store_data(texel_film, uniform_buf.film.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(uniform_buf.render_pass.normal_id, vec4(out_normal, 1.0));
|
||||
output_renderpass_color(uniform_buf.render_pass.position_id, vec4(g_data.P, 1.0));
|
||||
output_renderpass_color(uniform_buf.render_pass.diffuse_color_id,
|
||||
vec4(g_diffuse_data.color, 1.0));
|
||||
output_renderpass_color(uniform_buf.render_pass.specular_color_id, vec4(specular_color, 1.0));
|
||||
|
||||
@@ -121,6 +121,7 @@ void main()
|
||||
imageStore(rp_cryptomatte_img, out_texel, cryptomatte_output);
|
||||
}
|
||||
output_renderpass_color(uniform_buf.render_pass.normal_id, vec4(out_normal, 1.0));
|
||||
output_renderpass_color(uniform_buf.render_pass.position_id, vec4(g_data.P, 1.0));
|
||||
output_renderpass_color(uniform_buf.render_pass.diffuse_color_id,
|
||||
vec4(g_diffuse_data.color, 1.0));
|
||||
output_renderpass_color(uniform_buf.render_pass.diffuse_light_id, vec4(diffuse_light, 1.0));
|
||||
|
||||
@@ -46,6 +46,7 @@ void main()
|
||||
|
||||
vec4 clear_color = vec4(0.0, 0.0, 0.0, 1.0);
|
||||
output_renderpass_color(uniform_buf.render_pass.normal_id, clear_color);
|
||||
output_renderpass_color(uniform_buf.render_pass.position_id, clear_color);
|
||||
output_renderpass_color(uniform_buf.render_pass.diffuse_light_id, clear_color);
|
||||
output_renderpass_color(uniform_buf.render_pass.specular_light_id, clear_color);
|
||||
output_renderpass_color(uniform_buf.render_pass.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 */
|
||||
|
||||
Reference in New Issue
Block a user