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/bake.cpp')
-rw-r--r--intern/cycles/render/bake.cpp112
1 files changed, 22 insertions, 90 deletions
diff --git a/intern/cycles/render/bake.cpp b/intern/cycles/render/bake.cpp
index 317a3937cab..54e496caed6 100644
--- a/intern/cycles/render/bake.cpp
+++ b/intern/cycles/render/bake.cpp
@@ -26,58 +26,8 @@
CCL_NAMESPACE_BEGIN
-static int aa_samples(Scene *scene, Object *object, ShaderEvalType type)
-{
- if (type == SHADER_EVAL_UV || type == SHADER_EVAL_ROUGHNESS) {
- return 1;
- }
- else if (type == SHADER_EVAL_NORMAL) {
- /* Only antialias normal if mesh has bump mapping. */
- if (object->get_geometry()) {
- foreach (Node *node, object->get_geometry()->get_used_shaders()) {
- Shader *shader = static_cast<Shader *>(node);
- if (shader->has_bump) {
- return scene->integrator->get_aa_samples();
- }
- }
- }
-
- return 1;
- }
- else {
- return scene->integrator->get_aa_samples();
- }
-}
-
-/* Keep it synced with kernel_bake.h logic */
-static int shader_type_to_pass_filter(ShaderEvalType type, int pass_filter)
-{
- const int component_flags = pass_filter &
- (BAKE_FILTER_DIRECT | BAKE_FILTER_INDIRECT | BAKE_FILTER_COLOR);
-
- switch (type) {
- case SHADER_EVAL_AO:
- return BAKE_FILTER_AO;
- case SHADER_EVAL_SHADOW:
- return BAKE_FILTER_DIRECT;
- case SHADER_EVAL_DIFFUSE:
- return BAKE_FILTER_DIFFUSE | component_flags;
- case SHADER_EVAL_GLOSSY:
- return BAKE_FILTER_GLOSSY | component_flags;
- case SHADER_EVAL_TRANSMISSION:
- return BAKE_FILTER_TRANSMISSION | component_flags;
- case SHADER_EVAL_COMBINED:
- return pass_filter;
- default:
- return 0;
- }
-}
-
BakeManager::BakeManager()
{
- type = SHADER_EVAL_BAKE;
- pass_filter = 0;
-
need_update_ = true;
}
@@ -85,32 +35,14 @@ BakeManager::~BakeManager()
{
}
-bool BakeManager::get_baking()
+bool BakeManager::get_baking() const
{
return !object_name.empty();
}
-void BakeManager::set(Scene *scene,
- const std::string &object_name_,
- ShaderEvalType type_,
- int pass_filter_)
+void BakeManager::set(Scene *scene, const std::string &object_name_)
{
object_name = object_name_;
- type = type_;
- pass_filter = shader_type_to_pass_filter(type_, pass_filter_);
-
- Pass::add(PASS_BAKE_PRIMITIVE, scene->passes);
- Pass::add(PASS_BAKE_DIFFERENTIAL, scene->passes);
-
- if (type == SHADER_EVAL_UV) {
- /* force UV to be available */
- Pass::add(PASS_UV, scene->passes);
- }
-
- /* force use_light_pass to be true if we bake more than just colors */
- if (pass_filter & ~BAKE_FILTER_COLOR) {
- Pass::add(PASS_LIGHT, scene->passes);
- }
/* create device and update scene */
scene->film->tag_modified();
@@ -127,29 +59,29 @@ void BakeManager::device_update(Device * /*device*/,
if (!need_update())
return;
- scoped_callback_timer timer([scene](double time) {
- if (scene->update_stats) {
- scene->update_stats->bake.times.add_entry({"device_update", time});
- }
- });
-
- KernelIntegrator *kintegrator = &dscene->data.integrator;
KernelBake *kbake = &dscene->data.bake;
+ memset(kbake, 0, sizeof(*kbake));
- kbake->type = type;
- kbake->pass_filter = pass_filter;
-
- int object_index = 0;
- foreach (Object *object, scene->objects) {
- const Geometry *geom = object->get_geometry();
- if (object->name == object_name && geom->geometry_type == Geometry::MESH) {
- kbake->object_index = object_index;
- kbake->tri_offset = geom->prim_offset;
- kintegrator->aa_samples = aa_samples(scene, object, type);
- break;
- }
+ if (!object_name.empty()) {
+ scoped_callback_timer timer([scene](double time) {
+ if (scene->update_stats) {
+ scene->update_stats->bake.times.add_entry({"device_update", time});
+ }
+ });
+
+ kbake->use = true;
- object_index++;
+ int object_index = 0;
+ foreach (Object *object, scene->objects) {
+ const Geometry *geom = object->get_geometry();
+ if (object->name == object_name && geom->geometry_type == Geometry::MESH) {
+ kbake->object_index = object_index;
+ kbake->tri_offset = geom->prim_offset;
+ break;
+ }
+
+ object_index++;
+ }
}
need_update_ = false;