From 7f793b35b2c3a49d5a3ee617b2a5417022157aa0 Mon Sep 17 00:00:00 2001 From: Daniel Genrich Date: Mon, 23 Jul 2012 09:18:32 +0000 Subject: Start to work on Smoke + Cycles. Goal is a proof of concept, then cleaning code up :-) --- intern/cycles/blender/blender_object.cpp | 25 +++++++++++++++++++++++++ intern/cycles/blender/blender_sync.h | 1 + intern/cycles/render/object.h | 5 +++++ 3 files changed, 31 insertions(+) diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp index a928bd9a6ea..2a34da078ea 100644 --- a/intern/cycles/blender/blender_object.cpp +++ b/intern/cycles/blender/blender_object.cpp @@ -53,6 +53,26 @@ bool BlenderSync::BKE_object_is_modified(BL::Object b_ob) return false; } +/* Only looking for Smoke domains */ +// TODO DG: disable rendering of smoke flow?? +bool BlenderSync::BKE_modifiers_isSmokeEnabled(BL::Object b_ob) +{ + BL::Object::modifiers_iterator b_modifiers; + for(b_ob.modifiers.begin(b_modifiers); b_modifiers != b_ob.modifiers.end(); ++b_modifiers) { + BL::Modifier mod = (*b_modifiers); + + if (mod.is_a(&RNA_SmokeModifier)) { + BL::SmokeModifier smd(mod); + + if(smd.smoke_type() == BL::SmokeModifier::smoke_type_DOMAIN) { + return true; + } + } + } + + return false; +} + bool BlenderSync::object_is_mesh(BL::Object b_ob) { BL::ID b_ob_data = b_ob.data(); @@ -242,6 +262,11 @@ void BlenderSync::sync_object(BL::Object b_parent, int b_index, BL::Object b_ob, /* mesh sync */ object->mesh = sync_mesh(b_ob, object_updated); + if(BKE_modifiers_isSmokeEnabled(b_ob)) + { + // TODO DG sync_volume(b_ob); + } + if(use_holdout != object->use_holdout) { object->use_holdout = use_holdout; scene->object_manager->tag_update(scene); diff --git a/intern/cycles/blender/blender_sync.h b/intern/cycles/blender/blender_sync.h index 8c31c4b86ba..b614fca6363 100644 --- a/intern/cycles/blender/blender_sync.h +++ b/intern/cycles/blender/blender_sync.h @@ -90,6 +90,7 @@ private: /* util */ void find_shader(BL::ID id, vector& used_shaders, int default_shader); bool BKE_object_is_modified(BL::Object b_ob); + bool BKE_modifiers_isSmokeEnabled(BL::Object b_ob); bool object_is_mesh(BL::Object b_ob); bool object_is_light(BL::Object b_ob); bool object_use_particles(BL::Object b_ob); diff --git a/intern/cycles/render/object.h b/intern/cycles/render/object.h index 6d674731b07..bacfb8f18a4 100644 --- a/intern/cycles/render/object.h +++ b/intern/cycles/render/object.h @@ -57,6 +57,11 @@ public: int particle_id; vector particles; + /* Voxel / 3D volume data */ + bool use_volume; + int3 resolution; + vector grid; + Object(); ~Object(); -- cgit v1.2.3