[Bf-blender-cvs] [15bae8ac005] master: Fix T60095: freestyle not rendering animated camera correctly.

Brecht Van Lommel noreply at git.blender.org
Thu Jan 24 16:46:31 CET 2019


Commit: 15bae8ac0050a50904ac4f90e85e4463463b3c5d
Author: Brecht Van Lommel
Date:   Thu Jan 24 16:34:26 2019 +0100
Branches: master
https://developer.blender.org/rB15bae8ac0050a50904ac4f90e85e4463463b3c5d

Fix T60095: freestyle not rendering animated camera correctly.

Replace legacy view matrix access with same one used by Eevee.

===================================================================

M	source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
M	source/blender/render/extern/include/RE_pipeline.h
M	source/blender/render/intern/include/render_types.h
M	source/blender/render/intern/source/pipeline.c

===================================================================

diff --git a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
index 4d77962bdfa..14f524199a2 100644
--- a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
+++ b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
@@ -408,9 +408,15 @@ void BlenderFileLoader::insertShapeNode(Object *ob, Mesh *me, int id)
 	FreestyleEdge *fed = (FreestyleEdge*)CustomData_get_layer(&me->edata, CD_FREESTYLE_EDGE);
 	FreestyleFace *ffa = (FreestyleFace*)CustomData_get_layer(&me->pdata, CD_FREESTYLE_FACE);
 
+	// Compute view matrix
+	Object *ob_camera_eval = DEG_get_evaluated_object(_depsgraph, RE_GetCamera(_re));
+	float viewinv[4][4], viewmat[4][4];
+	RE_GetCameraModelMatrix(_re, ob_camera_eval, viewinv);
+	invert_m4_m4(viewmat, viewinv);
+
 	// Compute matrix including camera transform
 	float obmat[4][4], nmat[4][4];
-	mul_m4_m4m4(obmat, _re->viewmat, ob->obmat);
+	mul_m4_m4m4(obmat, viewmat, ob->obmat);
 	invert_m4_m4(nmat, obmat);
 	transpose_m4(nmat);
 
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index be7bf4f454b..bde767dc99e 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -257,7 +257,6 @@ void RE_SetOrtho(struct Render *re, const rctf *viewplane, float clipsta, float
 void RE_SetView(struct Render *re, float mat[4][4]);
 
 /* get current view and window transform */
-void RE_GetView(struct Render *re, float mat[4][4]);
 void RE_GetViewPlane(struct Render *re, rctf *r_viewplane, rcti *r_disprect);
 
 /* set the render threads based on the commandline and autothreads setting */
diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h
index 0f42fff94fe..e5689dfff74 100644
--- a/source/blender/render/intern/include/render_types.h
+++ b/source/blender/render/intern/include/render_types.h
@@ -103,8 +103,6 @@ struct Render {
 	int partx, party;
 
 	/* Camera transform, only used by Freestyle. */
-	float viewmat[4][4], viewinv[4][4];
-	float viewmat_orig[4][4];	/* for incremental render */
 	float winmat[4][4];
 
 	/* clippping */
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 8b815539d22..6e6bbe6332d 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -966,13 +966,6 @@ void RE_SetOrtho(Render *re, const rctf *viewplane, float clipsta, float clipend
 	                re->viewplane.ymin, re->viewplane.ymax, re->clipsta, re->clipend);
 }
 
-void RE_SetView(Render *re, float mat[4][4])
-{
-	/* re->ok flag? */
-	copy_m4_m4(re->viewmat, mat);
-	invert_m4_m4(re->viewinv, re->viewmat);
-}
-
 void RE_GetViewPlane(Render *re, rctf *r_viewplane, rcti *r_disprect)
 {
 	*r_viewplane = re->viewplane;
@@ -986,11 +979,6 @@ void RE_GetViewPlane(Render *re, rctf *r_viewplane, rcti *r_disprect)
 	}
 }
 
-void RE_GetView(Render *re, float mat[4][4])
-{
-	copy_m4_m4(mat, re->viewmat);
-}
-
 /* image and movie output has to move to either imbuf or kernel */
 void RE_display_init_cb(Render *re, void *handle, void (*f)(void *handle, RenderResult *rr))
 {
@@ -2055,28 +2043,6 @@ void RE_RenderFreestyleExternal(Render *re)
 
 		for (rv = re->result->views.first; rv; rv = rv->next) {
 			RE_SetActiveRenderView(re, rv->name);
-
-			/* scene needs to be set to get camera */
-			Object *camera = RE_GetCamera(re);
-
-			/* if no camera, viewmat should have been set! */
-			if (camera) {
-				/* called before but need to call again in case of lens animation from the
-				 * above call to BKE_scene_graph_update_for_newframe, fixes bug. [#22702].
-				 * following calls don't depend on 'RE_SetCamera' */
-				float mat[4][4];
-
-				RE_SetCamera(re, camera);
-				RE_GetCameraModelMatrix(re, camera, mat);
-				invert_m4(mat);
-				RE_SetView(re, mat);
-
-				/* force correct matrix for scaled cameras */
-				DEG_id_tag_update_ex(re->main, &camera->id, ID_RECALC_TRANSFORM);
-			}
-
-			printf("add freestyle\n");
-
 			add_freestyle(re, 1);
 		}
 	}



More information about the Bf-blender-cvs mailing list