[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