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/source
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2016-05-17 15:12:29 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2016-05-18 11:56:57 +0300
commitcbe7f9dd03634a29082f51d05a2b1b71c6fc6aef (patch)
treec078fa28ca7fd0484076e4d7bd0a61924ee7d248 /source
parent7b356a856540a1affa5dc85360183418e6337a5a (diff)
Cycles: Pole merging for spherical stereo
The idea of pole merge is to fade interocular distance after a certain altitude to zero when altitude goes closer to a pole. This should prevent annoyances looking up in the sky or down to the bottom. Works for both panorama and perspective cameras when Spherical Stereo is enabled. Reviewers: dfelinto, brecht Reviewed By: brecht Subscribers: sebastian_k Differential Revision: https://developer.blender.org/D1998
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/intern/camera.c2
-rw-r--r--source/blender/blenloader/intern/versioning_270.c11
-rw-r--r--source/blender/makesdna/DNA_camera_types.h5
-rw-r--r--source/blender/makesrna/intern/rna_camera.c18
4 files changed, 36 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/camera.c b/source/blender/blenkernel/intern/camera.c
index bdf3432e6ea..96bac2c2f41 100644
--- a/source/blender/blenkernel/intern/camera.c
+++ b/source/blender/blenkernel/intern/camera.c
@@ -76,6 +76,8 @@ void BKE_camera_init(Camera *cam)
/* stereoscopy 3d */
cam->stereo.interocular_distance = 0.065f;
cam->stereo.convergence_distance = 30.f * 0.065f;
+ cam->stereo.pole_merge_angle_from = DEG2RAD(60.0f);
+ cam->stereo.pole_merge_angle_to = DEG2RAD(75.0f);
}
void *BKE_camera_add(Main *bmain, const char *name)
diff --git a/source/blender/blenloader/intern/versioning_270.c b/source/blender/blenloader/intern/versioning_270.c
index 58542d05879..0ea4078a5cb 100644
--- a/source/blender/blenloader/intern/versioning_270.c
+++ b/source/blender/blenloader/intern/versioning_270.c
@@ -1190,4 +1190,15 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main)
}
}
}
+
+ {
+ for (Camera *camera = main->camera.first; camera != NULL; camera = camera->id.next) {
+ if (camera->stereo.pole_merge_angle_from == 0.0f &&
+ camera->stereo.pole_merge_angle_to == 0.0f)
+ {
+ camera->stereo.pole_merge_angle_from = DEG2RAD(60.0f);
+ camera->stereo.pole_merge_angle_to = DEG2RAD(75.0f);
+ }
+ }
+ }
}
diff --git a/source/blender/makesdna/DNA_camera_types.h b/source/blender/makesdna/DNA_camera_types.h
index 7f2e1aaadf9..68741578f27 100644
--- a/source/blender/makesdna/DNA_camera_types.h
+++ b/source/blender/makesdna/DNA_camera_types.h
@@ -53,6 +53,10 @@ typedef struct CameraStereoSettings {
short pivot;
short flag;
short pad;
+ /* 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 {
@@ -152,6 +156,7 @@ enum {
/* stereo->flag */
enum {
CAM_S3D_SPHERICAL = (1 << 0),
+ CAM_S3D_POLE_MERGE = (1 << 1),
};
#ifdef __cplusplus
diff --git a/source/blender/makesrna/intern/rna_camera.c b/source/blender/makesrna/intern/rna_camera.c
index fd81f3aa46c..dcb4d65f3f9 100644
--- a/source/blender/makesrna/intern/rna_camera.c
+++ b/source/blender/makesrna/intern/rna_camera.c
@@ -151,6 +151,24 @@ static void rna_def_camera_stereo_data(BlenderRNA *brna)
"Render every pixel rotating the camera around the "
"middle of the interocular distance");
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
+
+ prop = RNA_def_property(srna, "use_pole_merge", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", CAM_S3D_POLE_MERGE);
+ RNA_def_property_ui_text(prop, "Use Pole Merge",
+ "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_from", PROP_FLOAT, PROP_ANGLE);
+ RNA_def_property_range(prop, 0.0f, M_PI / 2.0f);
+ 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)