[Bf-blender-cvs] [c987ad81b68] soc-2018-cycles-volumes: Cleanup and bug fixes.
Geraldine Chua
noreply at git.blender.org
Mon Jul 16 15:41:47 CEST 2018
Commit: c987ad81b684f4f0b361ff11325786d268c603c1
Author: Geraldine Chua
Date: Mon Jul 16 20:57:55 2018 +0800
Branches: soc-2018-cycles-volumes
https://developer.blender.org/rBc987ad81b684f4f0b361ff11325786d268c603c1
Cleanup and bug fixes.
===================================================================
M intern/cycles/blender/blender_mesh.cpp
M intern/cycles/blender/blender_session.cpp
M intern/cycles/blender/blender_shader.cpp
M intern/cycles/device/device_cpu.cpp
M intern/cycles/device/device_memory_openvdb.h
M intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h
M intern/cycles/render/image.cpp
M intern/cycles/render/image.h
M intern/cycles/render/mesh_volume.cpp
M intern/cycles/render/nodes.cpp
M intern/cycles/render/openvdb.cpp
M intern/cycles/render/openvdb.h
M intern/cycles/util/util_sparse_grid.h
M intern/cycles/util/util_texture.h
M intern/openvdb/openvdb_capi.cc
M intern/openvdb/openvdb_capi.h
M source/blender/blenkernel/intern/pointcache.c
===================================================================
diff --git a/intern/cycles/blender/blender_mesh.cpp b/intern/cycles/blender/blender_mesh.cpp
index f70e859ba8a..d8261d7d86d 100644
--- a/intern/cycles/blender/blender_mesh.cpp
+++ b/intern/cycles/blender/blender_mesh.cpp
@@ -324,7 +324,8 @@ static void mikk_compute_tangents(const BL::Mesh& b_mesh,
/* Create Volume Attribute */
-static void create_mesh_volume_attribute(BL::Object& b_ob,
+static void create_mesh_volume_attribute(BL::BlendData& b_data,
+ BL::Object& b_ob,
Mesh *mesh,
ImageManager *image_manager,
AttributeStandard std,
@@ -339,15 +340,31 @@ static void create_mesh_volume_attribute(BL::Object& b_ob,
Attribute *attr = mesh->attributes.add(std);
VoxelAttribute *volume_data = attr->data_voxel();
- ImageMetaData metadata;
bool animated = false;
bool use_alpha = true;
bool make_sparse = true;
+ string filename;
+ void *builtin_data;
+ ImageMetaData metadata;
+
+ if(b_domain.is_openvdb()) {
+ BL::ID b_id = b_ob.data();
+ filename = blender_absolute_path(b_data,
+ b_id,
+ b_domain.openvdb_filepath());
+ builtin_data = NULL;
+ metadata.grid_name = Attribute::standard_name(std);
+ }
+ else {
+ filename = Attribute::standard_name(std);
+ builtin_data = b_ob.ptr.data;
+ }
+
volume_data->manager = image_manager;
volume_data->slot = image_manager->add_image(
- Attribute::standard_name(std),
- b_ob.ptr.data,
+ filename,
+ builtin_data,
animated,
frame,
INTERPOLATION_LINEAR,
@@ -359,23 +376,24 @@ static void create_mesh_volume_attribute(BL::Object& b_ob,
}
static void create_mesh_volume_attributes(Scene *scene,
+ BL::BlendData& b_data,
BL::Object& b_ob,
Mesh *mesh,
float frame)
{
/* for smoke volume rendering */
if(mesh->need_attribute(scene, ATTR_STD_VOLUME_DENSITY))
- create_mesh_volume_attribute(b_ob, mesh, scene->image_manager, ATTR_STD_VOLUME_DENSITY, frame);
+ create_mesh_volume_attribute(b_data, b_ob, mesh, scene->image_manager, ATTR_STD_VOLUME_DENSITY, frame);
if(mesh->need_attribute(scene, ATTR_STD_VOLUME_COLOR))
- create_mesh_volume_attribute(b_ob, mesh, scene->image_manager, ATTR_STD_VOLUME_COLOR, frame);
+ create_mesh_volume_attribute(b_data, b_ob, mesh, scene->image_manager, ATTR_STD_VOLUME_COLOR, frame);
if(mesh->need_attribute(scene, ATTR_STD_VOLUME_FLAME))
- create_mesh_volume_attribute(b_ob, mesh, scene->image_manager, ATTR_STD_VOLUME_FLAME, frame);
+ create_mesh_volume_attribute(b_data, b_ob, mesh, scene->image_manager, ATTR_STD_VOLUME_FLAME, frame);
if(mesh->need_attribute(scene, ATTR_STD_VOLUME_HEAT))
- create_mesh_volume_attribute(b_ob, mesh, scene->image_manager, ATTR_STD_VOLUME_HEAT, frame);
+ create_mesh_volume_attribute(b_data, b_ob, mesh, scene->image_manager, ATTR_STD_VOLUME_HEAT, frame);
if(mesh->need_attribute(scene, ATTR_STD_VOLUME_TEMPERATURE))
- create_mesh_volume_attribute(b_ob, mesh, scene->image_manager, ATTR_STD_VOLUME_TEMPERATURE, frame);
+ create_mesh_volume_attribute(b_data, b_ob, mesh, scene->image_manager, ATTR_STD_VOLUME_TEMPERATURE, frame);
if(mesh->need_attribute(scene, ATTR_STD_VOLUME_VELOCITY))
- create_mesh_volume_attribute(b_ob, mesh, scene->image_manager, ATTR_STD_VOLUME_VELOCITY, frame);
+ create_mesh_volume_attribute(b_data, b_ob, mesh, scene->image_manager, ATTR_STD_VOLUME_VELOCITY, frame);
}
/* Create vertex color attributes. */
@@ -1203,7 +1221,7 @@ Mesh *BlenderSync::sync_mesh(BL::Object& b_ob,
else
create_mesh(scene, mesh, b_mesh, used_shaders, false);
- create_mesh_volume_attributes(scene, b_ob, mesh, b_scene.frame_current());
+ create_mesh_volume_attributes(scene, b_data, b_ob, mesh, b_scene.frame_current());
}
if(render_layer.use_hair && mesh->subdivision_type == Mesh::SUBDIVISION_NONE)
diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index 481057e308c..00d23b9095e 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -1082,11 +1082,6 @@ void BlenderSession::builtin_image_info(const string &builtin_name,
metadata.width = resolution.x * amplify;
metadata.height = resolution.y * amplify;
metadata.depth = resolution.z * amplify;
-
- if(b_domain.is_openvdb()) {
- metadata.openvdb_filepath = blender_absolute_path(b_data, b_id,
- b_domain.openvdb_filepath());
- }
}
else {
/* TODO(sergey): Check we're indeed in shader node tree. */
diff --git a/intern/cycles/blender/blender_shader.cpp b/intern/cycles/blender/blender_shader.cpp
index 9896dd1d94f..7c7ebf0ff01 100644
--- a/intern/cycles/blender/blender_shader.cpp
+++ b/intern/cycles/blender/blender_shader.cpp
@@ -673,7 +673,8 @@ static ShaderNode *add_node(Scene *scene,
image->builtin_data,
get_image_interpolation(b_image_node),
get_image_extension(b_image_node),
- image->use_alpha);
+ image->use_alpha,
+ string());
}
}
image->color_space = (NodeImageColorSpace)b_image_node.color_space();
@@ -721,7 +722,8 @@ static ShaderNode *add_node(Scene *scene,
env->builtin_data,
get_image_interpolation(b_env_node),
EXTENSION_REPEAT,
- env->use_alpha);
+ env->use_alpha,
+ string());
}
}
env->color_space = (NodeImageColorSpace)b_env_node.color_space();
@@ -875,7 +877,8 @@ static ShaderNode *add_node(Scene *scene,
point_density->builtin_data,
point_density->interpolation,
EXTENSION_CLIP,
- true);
+ true,
+ string());
}
node = point_density;
diff --git a/intern/cycles/device/device_cpu.cpp b/intern/cycles/device/device_cpu.cpp
index f38225f867a..f29b54ff237 100644
--- a/intern/cycles/device/device_cpu.cpp
+++ b/intern/cycles/device/device_cpu.cpp
@@ -432,9 +432,13 @@ public:
info.util = (uint64_t)grid_info->host_pointer;
info.tiled_width = get_tile_res(info.width);
info.tiled_height = get_tile_res(info.height);
- info.last_tile_width = info.width % TILE_SIZE;
- info.last_tile_height = info.height % TILE_SIZE;
+ info.even_width = info.width - (info.width % TILE_SIZE);
+ info.even_height = info.height - (info.height % TILE_SIZE);
+ info.last_tile_dim = 0;
+ info.last_tile_dim |= ((info.width % TILE_SIZE) << LAST_TILE_WIDTH_MASK);
+ info.last_tile_dim |= ((info.height % TILE_SIZE) << LAST_TILE_HEIGHT_MASK);
break;
+ case IMAGE_GRID_TYPE_DEFAULT:
default:
info.util = 0;
}
diff --git a/intern/cycles/device/device_memory_openvdb.h b/intern/cycles/device/device_memory_openvdb.h
index a387612b3dd..eb9fbe4912b 100644
--- a/intern/cycles/device/device_memory_openvdb.h
+++ b/intern/cycles/device/device_memory_openvdb.h
@@ -10,7 +10,17 @@
CCL_NAMESPACE_BEGIN
-template<typename GridType, typename DataType>
+template<> struct device_type_traits<openvdb::Vec3SGrid> {
+ static const DataType data_type = TYPE_FLOAT;
+ static const int num_elements = 4;
+};
+
+template<> struct device_type_traits<openvdb::FloatGrid> {
+ static const DataType data_type = TYPE_FLOAT;
+ static const int num_elements = 1;
+};
+
+template<typename GridType>
class device_openvdb : public device_memory
{
public:
@@ -26,8 +36,8 @@ public:
{
using namespace openvdb;
- data_type = device_type_traits<DataType>::data_type;
- data_elements = device_type_traits<DataType>::num_elements;
+ data_type = device_type_traits<GridType>::data_type;
+ data_elements = device_type_traits<GridType>::num_elements;
assert(data_elements > 0);
diff --git a/intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h b/intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h
index 22efcff344c..0b05dac544b 100644
--- a/intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h
+++ b/intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h
@@ -17,8 +17,6 @@
#ifndef __KERNEL_CPU_IMAGE_H__
#define __KERNEL_CPU_IMAGE_H__
-#include "util/util_sparse_grid.h"
-
#ifdef WITH_OPENVDB
#include <openvdb/openvdb.h>
#endif
@@ -86,6 +84,7 @@ struct TextureInterpolator {
int x, int y, int z,
int width, int height,
int /*tiw*/, int /*tih*/,
+ int /*evw*/, int /*evh*/,
int /*ltw*/, int /*lth*/)
{
return read(data[x + width * (y + z * height)]);
@@ -97,19 +96,18 @@ struct TextureInterpolator {
int x, int y, int z,
int /*width*/, int /*height*/,
int tiw, int tih,
+ int evw, int evh,
int ltw, int lth)
{
int tix = x / TILE_SIZE, itix = x % TILE_SIZE,
tiy = y / TILE_SIZE, itiy = y % TILE_SIZE,
tiz = z / TILE_SIZE, itiz = z % TILE_SIZE;
- int dense_index = (tix + tiw * (tiy + tiz * tih)) * 2;
- int sparse_index = grid_info[dense_index];
- int dims = grid_info[dense_index + 1];
+ int sparse_index = grid_info[(tix + tiw * (tiy + tiz * tih))];
if(sparse_index < 0) {
return make_float4(0.0f);
}
- int itiw = dims & (1 << ST_SHIFT_TRUNCATE_WIDTH) ? ltw : TILE_SIZE;
- int itih = dims & (1 << ST_SHIFT_TRUNCATE_HEIGHT) ? lth : TILE_SIZE;
+ int itiw = (x > evw) ? ltw : TILE_SIZE;
+ int itih = (y > evh) ? lth : TILE_SIZE;
int in_tile_index = itix + itiw * (itiy + itiz * itih);
return read(data[sparse_index + in_tile_index]);
}
@@ -121,6 +119,7 @@ struct TextureInterpolator {
int x, int y, int z,
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list