diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-04-15 13:02:31 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-04-15 13:02:31 +0300 |
commit | f951cc36e286617657f8e86b89dfe2e5f0de36ad (patch) | |
tree | 5fe4df32646c75b8b32f483afdea4e66871174aa /intern/cycles/blender | |
parent | a52b4378b294703a359a51a9e6bf6a33805c4d6d (diff) |
Cycles: Support heat volume attribute
Similar to velocity, it was kind of supported by the mesh manager but
was missing a code in BlenderSession to get actual values.
In Cycles Heat is an attribute which goes from -1 to 1, where -1 is
the coldest ever temperature, 1 is the hottest ever one.
Diffstat (limited to 'intern/cycles/blender')
-rw-r--r-- | intern/cycles/blender/blender_session.cpp | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp index f8a0f07b6f8..7a5243d3234 100644 --- a/intern/cycles/blender/blender_session.cpp +++ b/intern/cycles/blender/blender_session.cpp @@ -1113,7 +1113,8 @@ void BlenderSession::builtin_image_info(const string &builtin_name, void *builti return; if(builtin_name == Attribute::standard_name(ATTR_STD_VOLUME_DENSITY) || - builtin_name == Attribute::standard_name(ATTR_STD_VOLUME_FLAME)) + builtin_name == Attribute::standard_name(ATTR_STD_VOLUME_FLAME) || + builtin_name == Attribute::standard_name(ATTR_STD_VOLUME_HEAT)) channels = 1; else if(builtin_name == Attribute::standard_name(ATTR_STD_VOLUME_COLOR)) channels = 4; @@ -1125,6 +1126,13 @@ void BlenderSession::builtin_image_info(const string &builtin_name, void *builti int3 resolution = get_int3(b_domain.domain_resolution()); int amplify = (b_domain.use_high_resolution())? b_domain.amplify() + 1: 1; + /* Velocity and heat data is always low-resolution. */ + if(builtin_name == Attribute::standard_name(ATTR_STD_VOLUME_VELOCITY) || + builtin_name == Attribute::standard_name(ATTR_STD_VOLUME_HEAT)) + { + amplify = 1; + } + width = resolution.x * amplify; height = resolution.y * amplify; depth = resolution.z * amplify; @@ -1248,8 +1256,10 @@ bool BlenderSession::builtin_image_float_pixels(const string &builtin_name, void int3 resolution = get_int3(b_domain.domain_resolution()); int length, amplify = (b_domain.use_high_resolution())? b_domain.amplify() + 1: 1; - /* Velocity data is always low-resolution. */ - if(builtin_name == Attribute::standard_name(ATTR_STD_VOLUME_VELOCITY)) { + /* Velocity and heat data is always low-resolution. */ + if(builtin_name == Attribute::standard_name(ATTR_STD_VOLUME_VELOCITY) || + builtin_name == Attribute::standard_name(ATTR_STD_VOLUME_HEAT)) + { amplify = 1; } @@ -1260,7 +1270,6 @@ bool BlenderSession::builtin_image_float_pixels(const string &builtin_name, void if(builtin_name == Attribute::standard_name(ATTR_STD_VOLUME_DENSITY)) { SmokeDomainSettings_density_grid_get_length(&b_domain.ptr, &length); - if(length == num_pixels) { SmokeDomainSettings_density_grid_get(&b_domain.ptr, pixels); return true; @@ -1270,7 +1279,6 @@ bool BlenderSession::builtin_image_float_pixels(const string &builtin_name, void /* this is in range 0..1, and interpreted by the OpenGL smoke viewer * as 1500..3000 K with the first part faded to zero density */ SmokeDomainSettings_flame_grid_get_length(&b_domain.ptr, &length); - if(length == num_pixels) { SmokeDomainSettings_flame_grid_get(&b_domain.ptr, pixels); return true; @@ -1279,7 +1287,6 @@ bool BlenderSession::builtin_image_float_pixels(const string &builtin_name, void else if(builtin_name == Attribute::standard_name(ATTR_STD_VOLUME_COLOR)) { /* the RGB is "premultiplied" by density for better interpolation results */ SmokeDomainSettings_color_grid_get_length(&b_domain.ptr, &length); - if(length == num_pixels*4) { SmokeDomainSettings_color_grid_get(&b_domain.ptr, pixels); return true; @@ -1287,12 +1294,18 @@ bool BlenderSession::builtin_image_float_pixels(const string &builtin_name, void } else if(builtin_name == Attribute::standard_name(ATTR_STD_VOLUME_VELOCITY)) { SmokeDomainSettings_velocity_grid_get_length(&b_domain.ptr, &length); - if(length == num_pixels*3) { SmokeDomainSettings_velocity_grid_get(&b_domain.ptr, pixels); return true; } } + else if(builtin_name == Attribute::standard_name(ATTR_STD_VOLUME_HEAT)) { + SmokeDomainSettings_heat_grid_get_length(&b_domain.ptr, &length); + if(length == num_pixels) { + SmokeDomainSettings_heat_grid_get(&b_domain.ptr, pixels); + return true; + } + } else { fprintf(stderr, "Cycles error: unknown volume attribute %s, skipping\n", |