Commit: c14b0f3f7a623d2d437e478a1a4e5413a939bebe
Author: Brecht Van Lommel
Date: Wed May 18 01:50:35 2016 +0200
Branches: compositor-2016
https://developer.blender.org/rBc14b0f3f7a623d2d437e478a1a4e5413a939bebe
Fix issue in with multiple importance sampling in recent code refactor.
===================================================================
M intern/cycles/render/light.cpp
M intern/cycles/render/mesh_displace.cpp
===================================================================
diff --git a/intern/cycles/render/light.cpp b/intern/cycles/render/light.cpp
index 4564b93..91a9f22 100644
--- a/intern/cycles/render/light.cpp
+++ b/intern/cycles/render/light.cpp
@@ -233,7 +233,9 @@ void LightManager::device_update_distribution(Device
*device, DeviceScene *dscen
/* count triangles */
if(have_emission) {
for(size_t i = 0; i < mesh->triangles.size(); i++) {
- Shader *shader =
scene->shaders[mesh->shader[i]];
+ int shader_index = mesh->shader[i];
+ Shader *shader = (shader_index <
mesh->used_shaders.size()) ?
+ mesh->used_shaders[shader_index] :
scene->default_surface;
if(shader->use_mis &&
shader->has_surface_emission)
num_triangles++;
@@ -303,7 +305,9 @@ void LightManager::device_update_distribution(Device
*device, DeviceScene *dscen
}
for(size_t i = 0; i < mesh->triangles.size(); i++) {
- Shader *shader =
scene->shaders[mesh->shader[i]];
+ int shader_index = mesh->shader[i];
+ Shader *shader = (shader_index <
mesh->used_shaders.size()) ?
+ mesh->used_shaders[shader_index] :
scene->default_surface;
if(shader->use_mis &&
shader->has_surface_emission) {
distribution[offset].x = totarea;
diff --git a/intern/cycles/render/mesh_displace.cpp
b/intern/cycles/render/mesh_displace.cpp
index df8be4c..d19bf20 100644
--- a/intern/cycles/render/mesh_displace.cpp
+++ b/intern/cycles/render/mesh_displace.cpp
@@ -62,7 +62,9 @@ bool MeshManager::displace(Device *device, DeviceScene
*dscene, Scene *scene, Me
for(size_t i = 0; i < mesh->triangles.size(); i++) {
Mesh::Triangle t = mesh->triangles[i];
- Shader *shader = scene->shaders[mesh->shader[i]];
+ int shader_index = mesh->shader[i];
+ Shader *shader = (shader_index < mesh->used_shaders.size()) ?
+ mesh->used_shaders[shader_index] :
scene->default_surface;
if(!shader->has_displacement)
continue;
@@ -146,7 +148,9 @@ bool MeshManager::displace(Device *device, DeviceScene
*dscene, Scene *scene, Me
Attribute *attr_mP =
mesh->attributes.find(ATTR_STD_MOTION_VERTEX_POSITION);
for(size_t i = 0; i < mesh->triangles.size(); i++) {
Mesh::Triangle t = mesh->triangles[i];
- Shader *shader = scene->shaders[mesh->shader[i]];
+ int shader_index = mesh->shader[i];
+ Shader *shader = (shader_index < mesh->used_shaders.size()) ?
+ mesh->used_shaders[shader_index] :
scene->default_surface;
if(!shader->has_displacement)
continue;
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs