[Bf-blender-cvs] [91688e1] cycles_panorama_experiments: Cycles: Use separate values for merge start and end angles
Sergey Sharybin
noreply at git.blender.org
Fri May 6 17:40:56 CEST 2016
Commit: 91688e1173af1b984f21f8704bb7585b85d5338f
Author: Sergey Sharybin
Date: Fri May 6 17:40:28 2016 +0200
Branches: cycles_panorama_experiments
https://developer.blender.org/rB91688e1173af1b984f21f8704bb7585b85d5338f
Cycles: Use separate values for merge start and end angles
It's handy to merge eyes before reaching the zenith.
===================================================================
M intern/cycles/blender/blender_camera.cpp
M intern/cycles/kernel/kernel_projection.h
M intern/cycles/kernel/kernel_types.h
M intern/cycles/render/camera.cpp
M intern/cycles/render/camera.h
M release/scripts/startup/bl_ui/properties_data_camera.py
M source/blender/makesdna/DNA_camera_types.h
M source/blender/makesrna/intern/rna_camera.c
===================================================================
diff --git a/intern/cycles/blender/blender_camera.cpp b/intern/cycles/blender/blender_camera.cpp
index 16aab18..9dec489 100644
--- a/intern/cycles/blender/blender_camera.cpp
+++ b/intern/cycles/blender/blender_camera.cpp
@@ -66,7 +66,8 @@ struct BlenderCamera {
float interocular_distance;
float convergence_distance;
bool use_pole_merge;
- float pole_merge_angle;
+ float pole_merge_angle_from;
+ float pole_merge_angle_to;
enum { AUTO, HORIZONTAL, VERTICAL } sensor_fit;
float sensor_width;
@@ -186,7 +187,8 @@ static void blender_camera_from_object(BlenderCamera *bcam,
bcam->use_spherical_stereo = b_engine.use_spherical_stereo(b_ob);
bcam->use_pole_merge = b_camera.stereo().use_pole_merge();
- bcam->pole_merge_angle = b_camera.stereo().pole_merge_angle();
+ bcam->pole_merge_angle_from = b_camera.stereo().pole_merge_angle_from();
+ bcam->pole_merge_angle_to = b_camera.stereo().pole_merge_angle_to();
bcam->ortho_scale = b_camera.ortho_scale();
@@ -433,7 +435,8 @@ static void blender_camera_sync(Camera *cam, BlenderCamera *bcam, int width, int
}
cam->use_pole_merge = bcam->use_pole_merge;
- cam->pole_merge_angle = bcam->pole_merge_angle;
+ cam->pole_merge_angle_from = bcam->pole_merge_angle_from;
+ cam->pole_merge_angle_to = bcam->pole_merge_angle_to;
/* anamorphic lens bokeh */
cam->aperture_ratio = bcam->aperture_ratio;
diff --git a/intern/cycles/kernel/kernel_projection.h b/intern/cycles/kernel/kernel_projection.h
index 18209b5..1d2fd33 100644
--- a/intern/cycles/kernel/kernel_projection.h
+++ b/intern/cycles/kernel/kernel_projection.h
@@ -460,10 +460,14 @@ ccl_device float3 spherical_stereo_position(KernelGlobals *kg,
}
if(kernel_data.cam.use_pole_merge) {
- const float pole_merge_angle = kernel_data.cam.pole_merge_angle;
+ const float pole_merge_angle_from = kernel_data.cam.pole_merge_angle_from,
+ pole_merge_angle_to = kernel_data.cam.pole_merge_angle_to;
float altitude = fabsf(safe_asinf(dir.z));
- if(altitude > pole_merge_angle) {
- float fac = (altitude - pole_merge_angle) / (M_PI_2_F - pole_merge_angle);
+ if(altitude > pole_merge_angle_to) {
+ interocular_offset = 0.0f;
+ }
+ else if(altitude > pole_merge_angle_from) {
+ float fac = (altitude - pole_merge_angle_from) / (pole_merge_angle_to - pole_merge_angle_from);
float fade = cosf(fac * M_PI_2_F);
interocular_offset *= fade;
}
diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h
index dfab775..557da42 100644
--- a/intern/cycles/kernel/kernel_types.h
+++ b/intern/cycles/kernel/kernel_types.h
@@ -905,7 +905,9 @@ typedef struct KernelCamera {
float interocular_offset;
float convergence_distance;
int use_pole_merge;
- float pole_merge_angle;
+ float pole_merge_angle_from;
+ float pole_merge_angle_to;
+ float pad1;
/* matrices */
Transform cameratoworld;
diff --git a/intern/cycles/render/camera.cpp b/intern/cycles/render/camera.cpp
index 5a95931..52a5a82 100644
--- a/intern/cycles/render/camera.cpp
+++ b/intern/cycles/render/camera.cpp
@@ -77,7 +77,8 @@ Camera::Camera()
interocular_distance = 0.065f;
convergence_distance = 30.0f * 0.065f;
use_pole_merge = false;
- pole_merge_angle = M_PI_F / 4.0f;
+ pole_merge_angle_from = M_PI_F / 4.0f;
+ pole_merge_angle_to = 2 * M_PI_F / 3.0f;
sensorwidth = 0.036f;
sensorheight = 0.024f;
@@ -373,7 +374,8 @@ void Camera::device_update(Device *device, DeviceScene *dscene, Scene *scene)
kcam->convergence_distance = convergence_distance;
kcam->use_pole_merge = use_pole_merge;
- kcam->pole_merge_angle = pole_merge_angle;
+ kcam->pole_merge_angle_from = pole_merge_angle_from;
+ kcam->pole_merge_angle_to = pole_merge_angle_to;
/* sensor size */
kcam->sensorwidth = sensorwidth;
diff --git a/intern/cycles/render/camera.h b/intern/cycles/render/camera.h
index f5edf6e..57b9960 100644
--- a/intern/cycles/render/camera.h
+++ b/intern/cycles/render/camera.h
@@ -105,7 +105,8 @@ public:
float interocular_distance;
float convergence_distance;
bool use_pole_merge;
- float pole_merge_angle;
+ float pole_merge_angle_from;
+ float pole_merge_angle_to;
/* anamorphic lens bokeh */
float aperture_ratio;
diff --git a/release/scripts/startup/bl_ui/properties_data_camera.py b/release/scripts/startup/bl_ui/properties_data_camera.py
index 4b121db..d502dbe 100644
--- a/release/scripts/startup/bl_ui/properties_data_camera.py
+++ b/release/scripts/startup/bl_ui/properties_data_camera.py
@@ -169,9 +169,10 @@ class DATA_PT_camera_stereoscopy(CameraButtonsPanel, Panel):
sub = col.column()
sub.active = st.use_spherical_stereo
sub.prop(st, "use_pole_merge")
- row = sub.row()
- row.active = st.use_pole_merge
- row.prop(st, "pole_merge_angle")
+ subsub = sub.column()
+ subsub.active = st.use_pole_merge
+ subsub.prop(st, "pole_merge_angle_from")
+ subsub.prop(st, "pole_merge_angle_to")
col.label(text="Pivot:")
row = col.row()
diff --git a/source/blender/makesdna/DNA_camera_types.h b/source/blender/makesdna/DNA_camera_types.h
index 990202a..6874157 100644
--- a/source/blender/makesdna/DNA_camera_types.h
+++ b/source/blender/makesdna/DNA_camera_types.h
@@ -52,10 +52,11 @@ typedef struct CameraStereoSettings {
short convergence_mode;
short pivot;
short flag;
- /* Cut-off angle at which interocular distance starts to fade to 0. */
short pad;
- float pole_merge_angle;
- float pad2;
+ /* Cut-off angle at which interocular distance start to fade down. */
+ float pole_merge_angle_from;
+ /* Cut-off angle at which interocular distance stops to fade down. */
+ float pole_merge_angle_to;
} CameraStereoSettings;
typedef struct Camera {
diff --git a/source/blender/makesrna/intern/rna_camera.c b/source/blender/makesrna/intern/rna_camera.c
index be2cfbd..a4454da 100644
--- a/source/blender/makesrna/intern/rna_camera.c
+++ b/source/blender/makesrna/intern/rna_camera.c
@@ -158,11 +158,17 @@ static void rna_def_camera_stereo_data(BlenderRNA *brna)
"Fade interocular distance to 0 after the given cutoff angle");
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
- prop = RNA_def_property(srna, "pole_merge_angle", PROP_FLOAT, PROP_ANGLE);
+ prop = RNA_def_property(srna, "pole_merge_angle_from", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_range(prop, 0.0f, M_PI / 2.0f);
- RNA_def_property_ui_text(prop, "Pole Merge Angle",
+ RNA_def_property_ui_text(prop, "Pole Merge Start Angle",
"Angle at which interocular distance starts to fade to 0");
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
+
+ prop = RNA_def_property(srna, "pole_merge_angle_to", PROP_FLOAT, PROP_ANGLE);
+ RNA_def_property_range(prop, 0.0f, M_PI / 2.0f);
+ RNA_def_property_ui_text(prop, "Pole Merge End Angle",
+ "Angle at which interocular distance is 0");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
}
void RNA_def_camera(BlenderRNA *brna)
More information about the Bf-blender-cvs
mailing list