Fix T45234: Stereo Parallel vs. Off-Axis
Parallel rendering was not working. The idea of having parallel convergence mode to render as parallel but visualize as off-axis was good, but it was leading to some complications in the code. I think it's more clear to the user if parallel looks and render as parallel, and if she wants to pre-visualize the converged planes, simply temporarily set the camera to off-axis.
This commit is contained in:
@@ -153,10 +153,9 @@ class DATA_PT_camera_stereoscopy(CameraButtonsPanel, Panel):
|
|||||||
col = layout.column()
|
col = layout.column()
|
||||||
col.row().prop(st, "convergence_mode", expand=True)
|
col.row().prop(st, "convergence_mode", expand=True)
|
||||||
|
|
||||||
if st.convergence_mode == 'PARALLEL':
|
sub = col.column()
|
||||||
col.prop(st, "viewport_convergence")
|
sub.active = st.convergence_mode == 'OFFAXIS'
|
||||||
else:
|
sub.prop(st, "convergence_distance")
|
||||||
col.prop(st, "convergence_distance")
|
|
||||||
|
|
||||||
col.prop(st, "interocular_distance")
|
col.prop(st, "interocular_distance")
|
||||||
|
|
||||||
|
|||||||
@@ -908,6 +908,9 @@ static float camera_stereo3d_shift_x(Object *camera, const char *viewname)
|
|||||||
convergence_mode = data->stereo.convergence_mode;
|
convergence_mode = data->stereo.convergence_mode;
|
||||||
pivot = data->stereo.pivot;
|
pivot = data->stereo.pivot;
|
||||||
|
|
||||||
|
if (convergence_mode != CAM_S3D_OFFAXIS)
|
||||||
|
return shift;
|
||||||
|
|
||||||
if (((pivot == CAM_S3D_PIVOT_LEFT) && is_left) ||
|
if (((pivot == CAM_S3D_PIVOT_LEFT) && is_left) ||
|
||||||
((pivot == CAM_S3D_PIVOT_RIGHT) && !is_left))
|
((pivot == CAM_S3D_PIVOT_RIGHT) && !is_left))
|
||||||
{
|
{
|
||||||
@@ -918,11 +921,7 @@ static float camera_stereo3d_shift_x(Object *camera, const char *viewname)
|
|||||||
fac = 0.5f;
|
fac = 0.5f;
|
||||||
|
|
||||||
fac_signed = is_left ? fac : -fac;
|
fac_signed = is_left ? fac : -fac;
|
||||||
|
shift += ((interocular_distance / data->sensor_x) * (data->lens / convergence_distance)) * fac_signed;
|
||||||
/* Note: in viewport, parallel renders as offaxis, but in render it does parallel */
|
|
||||||
if (ELEM(convergence_mode, CAM_S3D_OFFAXIS, CAM_S3D_PARALLEL)) {
|
|
||||||
shift += ((interocular_distance / data->sensor_x) * (data->lens / convergence_distance)) * fac_signed;
|
|
||||||
}
|
|
||||||
|
|
||||||
return shift;
|
return shift;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -144,15 +144,6 @@ static void rna_def_camera_stereo_data(BlenderRNA *brna)
|
|||||||
"The converge point for the stereo cameras "
|
"The converge point for the stereo cameras "
|
||||||
"(often the distance between a projector and the projection screen)");
|
"(often the distance between a projector and the projection screen)");
|
||||||
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
|
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
|
||||||
|
|
||||||
prop = RNA_def_property(srna, "viewport_convergence", PROP_FLOAT, PROP_DISTANCE);
|
|
||||||
RNA_def_property_float_sdna(prop, NULL, "convergence_distance");
|
|
||||||
RNA_def_property_range(prop, 0.00001f, FLT_MAX);
|
|
||||||
RNA_def_property_ui_range(prop, 0.0f, 15.f, 1, 2);
|
|
||||||
RNA_def_property_ui_text(prop, "Viewport Convergence",
|
|
||||||
"Preview convergence distance for the stereo effect in the viewport "
|
|
||||||
"(it does not affect the render!)");
|
|
||||||
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RNA_def_camera(BlenderRNA *brna)
|
void RNA_def_camera(BlenderRNA *brna)
|
||||||
|
|||||||
Reference in New Issue
Block a user