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
diff options
context:
space:
mode:
authorYimingWu <xp8110@outlook.com>2021-06-07 16:07:17 +0300
committerPhilipp Oeser <info@graphics-engineer.com>2021-12-14 19:31:34 +0300
commitd23303e27d75cef439755c8bc193128affab568a (patch)
tree79e1d7ae37cd2cfa7288cb533a5389266816bb7b
parent39ebb8be4d5916a71e012ac339b029641b31f10b (diff)
LineArt: Shifting fix for different camera fitting.
FOV was expanded to cover the shifting range, rather than to precisely cut at the image border. Now fixed. Reviewed By: Sebastian Parborg (zeddb) Differential Revision: https://developer.blender.org/D11523
-rw-r--r--source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c38
1 files changed, 18 insertions, 20 deletions
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
index 9d3b0730b79..c5d14140d50 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -29,6 +29,8 @@
#include "BLI_task.h"
#include "BLI_utildefines.h"
+#include "PIL_time.h"
+
#include "BKE_camera.h"
#include "BKE_collection.h"
#include "BKE_customdata.h"
@@ -1812,35 +1814,30 @@ static void lineart_main_load_geometries(
Camera *cam = camera->data;
float sensor = BKE_camera_sensor_size(cam->sensor_fit, cam->sensor_x, cam->sensor_y);
- double fov = focallength_to_fov(cam->lens, sensor);
-
+ int fit = BKE_camera_sensor_fit(cam->sensor_fit, rb->w, rb->h);
double asp = ((double)rb->w / (double)rb->h);
if (cam->type == CAM_PERSP) {
- if (cam->sensor_fit == CAMERA_SENSOR_FIT_AUTO) {
- if (asp < 1) {
- fov /= asp;
- }
- else {
- fov *= asp;
- }
+ if (fit == CAMERA_SENSOR_FIT_VERT && asp > 1) {
+ sensor *= asp;
}
- else if (cam->sensor_fit == CAMERA_SENSOR_FIT_HOR) {
- if (asp < 1) {
- fov /= asp;
- }
- }
- else if (cam->sensor_fit == CAMERA_SENSOR_FIT_VERT) {
- if (asp > 1) {
- fov *= asp;
- }
+ if (fit == CAMERA_SENSOR_FIT_HOR && asp < 1) {
+ sensor /= asp;
}
+ double fov = focallength_to_fov(cam->lens, sensor);
lineart_matrix_perspective_44d(proj, fov, asp, cam->clip_start, cam->clip_end);
}
else if (cam->type == CAM_ORTHO) {
double w = cam->ortho_scale / 2;
lineart_matrix_ortho_44d(proj, -w, w, -w / asp, w / asp, cam->clip_start, cam->clip_end);
}
+
+ double t_start;
+
+ if (G.debug_value == 4000) {
+ t_start = PIL_check_seconds_timer();
+ }
+
invert_m4_m4(inv, rb->cam_obmat);
mul_m4db_m4db_m4fl_uniq(result, proj, inv);
copy_m4_m4_db(proj, result);
@@ -2672,8 +2669,9 @@ static LineartRenderBuffer *lineart_create_render_buffer(Scene *scene,
rb->h = scene->r.ysch;
double asp = ((double)rb->w / (double)rb->h);
- rb->shift_x = (asp >= 1) ? c->shiftx : c->shiftx * asp;
- rb->shift_y = (asp <= 1) ? c->shifty : c->shifty * asp;
+ int fit = BKE_camera_sensor_fit(c->sensor_fit, rb->w, rb->h);
+ rb->shift_x = fit == CAMERA_SENSOR_FIT_HOR ? c->shiftx : c->shiftx / asp;
+ rb->shift_y = fit == CAMERA_SENSOR_FIT_VERT ? c->shifty : c->shifty * asp;
rb->crease_threshold = cos(M_PI - lmd->crease_threshold);
rb->angle_splitting_threshold = lmd->angle_splitting_threshold;