[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51233] trunk/blender/intern/cycles: Cycles: camera motion blur enabled.

Brecht Van Lommel brechtvanlommel at pandora.be
Sat Oct 13 15:55:20 CEST 2012


I'd like to get it working in the viewport, but there's some difficult
technical issues to solve. It breaks animation tools when enabled,
since it has to go back and forth a frame to find motion vectors, and
then all unkeyed changes are lost just like they would be when doing
it manually as a user.

Brecht.

On Fri, Oct 12, 2012 at 12:46 AM, Daniel Salazar - 3Developer.com
<zanqdo at gmail.com> wrote:
> Very nice speed and result. I wonder if this can eventually be made to
> work in the viewport, it would be a shame not to
>
> cheers!
>
> Daniel Salazar
> patazstudio.com
>
>
> On Tue, Oct 9, 2012 at 12:37 PM, Brecht Van Lommel
> <brechtvanlommel at pandora.be> wrote:
>> Revision: 51233
>>           http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51233
>> Author:   blendix
>> Date:     2012-10-09 18:37:14 +0000 (Tue, 09 Oct 2012)
>> Log Message:
>> -----------
>> Cycles: camera motion blur enabled.
>>
>> Still more work needed to get object motion blur ready.
>>
>> Modified Paths:
>> --------------
>>     trunk/blender/intern/cycles/blender/addon/ui.py
>>     trunk/blender/intern/cycles/blender/blender_object.cpp
>>     trunk/blender/intern/cycles/blender/blender_sync.cpp
>>     trunk/blender/intern/cycles/kernel/kernel_bvh.h
>>     trunk/blender/intern/cycles/kernel/kernel_camera.h
>>     trunk/blender/intern/cycles/kernel/kernel_object.h
>>     trunk/blender/intern/cycles/kernel/kernel_path.h
>>     trunk/blender/intern/cycles/kernel/kernel_shader.h
>>     trunk/blender/intern/cycles/kernel/kernel_types.h
>>     trunk/blender/intern/cycles/render/camera.cpp
>>     trunk/blender/intern/cycles/render/mesh.cpp
>>     trunk/blender/intern/cycles/render/object.cpp
>>
>> Modified: trunk/blender/intern/cycles/blender/addon/ui.py
>> ===================================================================
>> --- trunk/blender/intern/cycles/blender/addon/ui.py     2012-10-09 18:20:56 UTC (rev 51232)
>> +++ trunk/blender/intern/cycles/blender/addon/ui.py     2012-10-09 18:37:14 UTC (rev 51233)
>> @@ -131,13 +131,9 @@
>>
>>
>>  class CyclesRender_PT_motion_blur(CyclesButtonsPanel, Panel):
>> -    bl_label = "Motion Blur"
>> +    bl_label = "Camera Motion Blur"
>>      bl_options = {'DEFAULT_CLOSED'}
>>
>> -    @classmethod
>> -    def poll(cls, context):
>> -        return False
>> -
>>      def draw_header(self, context):
>>          rd = context.scene.render
>>
>>
>> Modified: trunk/blender/intern/cycles/blender/blender_object.cpp
>> ===================================================================
>> --- trunk/blender/intern/cycles/blender/blender_object.cpp      2012-10-09 18:20:56 UTC (rev 51232)
>> +++ trunk/blender/intern/cycles/blender/blender_object.cpp      2012-10-09 18:37:14 UTC (rev 51233)
>> @@ -17,6 +17,7 @@
>>   */
>>
>>  #include "camera.h"
>> +#include "integrator.h"
>>  #include "graph.h"
>>  #include "light.h"
>>  #include "mesh.h"
>> @@ -227,7 +228,9 @@
>>                                 object->use_motion = true;
>>                         }
>>
>> -                       sync_mesh_motion(b_ob, object->mesh, motion);
>> +                       /* mesh deformation blur not supported yet */
>> +                       if(!scene->integrator->motion_blur)
>> +                               sync_mesh_motion(b_ob, object->mesh, motion);
>>                 }
>>
>>                 return;
>>
>> Modified: trunk/blender/intern/cycles/blender/blender_sync.cpp
>> ===================================================================
>> --- trunk/blender/intern/cycles/blender/blender_sync.cpp        2012-10-09 18:20:56 UTC (rev 51232)
>> +++ trunk/blender/intern/cycles/blender/blender_sync.cpp        2012-10-09 18:37:14 UTC (rev 51233)
>> @@ -149,6 +149,9 @@
>>
>>  void BlenderSync::sync_integrator()
>>  {
>> +#ifdef __CAMERA_MOTION__
>> +       BL::RenderSettings r = b_scene.render();
>> +#endif
>>         PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
>>
>>         experimental = (RNA_enum_get(&cscene, "feature_set") != 0);
>> @@ -175,7 +178,7 @@
>>         integrator->layer_flag = render_layer.layer;
>>
>>         integrator->sample_clamp = get_float(cscene, "sample_clamp");
>> -#ifdef __MOTION__
>> +#ifdef __CAMERA_MOTION__
>>         integrator->motion_blur = (!preview && r.use_motion_blur());
>>  #endif
>>
>>
>> Modified: trunk/blender/intern/cycles/kernel/kernel_bvh.h
>> ===================================================================
>> --- trunk/blender/intern/cycles/kernel/kernel_bvh.h     2012-10-09 18:20:56 UTC (rev 51232)
>> +++ trunk/blender/intern/cycles/kernel/kernel_bvh.h     2012-10-09 18:37:14 UTC (rev 51233)
>> @@ -349,7 +349,7 @@
>>
>>  #ifdef __INTERSECTION_REFINE__
>>         if(isect->object != ~0) {
>> -#ifdef __MOTION__
>> +#ifdef __OBJECT_MOTION__
>>                 Transform tfm = sd->ob_itfm;
>>  #else
>>                 Transform tfm = object_fetch_transform(kg, isect->object, ray->time, OBJECT_INVERSE_TRANSFORM);
>> @@ -370,7 +370,7 @@
>>         P = P + D*rt;
>>
>>         if(isect->object != ~0) {
>> -#ifdef __MOTION__
>> +#ifdef __OBJECT_MOTION__
>>                 Transform tfm = sd->ob_tfm;
>>  #else
>>                 Transform tfm = object_fetch_transform(kg, isect->object, ray->time, OBJECT_TRANSFORM);
>>
>> Modified: trunk/blender/intern/cycles/kernel/kernel_camera.h
>> ===================================================================
>> --- trunk/blender/intern/cycles/kernel/kernel_camera.h  2012-10-09 18:20:56 UTC (rev 51232)
>> +++ trunk/blender/intern/cycles/kernel/kernel_camera.h  2012-10-09 18:37:14 UTC (rev 51233)
>> @@ -63,7 +63,7 @@
>>         /* transform ray from camera to world */
>>         Transform cameratoworld = kernel_data.cam.cameratoworld;
>>
>> -#ifdef __MOTION__
>> +#ifdef __CAMERA_MOTION__
>>         if(kernel_data.cam.have_motion)
>>                 transform_motion_interpolate(&cameratoworld, &kernel_data.cam.motion, ray->time);
>>  #endif
>> @@ -106,7 +106,7 @@
>>         /* transform ray from camera to world */
>>         Transform cameratoworld = kernel_data.cam.cameratoworld;
>>
>> -#ifdef __MOTION__
>> +#ifdef __CAMERA_MOTION__
>>         if(kernel_data.cam.have_motion)
>>                 transform_motion_interpolate(&cameratoworld, &kernel_data.cam.motion, ray->time);
>>  #endif
>> @@ -180,7 +180,7 @@
>>         /* transform ray from camera to world */
>>         Transform cameratoworld = kernel_data.cam.cameratoworld;
>>
>> -#ifdef __MOTION__
>> +#ifdef __CAMERA_MOTION__
>>         if(kernel_data.cam.have_motion)
>>                 transform_motion_interpolate(&cameratoworld, &kernel_data.cam.motion, ray->time);
>>  #endif
>> @@ -212,7 +212,7 @@
>>         float raster_x = x + kernel_tex_interp(__filter_table, filter_u, FILTER_TABLE_SIZE);
>>         float raster_y = y + kernel_tex_interp(__filter_table, filter_v, FILTER_TABLE_SIZE);
>>
>> -#ifdef __MOTION__
>> +#ifdef __CAMERA_MOTION__
>>         /* motion blur */
>>         if(kernel_data.cam.shuttertime == 0.0f)
>>                 ray->time = TIME_INVALID;
>>
>> Modified: trunk/blender/intern/cycles/kernel/kernel_object.h
>> ===================================================================
>> --- trunk/blender/intern/cycles/kernel/kernel_object.h  2012-10-09 18:20:56 UTC (rev 51232)
>> +++ trunk/blender/intern/cycles/kernel/kernel_object.h  2012-10-09 18:37:14 UTC (rev 51233)
>> @@ -31,7 +31,7 @@
>>  {
>>         Transform tfm;
>>
>> -#ifdef __MOTION__
>> +#ifdef __OBJECT_MOTION__
>>         /* if we do motion blur */
>>         if(sd->flag & SD_OBJECT_MOTION) {
>>                 /* fetch motion transforms */
>> @@ -70,7 +70,7 @@
>>
>>  __device_inline void object_position_transform(KernelGlobals *kg, ShaderData *sd, float3 *P)
>>  {
>> -#ifdef __MOTION__
>> +#ifdef __OBJECT_MOTION__
>>         *P = transform_point(&sd->ob_tfm, *P);
>>  #else
>>         Transform tfm = object_fetch_transform(kg, sd->object, TIME_INVALID, OBJECT_TRANSFORM);
>> @@ -80,7 +80,7 @@
>>
>>  __device_inline void object_inverse_position_transform(KernelGlobals *kg, ShaderData *sd, float3 *P)
>>  {
>> -#ifdef __MOTION__
>> +#ifdef __OBJECT_MOTION__
>>         *P = transform_point(&sd->ob_itfm, *P);
>>  #else
>>         Transform tfm = object_fetch_transform(kg, sd->object, TIME_INVALID, OBJECT_INVERSE_TRANSFORM);
>> @@ -90,7 +90,7 @@
>>
>>  __device_inline void object_inverse_normal_transform(KernelGlobals *kg, ShaderData *sd, float3 *N)
>>  {
>> -#ifdef __MOTION__
>> +#ifdef __OBJECT_MOTION__
>>         *N = normalize(transform_direction_transposed(&sd->ob_tfm, *N));
>>  #else
>>         Transform tfm = object_fetch_transform(kg, sd->object, TIME_INVALID, OBJECT_TRANSFORM);
>> @@ -100,7 +100,7 @@
>>
>>  __device_inline void object_normal_transform(KernelGlobals *kg, ShaderData *sd, float3 *N)
>>  {
>> -#ifdef __MOTION__
>> +#ifdef __OBJECT_MOTION__
>>         *N = normalize(transform_direction_transposed(&sd->ob_itfm, *N));
>>  #else
>>         Transform tfm = object_fetch_transform(kg, sd->object, TIME_INVALID, OBJECT_INVERSE_TRANSFORM);
>> @@ -110,7 +110,7 @@
>>
>>  __device_inline void object_dir_transform(KernelGlobals *kg, ShaderData *sd, float3 *D)
>>  {
>> -#ifdef __MOTION__
>> +#ifdef __OBJECT_MOTION__
>>         *D = transform_direction(&sd->ob_tfm, *D);
>>  #else
>>         Transform tfm = object_fetch_transform(kg, sd->object, 0.0f, OBJECT_TRANSFORM);
>> @@ -120,7 +120,7 @@
>>
>>  __device_inline float3 object_location(KernelGlobals *kg, ShaderData *sd)
>>  {
>> -#ifdef __MOTION__
>> +#ifdef __OBJECT_MOTION__
>>         return make_float3(sd->ob_tfm.x.w, sd->ob_tfm.y.w, sd->ob_tfm.z.w);
>>  #else
>>         Transform tfm = object_fetch_transform(kg, sd->object, 0.0f, OBJECT_TRANSFORM);
>>
>> Modified: trunk/blender/intern/cycles/kernel/kernel_path.h
>> ===================================================================
>> --- trunk/blender/intern/cycles/kernel/kernel_path.h    2012-10-09 18:20:56 UTC (rev 51232)
>> +++ trunk/blender/intern/cycles/kernel/kernel_path.h    2012-10-09 18:37:14 UTC (rev 51233)
>> @@ -343,7 +343,7 @@
>>                                 light_ray.P = ray_offset(sd.P, sd.Ng);
>>                                 light_ray.D = ao_D;
>>                                 light_ray.t = kernel_data.background.ao_distance;
>> -#ifdef __MOTION__
>> +#ifdef __OBJECT_MOTION__
>>                                 light_ray.time = sd.time;
>>  #endif
>>
>> @@ -368,7 +368,7 @@
>>                                 BsdfEval L_light;
>>                                 bool is_lamp;
>>
>> -#ifdef __MOTION__
>> +#ifdef __OBJECT_MOTION__
>>                                 light_ray.time = sd.time;
>>  #endif
>>
>> @@ -520,7 +520,7 @@
>>                                 light_ray.P = ray_offset(sd.P, sd.Ng);
>>                                 light_ray.D = ao_D;
>>                                 light_ray.t = kernel_data.background.ao_distance;
>> -#ifdef __MOTION__
>> +#ifdef __OBJECT_MOTION__
>>                                 light_ray.time = sd.time;
>>  #endif
>>
>> @@ -545,7 +545,7 @@
>>                                 BsdfEval L_light;
>>                                 bool is_lamp;
>>
>> -#ifdef __MOTION__
>> +#ifdef __OBJECT_MOTION__
>>                                 light_ray.time = sd.time;
>>  #endif
>>
>> @@ -728,7 +728,7 @@
>>                                         light_ray.P = ray_offset(sd.P, sd.Ng);
>>                                         light_ray.D = ao_D;
>>                                         light_ray.t = kernel_data.background.ao_distance;
>> -#ifdef __MOTION__
>> +#ifdef __OBJECT_MOTION__
>>                                         light_ray.time = sd.time;
>>  #endif
>>
>> @@ -748,7 +748,7 @@
>>                         BsdfEval L_light;
>>                         bool is_lamp;
>>
>> -#ifdef __MOTION__
>> +#ifdef __OBJECT_MOTION__
>>                         light_ray.time = sd.time;
>>  #endif
>>
>> @@ -867,7 +867,7 @@
>>                                 bsdf_ray.dP = sd.dP;
>>                                 bsdf_ray.dD = bsdf_domega_in;
>>  #endif
>> -#ifdef __MOTION__
>> +#ifdef __OBJECT_MOTION__
>>                                 bsdf_ray.time = sd.time;
>>  #endif
>>
>> @@ -925,7 +925,7 @@
>>         float lens_u = path_rng(kg, &rng, sample, PRNG_LENS_U);
>>         float lens_v = path_rng(kg, &rng, sample, PRNG_LENS_V);
>>
>> -#ifdef __MOTION__
>> +#ifdef __CAMERA_MOTION__
>>         float time = path_rng(kg, &rng, sample, PRNG_TIME);
>>  #else
>>         float time = 0.0f;
>>
>> Modified: trunk/blender/intern/cycles/kernel/kernel_shader.h
>> ===================================================================
>> --- trunk/blender/intern/cycles/kernel/kernel_shader.h  2012-10-09 18:20:56 UTC (rev 51232)
>> +++ trunk/blender/intern/cycles/kernel/kernel_shader.h  2012-10-09 18:37:14 UTC (rev 51233)
>> @@ -68,7 +68,7 @@
>>  #endif
>>
>>         /* matrices and time */
>> -#ifdef __MOTION__
>> +#ifdef __OBJECT_MOTION__
>>         sd->ob_tfm = object_fetch_transform(kg, sd->object, ray->time, OBJECT_TRANSFORM);
>>         sd->ob_itfm = object_fetch_transform(kg, sd->object, ray->time, OBJECT_INVERSE_TRANSFORM);
>>
>> @@ -171,7 +171,7 @@
>>         }
>>  #endif
>>
>> -#ifdef __MOTION__
>> +#ifdef __OBJECT_MOTION__
>>         sd->time = time;
>>
>>         sd->ob_tfm = object_fetch_transform(kg, sd->object, time, OBJECT_TRANSFORM);
>> @@ -275,7 +275,7 @@
>>         sd->I = -sd->P;
>>         sd->shader = kernel_data.background.shader;
>>         sd->flag = kernel_tex_fetch(__shader_flag, (sd->shader & SHADER_MASK)*2);
>> -#ifdef __MOTION__
>> +#ifdef __OBJECT_MOTION__
>>         sd->time = ray->time;
>>  #endif
>>         sd->ray_length = 0.0f;
>>
>> Modified: trunk/blender/intern/cycles/kernel/kernel_types.h
>> ===================================================================
>> --- trunk/blender/intern/cycles/kernel/kernel_types.h   2012-10-09 18:20:56 UTC (rev 51232)
>> +++ trunk/blender/intern/cycles/kernel/kernel_types.h   2012-10-09 18:37:14 UTC (rev 51233)
>> @@ -108,7 +108,8 @@
>>  #define __PASSES__
>>  #define __BACKGROUND_MIS__
>>  #define __AO__
>> -//#define __MOTION__
>> +#define __CAMERA_MOTION__
>> +//#define __OBJECT_MOTION__
>>  #endif
>>
>>  //#define __SOBOL_FULL_SCREEN__
>> @@ -129,7 +130,7 @@
>>         PRNG_FILTER_V = 1,
>>         PRNG_LENS_U = 2,
>>         PRNG_LENS_V = 3,
>> -#ifdef __MOTION__
>> +#ifdef __CAMERA_MOTION__
>>         PRNG_TIME = 4,
>>         PRNG_UNUSED = 5,
>>         PRNG_BASE_NUM = 6,
>> @@ -426,7 +427,7 @@
>>
>> @@ Diff output truncated at 10240 characters. @@
>> _______________________________________________
>> Bf-blender-cvs mailing list
>> Bf-blender-cvs at blender.org
>> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers


More information about the Bf-committers mailing list