Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/cycles/render/film.cpp')
-rw-r--r--intern/cycles/render/film.cpp81
1 files changed, 70 insertions, 11 deletions
diff --git a/intern/cycles/render/film.cpp b/intern/cycles/render/film.cpp
index d7cbf4a3581..2da28222a7f 100644
--- a/intern/cycles/render/film.cpp
+++ b/intern/cycles/render/film.cpp
@@ -38,6 +38,60 @@ static bool compare_pass_order(const Pass &a, const Pass &b)
return (a.components > b.components);
}
+NODE_DEFINE(Pass)
+{
+ NodeType *type = NodeType::add("pass", create);
+
+ static NodeEnum pass_type_enum;
+ pass_type_enum.insert("combined", PASS_COMBINED);
+ pass_type_enum.insert("depth", PASS_DEPTH);
+ pass_type_enum.insert("normal", PASS_NORMAL);
+ pass_type_enum.insert("uv", PASS_UV);
+ pass_type_enum.insert("object_id", PASS_OBJECT_ID);
+ pass_type_enum.insert("material_id", PASS_MATERIAL_ID);
+ pass_type_enum.insert("motion", PASS_MOTION);
+ pass_type_enum.insert("motion_weight", PASS_MOTION_WEIGHT);
+#ifdef __KERNEL_DEBUG__
+ pass_type_enum.insert("traversed_nodes", PASS_BVH_TRAVERSED_NODES);
+ pass_type_enum.insert("traverse_instances", PASS_BVH_TRAVERSED_INSTANCES);
+ pass_type_enum.insert("bvh_intersections", PASS_BVH_INTERSECTIONS);
+ pass_type_enum.insert("ray_bounces", PASS_RAY_BOUNCES);
+#endif
+ pass_type_enum.insert("render_time", PASS_RENDER_TIME);
+ pass_type_enum.insert("cryptomatte", PASS_CRYPTOMATTE);
+ pass_type_enum.insert("aov_color", PASS_AOV_COLOR);
+ pass_type_enum.insert("aov_value", PASS_AOV_VALUE);
+ pass_type_enum.insert("adaptive_aux_buffer", PASS_ADAPTIVE_AUX_BUFFER);
+ pass_type_enum.insert("sample_count", PASS_SAMPLE_COUNT);
+ pass_type_enum.insert("mist", PASS_MIST);
+ pass_type_enum.insert("emission", PASS_EMISSION);
+ pass_type_enum.insert("background", PASS_BACKGROUND);
+ pass_type_enum.insert("ambient_occlusion", PASS_AO);
+ pass_type_enum.insert("shadow", PASS_SHADOW);
+ pass_type_enum.insert("diffuse_direct", PASS_DIFFUSE_DIRECT);
+ pass_type_enum.insert("diffuse_indirect", PASS_DIFFUSE_INDIRECT);
+ pass_type_enum.insert("diffuse_color", PASS_DIFFUSE_COLOR);
+ pass_type_enum.insert("glossy_direct", PASS_GLOSSY_DIRECT);
+ pass_type_enum.insert("glossy_indirect", PASS_GLOSSY_INDIRECT);
+ pass_type_enum.insert("glossy_color", PASS_GLOSSY_COLOR);
+ pass_type_enum.insert("transmission_direct", PASS_TRANSMISSION_DIRECT);
+ pass_type_enum.insert("transmission_indirect", PASS_TRANSMISSION_INDIRECT);
+ pass_type_enum.insert("transmission_color", PASS_TRANSMISSION_COLOR);
+ pass_type_enum.insert("volume_direct", PASS_VOLUME_DIRECT);
+ pass_type_enum.insert("volume_indirect", PASS_VOLUME_INDIRECT);
+ pass_type_enum.insert("bake_primitive", PASS_BAKE_PRIMITIVE);
+ pass_type_enum.insert("bake_differential", PASS_BAKE_DIFFERENTIAL);
+
+ SOCKET_ENUM(type, "Type", pass_type_enum, PASS_COMBINED);
+ SOCKET_STRING(name, "Name", ustring());
+
+ return type;
+}
+
+Pass::Pass() : Node(node_type)
+{
+}
+
void Pass::add(PassType type, vector<Pass> &passes, const char *name)
{
for (size_t i = 0; i < passes.size(); i++) {
@@ -199,6 +253,8 @@ void Pass::add(PassType type, vector<Pass> &passes, const char *name)
case PASS_BAKE_PRIMITIVE:
case PASS_BAKE_DIFFERENTIAL:
pass.components = 4;
+ pass.exposure = false;
+ pass.filter = false;
break;
default:
assert(false);
@@ -330,8 +386,6 @@ NODE_DEFINE(Film)
Film::Film() : Node(node_type)
{
- Pass::add(PASS_COMBINED, passes);
-
use_light_visibility = false;
filter_table_offset = TABLE_OFFSET_INVALID;
cryptomatte_passes = CRYPT_NONE;
@@ -344,6 +398,11 @@ Film::~Film()
{
}
+void Film::add_default(Scene *scene)
+{
+ Pass::add(PASS_COMBINED, scene->passes);
+}
+
void Film::device_update(Device *device, DeviceScene *dscene, Scene *scene)
{
if (!need_update)
@@ -371,8 +430,8 @@ void Film::device_update(Device *device, DeviceScene *dscene, Scene *scene)
bool have_cryptomatte = false;
- for (size_t i = 0; i < passes.size(); i++) {
- Pass &pass = passes[i];
+ for (size_t i = 0; i < scene->passes.size(); i++) {
+ Pass &pass = scene->passes[i];
if (pass.type == PASS_NONE) {
continue;
@@ -601,26 +660,26 @@ void Film::device_free(Device * /*device*/, DeviceScene * /*dscene*/, Scene *sce
bool Film::modified(const Film &film)
{
- return !Node::equals(film) || !Pass::equals(passes, film.passes);
+ return !Node::equals(film);
}
void Film::tag_passes_update(Scene *scene, const vector<Pass> &passes_, bool update_passes)
{
- if (Pass::contains(passes, PASS_UV) != Pass::contains(passes_, PASS_UV)) {
+ if (Pass::contains(scene->passes, PASS_UV) != Pass::contains(passes_, PASS_UV)) {
scene->geometry_manager->tag_update(scene);
foreach (Shader *shader, scene->shaders)
shader->need_update_geometry = true;
}
- else if (Pass::contains(passes, PASS_MOTION) != Pass::contains(passes_, PASS_MOTION)) {
+ else if (Pass::contains(scene->passes, PASS_MOTION) != Pass::contains(passes_, PASS_MOTION)) {
scene->geometry_manager->tag_update(scene);
}
- else if (Pass::contains(passes, PASS_AO) != Pass::contains(passes_, PASS_AO)) {
+ else if (Pass::contains(scene->passes, PASS_AO) != Pass::contains(passes_, PASS_AO)) {
scene->integrator->tag_update(scene);
}
if (update_passes) {
- passes = passes_;
+ scene->passes = passes_;
}
}
@@ -629,10 +688,10 @@ void Film::tag_update(Scene * /*scene*/)
need_update = true;
}
-int Film::get_aov_offset(string name, bool &is_color)
+int Film::get_aov_offset(Scene *scene, string name, bool &is_color)
{
int num_color = 0, num_value = 0;
- foreach (const Pass &pass, passes) {
+ foreach (const Pass &pass, scene->passes) {
if (pass.type == PASS_AOV_COLOR) {
num_color++;
}