Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/intern
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2018-03-19 22:18:24 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2018-03-19 23:22:15 +0300
commitfddb4dee8a880df138a5163825625a19d0ec2f1c (patch)
treecf295f4d4e6b0b860ec66f9096e4ba505993f239 /intern
parentb8eca8e07d4e0c2061464b485f4c2e1e5d23d8cc (diff)
Fix T54356: volume rendering bug using just color attribute.
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/kernel/geom/geom_volume.h2
-rw-r--r--intern/cycles/render/mesh_volume.cpp46
2 files changed, 4 insertions, 44 deletions
diff --git a/intern/cycles/kernel/geom/geom_volume.h b/intern/cycles/kernel/geom/geom_volume.h
index a4e47384b25..346f228e961 100644
--- a/intern/cycles/kernel/geom/geom_volume.h
+++ b/intern/cycles/kernel/geom/geom_volume.h
@@ -68,7 +68,7 @@ ccl_device float3 volume_attribute_float3(KernelGlobals *kg, const ShaderData *s
if(dx) *dx = make_float3(0.0f, 0.0f, 0.0f);
if(dy) *dy = make_float3(0.0f, 0.0f, 0.0f);
- if(r.w > 1e-8f && r.w != 1.0f) {
+ if(r.w > 1e-6f && r.w != 1.0f) {
/* For RGBA colors, unpremultiply after interpolation. */
return float4_to_float3(r) / r.w;
}
diff --git a/intern/cycles/render/mesh_volume.cpp b/intern/cycles/render/mesh_volume.cpp
index 3571beb40d6..d1c49b456ff 100644
--- a/intern/cycles/render/mesh_volume.cpp
+++ b/intern/cycles/render/mesh_volume.cpp
@@ -495,54 +495,14 @@ void MeshManager::create_volume_mesh(Scene *scene,
for(size_t i = 0; i < voxel_grids.size(); ++i) {
const VoxelAttributeGrid &voxel_grid = voxel_grids[i];
+ const int channels = voxel_grid.channels;
- if(voxel_grid.channels == 1) {
- if(voxel_grid.data[voxel_index] >= isovalue) {
+ for(int c = 0; c < channels; c++) {
+ if(voxel_grid.data[voxel_index * channels + c] >= isovalue) {
builder.add_node_with_padding(x, y, z);
break;
}
}
- else if(voxel_grid.channels == 3) {
- voxel_index = compute_voxel_index(resolution, x*3, y, z);
-
- if(voxel_grid.data[voxel_index] >= isovalue) {
- builder.add_node_with_padding(x, y, z);
- break;
- }
-
- if(voxel_grid.data[voxel_index + 1] >= isovalue) {
- builder.add_node_with_padding(x, y, z);
- break;
- }
-
- if(voxel_grid.data[voxel_index + 2] >= isovalue) {
- builder.add_node_with_padding(x, y, z);
- break;
- }
- }
- else if(voxel_grid.channels == 4) {
- voxel_index = compute_voxel_index(resolution, x*4, y, z);
-
- /* check alpha first */
- if(voxel_grid.data[voxel_index + 3] < isovalue) {
- continue;
- }
-
- if(voxel_grid.data[voxel_index] >= isovalue) {
- builder.add_node_with_padding(x, y, z);
- continue;
- }
-
- if(voxel_grid.data[voxel_index + 1] >= isovalue) {
- builder.add_node_with_padding(x, y, z);
- continue;
- }
-
- if(voxel_grid.data[voxel_index + 2] >= isovalue) {
- builder.add_node_with_padding(x, y, z);
- continue;
- }
- }
}
}
}