[Bf-blender-cvs] [f4ec58f] openvdb: Merge branch 'master' into cvdb_ray_isect
Lukas Tönne
noreply at git.blender.org
Sun Nov 13 21:44:43 CET 2016
Commit: f4ec58f465aa2a655270fa8d0a3fcc8d13e72dfb
Author: Lukas Tönne
Date: Wed Nov 9 12:01:30 2016 +0100
Branches: openvdb
https://developer.blender.org/rBf4ec58f465aa2a655270fa8d0a3fcc8d13e72dfb
Merge branch 'master' into cvdb_ray_isect
===================================================================
===================================================================
diff --cc intern/cycles/CMakeLists.txt
index f8a4563,97854a8..cf0248b
--- a/intern/cycles/CMakeLists.txt
+++ b/intern/cycles/CMakeLists.txt
@@@ -146,15 -146,14 +146,23 @@@ if(WITH_CYCLES_OSL
)
endif()
+ if(WITH_CYCLES_OPENSUBDIV)
+ add_definitions(-DWITH_OPENSUBDIV)
+ include_directories(
+ SYSTEM
+ ${OPENSUBDIV_INCLUDE_DIR}
+ )
+ endif()
+
+if(WITH_OPENVDB)
+ add_definitions(-DWITH_OPENVDB)
+ add_definitions(-DDWREAL_IS_DOUBLE=0)
+ add_definitions(-DTBB_USE_EXCEPTIONS=0)
+ include_directories(
+ ${OPENVDB_INCLUDE_DIRS}
+ )
+endif()
+
set(WITH_CYCLES_DEVICE_OPENCL TRUE)
set(WITH_CYCLES_DEVICE_CUDA TRUE)
set(WITH_CYCLES_DEVICE_MULTI TRUE)
diff --cc intern/cycles/blender/blender_mesh.cpp
index 3ff447f,fab03c7..b95365d
--- a/intern/cycles/blender/blender_mesh.cpp
+++ b/intern/cycles/blender/blender_mesh.cpp
@@@ -821,16 -965,16 +965,16 @@@ Mesh *BlenderSync::sync_mesh(BL::Object
if(b_mesh) {
if(render_layer.use_surfaces && !hide_tris) {
- if(cmesh.data && experimental && RNA_enum_get(&cmesh, "subdivision_type"))
- create_subd_mesh(scene, mesh, b_ob, b_mesh, &cmesh, used_shaders,
+ if(mesh->subdivision_type != Mesh::SUBDIVISION_NONE)
+ create_subd_mesh(scene, mesh, b_ob, b_mesh, used_shaders,
dicing_rate, max_subdivisions);
else
- create_mesh(scene, mesh, b_mesh, used_shaders);
+ 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_ob, mesh, b_scene.frame_current());
}
- if(render_layer.use_hair)
+ if(render_layer.use_hair && mesh->subdivision_type == Mesh::SUBDIVISION_NONE)
sync_curves(mesh, b_mesh, b_ob, false);
if(can_free_caches) {
diff --cc intern/cycles/blender/blender_shader.cpp
index 6b7456b,f63f94a..ecabd40
--- a/intern/cycles/blender/blender_shader.cpp
+++ b/intern/cycles/blender/blender_shader.cpp
@@@ -836,37 -845,11 +845,39 @@@ static ShaderNode *add_node(Scene *scen
transform_inverse(get_transform(b_ob.matrix_world()));
}
}
+ else if(b_node.is_a(&RNA_ShaderNodeOpenVDB)) {
+ BL::ShaderNodeOpenVDB b_vdb_node(b_node);
+ OpenVDBNode *vdb_node = new OpenVDBNode();
+ vdb_node->filename = b_vdb_node.filename();
+ vdb_node->sampling = b_vdb_node.sampling();
+
+ /* TODO(kevin) */
+ if(b_vdb_node.source() == BL::ShaderNodeOpenVDB::source_SEQUENCE) {
+ string filename = b_vdb_node.filename();
+ string basename = filename.substr(0, filename.size() - 8);
+ stringstream ss;
+ ss << b_scene.frame_current();
+ string frame = ss.str();
+ frame.insert(frame.begin(), 4 - frame.size(), '0');
+
+ vdb_node->filename = ustring::format("%s%s.vdb", basename, frame);
+ }
+
+ BL::Node::outputs_iterator b_output;
+
+ for(b_vdb_node.outputs.begin(b_output); b_output != b_vdb_node.outputs.end(); ++b_output) {
+ vdb_node->output_names.push_back(ustring(b_output->name()));
+ vdb_node->add_output(vdb_node->output_names.back(),
+ convert_socket_type(*b_output));
+ }
+
+ node = vdb_node;
+ }
- if(node)
+ if(node) {
+ node->name = b_node.name();
graph->add(node);
+ }
return node;
}
diff --cc intern/cycles/kernel/CMakeLists.txt
index 74ed36e,694f19a..7a9b828
--- a/intern/cycles/kernel/CMakeLists.txt
+++ b/intern/cycles/kernel/CMakeLists.txt
@@@ -139,8 -143,8 +143,9 @@@ set(SRC_SVM_HEADER
svm/svm_noise.h
svm/svm_noisetex.h
svm/svm_normal.h
+ svm/svm_openvdb.h
svm/svm_ramp.h
+ svm/svm_ramp_util.h
svm/svm_sepcomb_hsv.h
svm/svm_sepcomb_vector.h
svm/svm_sky.h
diff --cc intern/cycles/kernel/bvh/bvh_volume_all.h
index 5cf00b3,529848e..c5a3bf3
--- a/intern/cycles/kernel/bvh/bvh_volume_all.h
+++ b/intern/cycles/kernel/bvh/bvh_volume_all.h
@@@ -94,35 -99,8 +99,35 @@@ uint BVH_FUNCTION_FULL_NAME(BVH)(Kernel
ssef tsplat(0.0f, 0.0f, -isect_t, -isect_t);
gen_idirsplat_swap(pn, shuf_identity, shuf_swap, idir, idirsplat, shufflexyz);
- #endif
+ #endif /* __KERNEL_SSE2__ */
+#if 1
+ /* try to intersect with VDB volumes */
+ int num_volumes = kernel_data.tables.num_volumes;
+
+ for(int i = 0; i < num_volumes; i++) {
+ float t;
+
+ if(kg->float_volumes[i]->intersect(ray, &t)) {
+ isect_array->type = PRIMITIVE_VOLUME;
+ isect_array->prim = i;
+ isect_array->t = t;
+ isect_array->u = 1.0f;
+ isect_array->v = 1.0f;
+ isect_array++;
+ num_hits++;
+
+ if(num_hits == max_hits) {
+ return num_hits;
+ }
+ }
+ }
+
+ if(num_hits > 0) {
+ return num_hits;
+ }
+#endif
+
IsectPrecalc isect_precalc;
triangle_intersect_precalc(dir, &isect_precalc);
diff --cc intern/cycles/kernel/geom/geom_volume.h
index 165fc12,03724c95..8274d19
--- a/intern/cycles/kernel/geom/geom_volume.h
+++ b/intern/cycles/kernel/geom/geom_volume.h
@@@ -61,25 -62,25 +62,27 @@@ ccl_device_inline float3 volume_normali
return P;
}
- ccl_device float volume_attribute_float(KernelGlobals *kg, const ShaderData *sd, AttributeElement elem, int id, float *dx, float *dy)
+ ccl_device float volume_attribute_float(KernelGlobals *kg, const ShaderData *sd, const AttributeDescriptor desc, float *dx, float *dy)
{
- float3 P = volume_normalized_position(kg, sd, sd->P);
- #ifdef __KERNEL_GPU__
+ float3 P = volume_normalized_position(kg, sd, ccl_fetch(sd, P));
+ #ifdef __KERNEL_CUDA__
# if __CUDA_ARCH__ >= 300
- CUtexObject tex = kernel_tex_fetch(__bindless_mapping, id);
+ CUtexObject tex = kernel_tex_fetch(__bindless_mapping, desc.offset);
float f = kernel_tex_image_interp_3d_float(tex, P.x, P.y, P.z);
- float4 r = make_float4(f, f, f, 1.0);
+ float4 r = make_float4(f, f, f, 1.0f);
# else
- float4 r = volume_image_texture_3d(id, P.x, P.y, P.z);
+ float4 r = volume_image_texture_3d(desc.offset, P.x, P.y, P.z);
# endif
+ #elif defined(__KERNEL_OPENCL__)
+ float4 r = kernel_tex_image_interp_3d(kg, desc.offset, P.x, P.y, P.z);
#else
float4 r;
- if(sd->flag & SD_VOLUME_CUBIC)
- r = kernel_tex_image_interp_3d_ex(desc.offset, P.x, P.y, P.z, INTERPOLATION_CUBIC);
- else
- r = kernel_tex_image_interp_3d(desc.offset, P.x, P.y, P.z);
+// if(sd->flag & SD_VOLUME_CUBIC)
- // r = kernel_tex_image_interp_3d_ex(id, P.x, P.y, P.z, INTERPOLATION_CUBIC);
++// r = kernel_tex_image_interp_3d_ex(desc.offset, P.x, P.y, P.z, INTERPOLATION_CUBIC);
+// else
- // r = kernel_tex_image_interp_3d(id, P.x, P.y, P.z);
++// r = kernel_tex_image_interp_3d(desc.offset, P.x, P.y, P.z);
+
- return kernel_tex_voxel_float(id, P.x, P.y, P.z, OPENVDB_SAMPLE_POINT);
++ return kernel_tex_voxel_float(desc.offset, P.x, P.y, P.z, OPENVDB_SAMPLE_POINT);
#endif
if(dx) *dx = 0.0f;
diff --cc intern/cycles/kernel/kernel_types.h
index fe4de64,91b8661..ad5b138
--- a/intern/cycles/kernel/kernel_types.h
+++ b/intern/cycles/kernel/kernel_types.h
@@@ -559,7 -552,8 +555,9 @@@ typedef enum PrimitiveType
PRIMITIVE_MOTION_TRIANGLE = 2,
PRIMITIVE_CURVE = 4,
PRIMITIVE_MOTION_CURVE = 8,
- PRIMITIVE_VOLUME = 16,
+ /* Lamp primitive is not included below on purpose, since it is no real traceable primitive */
+ PRIMITIVE_LAMP = 16,
++ PRIMITIVE_VOLUME = 32,
PRIMITIVE_ALL_TRIANGLE = (PRIMITIVE_TRIANGLE|PRIMITIVE_MOTION_TRIANGLE),
PRIMITIVE_ALL_CURVE = (PRIMITIVE_CURVE|PRIMITIVE_MOTION_CURVE),
@@@ -1148,9 -1162,9 +1167,10 @@@ static_assert_align(KernelCurves, 16)
typedef struct KernelTables {
int beckmann_offset;
- int pad1, pad2, pad3;
+ int num_volumes;
+ int density_index, pad2;
} KernelTables;
+ static_assert_align(KernelTables, 16);
typedef struct KernelData {
KernelCamera cam;
diff --cc intern/cycles/kernel/svm/svm_types.h
index f4f1a81,5adf7d3..9867390
--- a/intern/cycles/kernel/svm/svm_types.h
+++ b/intern/cycles/kernel/svm/svm_types.h
@@@ -127,7 -130,8 +130,9 @@@ typedef enum ShaderNodeType
NODE_HAIR_INFO,
NODE_UVMAP,
NODE_TEX_VOXEL,
+ NODE_ENTER_BUMP_EVAL,
+ NODE_LEAVE_BUMP_EVAL,
+ NODE_OPENVDB,
} ShaderNodeType;
typedef enum NodeAttributeType {
diff --cc intern/cycles/render/attribute.cpp
index cbe1bb4,c0d429a..e2d09fd
--- a/intern/cycles/render/attribute.cpp
+++ b/intern/cycles/render/attribute.cpp
@@@ -291,12 -343,12 +343,12 @@@ Attribute *AttributeSet::add(ustring na
/* this is weak .. */
if(triangle_mesh)
- attr->resize(triangle_mesh->verts.size(), triangle_mesh->num_triangles(), triangle_mesh->motion_steps, 0, 0, false);
+ attr->resize(triangle_mesh, ATTR_PRIM_TRIANGLE, false);
- if(curve_mesh)
+ else if(curve_mesh)
- attr->resize(0, 0, curve_mesh->motion_steps, curve_mesh->num_curves(), curve_mesh->curve_keys.size(), false);
- else
- attr->resize(0, 0, 0, 0, 0, false);
-
+ attr->resize(curve_mesh, ATTR_PRIM_CURVE, false);
- if(subd_mesh)
++ else if(subd_mesh)
+ attr->resize(subd_mesh, ATTR_PRIM_SUBD, false);
+
return attr;
}
diff --cc intern/cycles/render/scene.h
index 4762d2b,8fec171..b55240a
--- a/intern/cycles/render/scene.h
+++ b/intern/cycles/render/scene.h
@@@ -120,11 -123,10 +124,13 @@@ public
/* opencl images */
device_vector<uchar4> tex_image_byte4_packed;
device_vector<float4> tex_image_float4_packed;
+ device_vector<uchar> tex_image_byte_packed;
+ device_vector<float> tex_image_float_packed;
device_vector<uint4> tex_image_packed_info;
+ /* volume */
+ device_vector<uint> vol_shader;
+
KernelData data;
};
diff --cc intern/cycles/render/session.cpp
index bfa1add,9d8c9fe..6ea902f
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@@ -630,12 -630,16 +630,17 @@@ DeviceRequestedFeatures Session::get_re
requested_features.use_camera_motion = scene->camera->use_motion;
foreach(Object *object, scene->objects) {
Mesh *mesh = object->mesh;
- if(mesh->num_curves()) {
- requested_features.use_hair = true;
+ if(mesh) {
+ if(mesh->num_curves()) {
+ requested_features.use_hair = true;
+ }
}
- requested_features.use_object_motion |= object->use_motion | mesh->use_motion_blur;
- requested_features.use_camera_motion |= mesh->use_motion_blur;
+ requested_features.use_object_motion |= object->use_m
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list