Cycles microdisplacement: add max subdivision setting
This is to prevent situations such as when the camera gets very close to a mesh and causes it to be tessellated into an excessive amount of micropolygons. In REYES this is known as the eye-splits problem. Reviewed By: brecht Differential Revision: https://developer.blender.org/D1922
This commit is contained in:
@@ -64,10 +64,12 @@ BlenderSync::BlenderSync(BL::RenderEngine& b_engine,
|
||||
experimental(false),
|
||||
is_cpu(is_cpu),
|
||||
dicing_rate(1.0f),
|
||||
max_subdivisions(12),
|
||||
progress(progress)
|
||||
{
|
||||
PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
|
||||
dicing_rate = preview ? RNA_float_get(&cscene, "preview_dicing_rate") : RNA_float_get(&cscene, "dicing_rate");
|
||||
max_subdivisions = RNA_int_get(&cscene, "max_subdivisions");
|
||||
}
|
||||
|
||||
BlenderSync::~BlenderSync()
|
||||
@@ -127,16 +129,24 @@ bool BlenderSync::sync_recalc()
|
||||
}
|
||||
}
|
||||
|
||||
bool dicing_rate_changed = false;
|
||||
bool dicing_prop_changed = false;
|
||||
|
||||
if(experimental) {
|
||||
PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
|
||||
|
||||
float updated_dicing_rate = preview ? RNA_float_get(&cscene, "preview_dicing_rate")
|
||||
: RNA_float_get(&cscene, "dicing_rate");
|
||||
|
||||
if(dicing_rate != updated_dicing_rate) {
|
||||
dicing_rate = updated_dicing_rate;
|
||||
dicing_rate_changed = true;
|
||||
dicing_prop_changed = true;
|
||||
}
|
||||
|
||||
int updated_max_subdivisions = RNA_int_get(&cscene, "max_subdivisions");
|
||||
|
||||
if(max_subdivisions != updated_max_subdivisions) {
|
||||
max_subdivisions = updated_max_subdivisions;
|
||||
dicing_prop_changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -146,7 +156,7 @@ bool BlenderSync::sync_recalc()
|
||||
if(b_mesh->is_updated()) {
|
||||
mesh_map.set_recalc(*b_mesh);
|
||||
}
|
||||
else if(dicing_rate_changed) {
|
||||
else if(dicing_prop_changed) {
|
||||
PointerRNA cmesh = RNA_pointer_get(&b_mesh->ptr, "cycles");
|
||||
|
||||
if(RNA_enum_get(&cmesh, "subdivision_type"))
|
||||
|
||||
Reference in New Issue
Block a user