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. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs