4 years agoMerge branch 'master' into blender2.8
Campbell Barton [Mon, 26 Jun 2017 03:27:54 +0000 (13:27 +1000)]
Merge branch 'master' into blender2.8

4 years agoCleanup: committed by accident
Campbell Barton [Mon, 26 Jun 2017 03:21:09 +0000 (13:21 +1000)]
Cleanup: committed by accident

4 years agoManipulator: name setting function
Campbell Barton [Mon, 26 Jun 2017 03:16:25 +0000 (13:16 +1000)]
Manipulator: name setting function

Default name includes group-name,
we may want to set the name without a prefix.

4 years agoWM: Fix crash in transform-orientation access
Campbell Barton [Sun, 25 Jun 2017 22:38:21 +0000 (08:38 +1000)]
WM: Fix crash in transform-orientation access

Need to support orientation access when context is NULL.

4 years agoManipulator: add optional properties argument
Campbell Barton [Sun, 25 Jun 2017 22:19:55 +0000 (08:19 +1000)]
Manipulator: add optional properties argument

Needed for RNA/Py API

4 years agoFix T50856: crash when minimizing window on AMD / Windows.
Brecht Van Lommel [Sat, 24 Jun 2017 14:44:48 +0000 (16:44 +0200)]
Fix T50856: crash when minimizing window on AMD / Windows.

4 years agoFix T51792: crash calling bpy.ops.screen.animation_cancel while scrubbing.
Brecht Van Lommel [Sat, 24 Jun 2017 16:02:30 +0000 (18:02 +0200)]
Fix T51792: crash calling bpy.ops.screen.animation_cancel while scrubbing.

4 years agoRevert "Fix py-api doc building"
Campbell Barton [Sat, 24 Jun 2017 06:56:00 +0000 (16:56 +1000)]
Revert "Fix py-api doc building"

This reverts commit 838a4622cf7a01f302b4decfd74c4b8a17d7b509.

Also add missing 'lightprobe'

4 years agoFix py-api doc building
Campbell Barton [Sat, 24 Jun 2017 06:11:24 +0000 (16:11 +1000)]
Fix py-api doc building

4 years agoEevee: Fix linking error.
Clément Foucault [Sat, 24 Jun 2017 03:25:33 +0000 (05:25 +0200)]
Eevee: Fix linking error.

4 years agoEevee: Planar reflection: Fix normal deformation for background pixels.
Clément Foucault [Sat, 24 Jun 2017 03:24:59 +0000 (05:24 +0200)]
Eevee: Planar reflection: Fix normal deformation for background pixels.

Now it matches world cubemap perfectly.

4 years agoEevee: Fix opengl error cause by bad texture configuration.
Clément Foucault [Fri, 23 Jun 2017 23:46:07 +0000 (01:46 +0200)]
Eevee: Fix opengl error cause by bad texture configuration.

This is fragile and the whole Texture/Framebuffer should be extended to be more flexible.

4 years agoEevee: Use smaller texture for placeholders.
Clément Foucault [Fri, 23 Jun 2017 23:44:43 +0000 (01:44 +0200)]
Eevee: Use smaller texture for placeholders.

4 years agoEevee: Planar Reflection: Add contact hardening normal distortion.
Clément Foucault [Fri, 23 Jun 2017 23:08:26 +0000 (01:08 +0200)]
Eevee: Planar Reflection: Add contact hardening normal distortion.

Save radial distance to camera in alpha channel of the planar probe.
Use this distance to modulate distortion intensity when shading the surface.

4 years agoEevee: Add AO support in planar reflection.
Clément Foucault [Fri, 23 Jun 2017 19:08:53 +0000 (21:08 +0200)]
Eevee: Add AO support in planar reflection.

Technically this enables the use of MinmaxZ pyramid inside the probe captures.
Also Disable AO for cubemap probes because it shows big discontinuities at cubeface limits.

4 years agoEevee: Planar Reflection: Fix precision issue near cliplane.
Clément Foucault [Fri, 23 Jun 2017 17:19:19 +0000 (19:19 +0200)]
Eevee: Planar Reflection: Fix precision issue near cliplane.

The problem was that the depth prepass was using the clip plane but not the shading pass.

During the clipping stage, the triangle is converted to a quad clipped to the given clip plane.
But this introduce subtle changes in the depth when this new geometry is rasterized. Since the shading pass was using an EQUAL depth test, the depth values from the shading pass were not always equal to the depth prepass.

Enabling clipping in the shading vertex shader has a too small impact to require a dedicated shader.

4 years agoEevee: Planar reflection: Fix bad texture binding.
Clément Foucault [Fri, 23 Jun 2017 17:02:40 +0000 (19:02 +0200)]
Eevee: Planar reflection: Fix bad texture binding.

4 years agoSilence warnings (tsc, tsc)
Dalai Felinto [Fri, 23 Jun 2017 14:45:14 +0000 (16:45 +0200)]
Silence warnings (tsc, tsc)

4 years agoGPUMaterial: Avoid freeing GLSL shaders when changing scene properties.
Clément Foucault [Fri, 23 Jun 2017 14:41:44 +0000 (16:41 +0200)]
GPUMaterial: Avoid freeing GLSL shaders when changing scene properties.

This was causing major slowdown when changing Colormanagment settings or post processing.

4 years agoRevert "Temporarily disable material preview (T51796 workaround)"
Luca Rood [Fri, 23 Jun 2017 09:55:04 +0000 (11:55 +0200)]
Revert "Temporarily disable material preview (T51796 workaround)"

This reverts commit 0d9611718d89636d0d407555252b3a6a1d7ef2f9.

The preview issues have been solved by CoW commit

4 years agoFix Eevee "No output node" issue
Luca Rood [Fri, 23 Jun 2017 08:49:09 +0000 (10:49 +0200)]
Fix Eevee "No output node" issue

This fixes an issue introduced by the new output node system, where "No
output node" was displayed in the material panel even when an output
node was present.

4 years agoGrease Pencil: Fix hardcoded DKEY for continous drawing
Dalai Felinto [Fri, 23 Jun 2017 08:32:03 +0000 (10:32 +0200)]
Grease Pencil: Fix hardcoded DKEY for continous drawing

4 years agoFix T51845
raa [Fri, 23 Jun 2017 08:04:58 +0000 (11:04 +0300)]
Fix T51845

4 years agoManipulator: partial depth support
Campbell Barton [Fri, 23 Jun 2017 07:20:25 +0000 (17:20 +1000)]
Manipulator: partial depth support

Use the depth flag added for this purpose.
Although this only works for regular currently, not selection.

4 years agoManipulator: disable GL state changes drawing geometry
Campbell Barton [Fri, 23 Jun 2017 06:47:49 +0000 (16:47 +1000)]
Manipulator: disable GL state changes drawing geometry

If there is case this is needed, we can enable and restore state
for now it seems OK to disable.

4 years agoManipulator: flip scale flag usage
Campbell Barton [Fri, 23 Jun 2017 05:50:55 +0000 (15:50 +1000)]
Manipulator: flip scale flag usage

Naming was confusing, while technically correct -
the result is no scaling (manipulator ignores zoom-level).

Also remove 3D from name since this can be supported for 2D views too.

4 years agoManipulator: rename struct members
Campbell Barton [Fri, 23 Jun 2017 04:48:37 +0000 (14:48 +1000)]
Manipulator: rename struct members

- matrix -> matrix_basis
- user_scale -> scale_basis
- scale -> scale_final

Match RNA names being added to custom-manipulator branch.

4 years agoEevee: Put pack AO parameters.
Clément Foucault [Fri, 23 Jun 2017 02:12:46 +0000 (04:12 +0200)]
Eevee: Put pack AO parameters.

4 years agoManipulator: add tweak-snap (not used yet)
Campbell Barton [Fri, 23 Jun 2017 01:13:46 +0000 (11:13 +1000)]
Manipulator: add tweak-snap (not used yet)

4 years agoEevee: Attempt to optimize GTAO shader.
Clément Foucault [Fri, 23 Jun 2017 00:52:15 +0000 (02:52 +0200)]
Eevee: Attempt to optimize GTAO shader.

Unroll horizon search loop. Use fast version of acos.
On nvidia linux, unrolling the 2nd loop is giving very high compilation time.

4 years agoEevee: Fix OpenGl errors.
Clément Foucault [Thu, 22 Jun 2017 23:33:28 +0000 (01:33 +0200)]
Eevee: Fix OpenGl errors.

Also assert if texture does not exists in draw manager. Keeping it sane.

4 years agoManipulator: fix broken hover option
Campbell Barton [Thu, 22 Jun 2017 23:18:53 +0000 (09:18 +1000)]
Manipulator: fix broken hover option

Hover flag caused manipulators not to update
(Camera DOF works again).

4 years agoDrawManager: Add support for writting to depth without depth testing.
Clément Foucault [Thu, 22 Jun 2017 16:53:36 +0000 (18:53 +0200)]
DrawManager: Add support for writting to depth without depth testing.

Disabling depth test will prevent from writting to depth buffer.
Add DRW_STATE_DEPTH_ALWAYS to always pass the depth test and write to depth.

4 years agoEevee: Fix max range of lightprobes
Dalai Felinto [Thu, 22 Jun 2017 16:35:08 +0000 (18:35 +0200)]
Eevee: Fix max range of lightprobes

4 years agoEevee: Interface and units
Dalai Felinto [Thu, 22 Jun 2017 15:37:28 +0000 (17:37 +0200)]
Eevee: Interface and units

We should use PROP_DISTANCE whenever appropriate.
Also rename "Data Draw Size" > "Size" in the UI for the lightprobes.

4 years agoLight Probes: interface changes, and renames
Dalai Felinto [Thu, 22 Jun 2017 15:20:39 +0000 (17:20 +0200)]
Light Probes: interface changes, and renames

Although we are calling all of them light probes, there are a lot of
differences between them. This commit does the following:

* Prevent user from changing the probe type once added

* Unify "sphere" and "cube" probes into reflection cubemap
(as before you can switch between them from the probe UI)

To be done
* Don't show add probe menus unless we are on Eevee

* Light probes panels should not be visible in Clay. Light probe objects
should not be visible in Clay viewport (nor on Cycles).

* We need icons for the different light probes, and for lightprobes as a
whole (we are using RADIO for now).

4 years agoIndicate to users when manual conversion of Eevee materials is needed
Dalai Felinto [Thu, 22 Jun 2017 08:32:50 +0000 (10:32 +0200)]
Indicate to users when manual conversion of Eevee materials is needed

We now shows a report error when user opens a file that need fixing.
It's fine(ish) to not do doversion. It's not fine to not communicate that.

4 years agoManipulator: target property definitions
Campbell Barton [Thu, 22 Jun 2017 08:29:45 +0000 (18:29 +1000)]
Manipulator: target property definitions

Changes from custom-manipulator branch.

- use property type definitions.
- add property free callback.
- move properties into the wmManipulator struct (over alloc).
- use array length from property types instead of arg passing.

4 years agoFix T51867: Insert Keyframe I - L / I - R / I - S key combos are broken.
Bastien Montagne [Thu, 22 Jun 2017 08:26:27 +0000 (10:26 +0200)]
Fix T51867: Insert Keyframe I - L / I - R / I - S key combos are broken.

Reorder keyingsets registration order, since it also afects order of I
menu options, better show most used ones first, pure alphabetical order
is not great here... Will likely break some muscle memory though. :|

Based on D2720 by Carlo Andreacchio (@candreacchio), thanks.

4 years agoFix T51863: CompositorNodeSwitchView have the wrong rna API
Dalai Felinto [Thu, 22 Jun 2017 08:25:05 +0000 (10:25 +0200)]
Fix T51863: CompositorNodeSwitchView have the wrong rna API

Although the original report was about the docs, the real issue was in
the API.

My original commit started from a copy-paste from the Switch
Node. However I don't use custom1 for thew Switch View node.

The docs is slightly incomplete since it would be nice to mention the
views here. Or maybe even expose them via Python. But honestly they are
generated depending on the scene multi-view settings.

4 years agoEevee: Ambient Occlusion: Enable Multibounce approximation and Change influence factor.
Clément Foucault [Thu, 22 Jun 2017 01:50:50 +0000 (03:50 +0200)]
Eevee: Ambient Occlusion: Enable Multibounce approximation and Change influence factor.

Making the influence a power for easy tuning. Works like a contrast knob.

4 years agoEevee: Ambient Occlusion: Initial implementation.
Clément Foucault [Thu, 22 Jun 2017 01:10:39 +0000 (03:10 +0200)]
Eevee: Ambient Occlusion: Initial implementation.

Implement GTAO (Ground Truth Ambient Occlusion) which is a special case of Horizon Based Ambient Occlusion that is more physically accurate.
Also add a bent normal option to sample indirect irradiance (diffuse lighting) with the least occluded direction.

4 years agoEevee: Improve material variation managment.
Clément Foucault [Thu, 22 Jun 2017 00:41:17 +0000 (02:41 +0200)]
Eevee: Improve material variation managment.

- Unify variations between default shaders and material shader.
- Only create default shader passes if needed.

Downside is that we have a big array of passes and shading grp in the vedata ... And it will double in size each time a new variation flag is added.

4 years agoEevee: Ambient Occlusion: Add UI properties.
Clément Foucault [Thu, 22 Jun 2017 00:30:20 +0000 (02:30 +0200)]
Eevee: Ambient Occlusion: Add UI properties.

4 years agoEevee: Minmax Depth Pyramid.
Clément Foucault [Thu, 22 Jun 2017 00:28:49 +0000 (02:28 +0200)]
Eevee: Minmax Depth Pyramid.

This commit introduce the computation of a depth pyramid containing min and max depth values of the original depth buffer.
This is useful for Clustered Light Culling but also for raytracing on the depth buffer (SSR).
It's also usefull to have to fetch higher mips in order to improve texture cache usage.

As of now, 1st mip (highest res) is half the resolution of the depth buffer, but everything is already done to be able to make a fullres copy of the depth buffer in the 1st mip instead of downsampling.
Also, the texture used is RG_32F which is a too much but enough to cover the 24bits of the depth buffer. Reducing the texture size would make things quite faster.

4 years agoGPUFramebuffer: Add recursive downsampling function.
Clément Foucault [Thu, 22 Jun 2017 00:01:58 +0000 (02:01 +0200)]
GPUFramebuffer: Add recursive downsampling function.

This special case function enables rendering to a miplevel while using the miplevels above as texture input.
This is needed for some algorithm (i.e. creating a min-max depth pyramid texture).

4 years agoGPUTexture: Support for nearest sampling with mipmaps.
Clément Foucault [Wed, 21 Jun 2017 23:53:51 +0000 (01:53 +0200)]
GPUTexture: Support for nearest sampling with mipmaps.

4 years agoCycles: Fix excessive sampling weight of glossy Principled BSDF components
Lukas Stockner [Wed, 21 Jun 2017 00:57:58 +0000 (02:57 +0200)]
Cycles: Fix excessive sampling weight of glossy Principled BSDF components

If there was any specularity in the Principled BSDF, it would get a sampling
weight of one regardless of its actual impact.

This commit makes Cycles estimate the contribution of the component and adjust
the weighting accordingly, which greatly improves the noise characteristics of
the Principled BSDF in many cases.

Note that this commit might slightly change the brightness of areas when using
MultiGGX and high roughnesses, but the new brightness is more accurate and
closer to the result of Branched Path Tracing. See T51836 for details.

Differential Revision:

4 years agoFix T51836: Cycles: Fix incorrect PDF approximations of the MultiGGX closures
Lukas Stockner [Wed, 21 Jun 2017 00:51:34 +0000 (02:51 +0200)]
Fix T51836: Cycles: Fix incorrect PDF approximations of the MultiGGX closures

The PDF of the MultiGGX sampling is approximated by the singlescattering GGX
term as well as a scaled diffuse term that makes up for the energy in the
multiscattering component that's missed by GGX.

However, there were two problems with the glossy terms: The diffuse term missed
a normalization factor, and the singlescattering term was not properly scaled
down based on the albedo estimate.

The glass term was completely wrong and has been rewritten. It uses the fresnel
factor to weight reflection vs. refraction and uses the glossy MultiGGX model
for reflection.
For refraction, the correct singlescattering term is now used, and a new
albedo approximation is used that was derived by evaluating GGX albedo for
roughnesses from 0 to 1 and IORs from 1 to 3 and fitting numerical
approximations to it. The resulting model has a mean relative error of 9e-5,
but could probably be simplified without losing noticable accuracy in the
final render.

The improved PDFs help with glossy highlights (due to better light sampling vs.
closure sampling MIS) and fix the situation described in T51836 where mixing
MultiGGX with other closures (as it happens in e.g. the Principled
BSDF) causes incorrect darkening.

4 years agoFix T51862: principled shader GLSL artifacts in ortho mode.
Brecht Van Lommel [Wed, 21 Jun 2017 19:31:08 +0000 (21:31 +0200)]
Fix T51862: principled shader GLSL artifacts in ortho mode.

4 years agoFix T51849: change Cycles clearcoat gloss to roughness.
Brecht Van Lommel [Wed, 21 Jun 2017 17:24:57 +0000 (19:24 +0200)]
Fix T51849: change Cycles clearcoat gloss to roughness.

This is compatible with UE4 and more consistent with specular and transmission
roughness, even if it deviates from the original Disney BRDF.

4 years agoMerge remote-tracking branch 'origin/master' into blender2.8
Dalai Felinto [Wed, 21 Jun 2017 13:14:42 +0000 (15:14 +0200)]
Merge remote-tracking branch 'origin/master' into blender2.8

4 years agoFix typo in builtbot config
Dalai Felinto [Wed, 21 Jun 2017 12:05:23 +0000 (14:05 +0200)]
Fix typo in builtbot config

4 years agoFix blenderplayer (tm)
Dalai Felinto [Wed, 21 Jun 2017 10:25:07 +0000 (12:25 +0200)]
Fix blenderplayer (tm)

4 years agoFix T51856: `BKE_mesh_new_from_object()` would often generate default 'Mesh' named...
Bastien Montagne [Wed, 21 Jun 2017 08:30:38 +0000 (10:30 +0200)]
Fix T51856: `BKE_mesh_new_from_object()` would often generate default 'Mesh' named datablock.

This is annoying especially for exporters who do use mesh name, since it
broke any relation with actual Mesh naming in original Blend file.

Unfortunately, we cannot avoid the extra .xxx digits. ;)

4 years agoManipulator: edit_properties -> target_properties
Campbell Barton [Wed, 21 Jun 2017 07:06:24 +0000 (17:06 +1000)]
Manipulator: edit_properties -> target_properties

Naming was too confusing between properties of a manipulator
and properties it edits.

4 years agoManipulator: Move types into their own directory
Campbell Barton [Wed, 21 Jun 2017 06:21:19 +0000 (16:21 +1000)]
Manipulator: Move types into their own directory

4 years agoManipulators: move settings to ID properties
Campbell Barton [Wed, 21 Jun 2017 03:54:46 +0000 (13:54 +1000)]
Manipulators: move settings to ID properties

This makes manipulator access closer to operators,
and allows Python access.

This adds RNA for manipulators, but not Python registration yet.

- Split draw style into 2x settings:
  `draw_style` (enum) & `draw_options` (enum-flag)
- Rename -> properties_edit,
  Use for ID-properties.
  Note that this area of the API will need further work since
  manipulators now have 2 kinds of properties & API's to access them.

4 years agoPyAPI: add intern strings
Campbell Barton [Wed, 21 Jun 2017 02:43:19 +0000 (12:43 +1000)]
PyAPI: add intern strings

Avoid string conversion on each use.

4 years agoRNA: avoid many calls to 'RNA_struct_is_a'
Campbell Barton [Wed, 21 Jun 2017 02:13:21 +0000 (12:13 +1000)]
RNA: avoid many calls to 'RNA_struct_is_a'

Quicker to find the ID-subtype then use direct pointer comparisons.

Also modify `ID_code_to_RNA_type` so missing ID-codes raise a warning
(handy when adding new ID types).

4 years agoIntroduce functions/options to indicate the type of render
Dalai Felinto [Tue, 20 Jun 2017 16:33:58 +0000 (18:33 +0200)]
Introduce functions/options to indicate the type of render

We should be able to differentiate between OpenGL render (viewport
render), offline render (F12), and view render (viewport draw).

This allows for us preventing offline render to skip mode drawings, grid, ...
Even OpenGL render can benefit from this forcing a higher quality
anti-alias and sampling than the viewport drawing.

I'm not sure if it's clever to keep the memset(0x00) outside the render
loop function as it is in this patch. An alternative is to just pass the
render "type" as a flag to the render function, and set DST.options
inside it. (I may change this tomorrow, I will wait to hear from
Campbell on that).

4 years agoFix: Icon alignment for scaled pie buttons with no text
raa [Tue, 20 Jun 2017 17:15:04 +0000 (20:15 +0300)]
Fix: Icon alignment for scaled pie buttons with no text

4 years agoClean node names and organize menus for eevee
Luca Rood [Tue, 20 Jun 2017 12:33:13 +0000 (14:33 +0200)]
Clean node names and organize menus for eevee

This makes the node menus aware of the Cycles/Eevee distinction, and
only show the relevant nodes for the current engine. Names have also
been changed to accomodate for the new output node system.

4 years agoImplement Eevee output node system
Luca Rood [Mon, 19 Jun 2017 14:31:10 +0000 (16:31 +0200)]
Implement Eevee output node system

This makes Eevee consistent with Cycles, by having a single output node,
and multiple shader nodes that connect to it.

Note that node systems for Eevee saved before this will be missing the
output node, and thus will show an invalid material. This is easily
resolved by connecting the shader output to a new output node.

4 years agoFix blenderplayer build (tm)
Dalai Felinto [Tue, 20 Jun 2017 13:51:42 +0000 (15:51 +0200)]
Fix blenderplayer build (tm)

4 years agoFix collada build after gawain rename/refactor
Dalai Felinto [Tue, 20 Jun 2017 13:42:06 +0000 (15:42 +0200)]
Fix collada build after gawain rename/refactor

Collada files should not have been touched.

Bug introduced on: c31f24c63b875e8c9a7cacd2733d3e8614eff74d

4 years agoFix (unreported) missing Image usercount increase when copying UVProject modifier.
Bastien Montagne [Mon, 19 Jun 2017 13:05:08 +0000 (15:05 +0200)]
Fix (unreported) missing Image usercount increase when copying UVProject modifier.

4 years agoManipulators: store operator type instead of id
Campbell Barton [Mon, 19 Jun 2017 18:44:34 +0000 (04:44 +1000)]
Manipulators: store operator type instead of id

Avoids lookups on each access.

4 years agoAlembic tests: make failures a bit easier to diagnose.
Sybren A. Stüvel [Mon, 19 Jun 2017 15:55:51 +0000 (17:55 +0200)]
Alembic tests: make failures a bit easier to diagnose.

4 years agoFix T51762: Unit test script_alembic_import is failing.
Sybren A. Stüvel [Mon, 19 Jun 2017 15:50:43 +0000 (17:50 +0200)]
Fix T51762: Unit test script_alembic_import is failing.

Implemented workaround for use with the legacy depsgraph.

4 years agoFix warning in view3d_draw.
Clément Foucault [Mon, 19 Jun 2017 14:31:20 +0000 (16:31 +0200)]
Fix warning in view3d_draw.

4 years agoFixed bl_load_py_modules / script_load_modules unit test
Sybren A. Stüvel [Mon, 19 Jun 2017 13:28:28 +0000 (15:28 +0200)]
Fixed bl_load_py_modules / script_load_modules unit test

It tried to assert that
addons/io_blend_utils/blender_bam-unpacked.whl/ was loaded when
the io_blend_utils module was imported. However, this happens only on
demand, and not directly when importing the add-on.

4 years agoUse for/else instead of setting 'ok' variable.
Sybren A. Stüvel [Mon, 19 Jun 2017 13:25:58 +0000 (15:25 +0200)]
Use for/else instead of setting 'ok' variable.

This is more efficient, and this use case is exactly what the else clause
is for.

4 years agoRemoved trailing spaces
Sybren A. Stüvel [Mon, 19 Jun 2017 08:46:07 +0000 (10:46 +0200)]
Removed trailing spaces

4 years agoFixup for gawan rename
Dalai Felinto [Mon, 19 Jun 2017 13:19:00 +0000 (15:19 +0200)]
Fixup for gawan rename

inten/opencolorio and *.cc were ignored.

Build error introduced on b4d053efc75424fca4b413ac1bc7a7e826fac629.

4 years agoDepsgraph: Fix crash with mouse select in edit mode with Copy-on-Write enabled
Sergey Sharybin [Mon, 19 Jun 2017 13:09:48 +0000 (15:09 +0200)]
Depsgraph: Fix crash with mouse select in edit mode with Copy-on-Write enabled

4 years agoFix (unreported) bad copying code of Surface Deform modifier.
Bastien Montagne [Mon, 19 Jun 2017 12:57:40 +0000 (14:57 +0200)]
Fix (unreported) bad copying code of Surface Deform modifier.

4 years agoFix compiler warnings from own recent rB0d5c7e5e36b9.
Bastien Montagne [Mon, 19 Jun 2017 12:43:44 +0000 (14:43 +0200)]
Fix compiler warnings from own recent rB0d5c7e5e36b9.

4 years agoFix (unreported) bad copying of Ocean modifier.
Bastien Montagne [Mon, 19 Jun 2017 12:40:08 +0000 (14:40 +0200)]
Fix (unreported) bad copying of Ocean modifier.

Was needlessly complicated code, forgot to copy a value (foam_fade), and
was utterly leaking memory!

4 years agoDepsgraph: Synchronize selection from original scene to copied-on-write one
Sergey Sharybin [Mon, 19 Jun 2017 10:36:34 +0000 (12:36 +0200)]
Depsgraph: Synchronize selection from original scene to copied-on-write one

This makes it possible to select objects in the viewport.

Selection in edit mode is still tricky, mainly because currently such update
would require tagging batch as updated, which is not possible with using just
and original object because it will never have batch.

Possible solution here would be to introduce some "batch" or "render" component
to depsgraph ID node for objects, so we can tag batch for update via depsgraph
tagging API.

4 years agoDepsgraph: Initial groundwork for copy-on-write support
Sergey Sharybin [Wed, 14 Jun 2017 08:26:24 +0000 (10:26 +0200)]
Depsgraph: Initial groundwork for copy-on-write support

< Dependency graph Copy-on-Write >
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

This is an initial commit of Copy-on-write support added to dependency graph.
Main priority for now: get playback (Alt-A) and all operators (selection,
transform etc) to work with the new concept of clear separation between
evaluated data coming from dependency graph and original data coming from
.blend file (and stored in bmain).

= How does this work? =

The idea is to support Copy-on-Write on the ID level. This means, we duplicate
the whole ID before we cann it's evaluaiton function. This is currently done
in the following way:

- At the depsgraph construction time we create "shallow" copy of the ID
  datablock, just so we know it's pointer in memory and can use for function

- At the evaluaiton time, the copy of ID get's "expanded" (needs a better
  name internally, so it does not conflict with expanding datablocks during
  library linking), which means the content of the datablock is being
  copied over and all IDs are getting remapped to the copied ones.

  Currently we do the whole copy, in the future we will support some tricks
  here to prevent duplicating geometry arrays (verts, edges, loops, faces
  and polys) when we don't need that.

- Evaluation functions are operating on copied datablocks and never touching
  original datablock.

- There are some cases when we need to know non-ID pointers for function
  bindings. This mainly applies to scene collections and armatures. The
  idea of dealing with this is to "expand" copy-on-write datablock at
  the dependency graph build time. This might introduce some slowdown to the
  dependency graph construction time, but allows us to have minimal changes
  in the code and avoid any hash look-up from evaluation function (one of
  the ideas to avoid using pointers as function bindings is to pass name
  of layer or a bone to the evaluation function and look up actual data based
  on that name).

  Currently there is a special function in depsgraph which does such a
  synchronization, in the future we might want to make it more generic.

At some point we need to synchronize copy-on-write version of datablock with
the original version. This happens, i.e., when we change active object or
change selection. We don't want any actual evaluation of update flush happening
for such thins, so now we have a special update tag:

  DEG_id_tag_update((id, DEG_TAG_COPY_ON_WRITE)

- For the render engines we now have special call for the dependency graph to
  give evaluated datablock for the given original one. This isn't fully ideal
  but allows to have Cycles viewport render.

  This is definitely a subject for further investigation / improvement.

This call will tag copy-on-write component tagged for update without causing
updates to be flushed to any other objects, causing chain reaction of updates.
This tag is handy when selection in the scene changes.

This basically summarizes ideas underneath this commit. The code should be
reasonably documented.

Here is a demo of dependency graph with all copy-on-write stuff in it:

= What to expect to (not) work? =

- Only meshes are properly-ish aware of copy-on-write currently, Non-mesh
  geometry will probably crash or will not work at all.

- Armatures will need similar depsgraph built-time expansion of the copied

- There are some extra tags / relations added, to keep things demo-able but
  which are slowing things down for evaluation.

- Edit mode works for until click selection is used (due to the selection
  code using EditDerivedMesh created ad-hoc).

- Lots of tools will lack tagging synchronization of copied datablock for
  sync with original ID.

= How to move forward? =

There is some tedious work related on going over all the tools, checking
whether they need to work with original or final evaluated object and make
the required changes.

Additionally, there need synchronization tag done in fair amount of tools
and operators as well. For example, currently it's not possible to change
render engine without re-opening the file or forcing dependency graph for
re-build via python console.

There is also now some thoughts required about copying evaluated properties
between objects or from collection to a new object. Perhaps easiest way
would be to move base flag flush to Object ID node and tag new objects for
update instead of doing manual copy.

here is some WIP patch which moves such evaluaiton / flush:

Lots of TODOs in the code, with possible optimization.

= How to test? =

This is a feature under heavy development, so obviously it is disabled by
default. The only reason it goes to 2.8 branch is to avoid possible merge

In order to enable this feature use WITH_DEPSGRAPH_COPY_ON_WRITE CMake
configuration option.

4 years agoFix (unreported) bad copying code in Mesh Deform modifier.
Bastien Montagne [Mon, 19 Jun 2017 10:55:11 +0000 (12:55 +0200)]
Fix (unreported) bad copying code in Mesh Deform modifier.

4 years agoFix (unreported) Dynamic Paint modifier not increasing ID usercount in copy function.
Bastien Montagne [Mon, 19 Jun 2017 10:25:41 +0000 (12:25 +0200)]
Fix (unreported) Dynamic Paint modifier not increasing ID usercount in copy function.

*Sigh* One more example of why we should keep ID management handling in
as few places as possible! It's impossible to keep more than a few
places in sync regarding which ID pointer is refcounted etc.

4 years agoFix (unreported) memory leak in Fluid modifier copying.
Bastien Montagne [Mon, 19 Jun 2017 10:21:14 +0000 (12:21 +0200)]
Fix (unreported) memory leak in Fluid modifier copying.

Also generally simplify/sanitize this copy code.

4 years agoGawain API naming refactor
Campbell Barton [Mon, 19 Jun 2017 10:18:04 +0000 (20:18 +1000)]
Gawain API naming refactor

Use consistent prefix for gawain API names as well as
some abbreviations to avoid over-long names, see: D2678

4 years agoCleanup: quiet warnings
Campbell Barton [Mon, 19 Jun 2017 09:31:36 +0000 (19:31 +1000)]
Cleanup: quiet warnings

4 years agoCMake: Remove unused legacy depsgraph option
Sergey Sharybin [Mon, 19 Jun 2017 09:14:11 +0000 (11:14 +0200)]
CMake: Remove unused legacy depsgraph option

We don't have legacy depsgraph anymore, no reason to keep the option.

4 years agoManipulator: use ui-scale for widgets
Campbell Barton [Mon, 19 Jun 2017 08:22:04 +0000 (18:22 +1000)]
Manipulator: use ui-scale for widgets

4 years agoEevee: Add data display for planar reflection.
Clément Foucault [Fri, 16 Jun 2017 23:59:01 +0000 (01:59 +0200)]
Eevee: Add data display for planar reflection.

Maybe not very useful but it's here for feature parity with the other probes.
The fragment shader clipping is here because I'm lazy and don't want to creating a proper quad Batch.

4 years agoEevee: Fix Planar Probe offset changing influence calculation.
Clément Foucault [Fri, 16 Jun 2017 23:56:45 +0000 (01:56 +0200)]
Eevee: Fix Planar Probe offset changing influence calculation.

4 years agoPlanar Probe: Add UI, 3d view Display and change defaults.
Clément Foucault [Fri, 16 Jun 2017 23:55:49 +0000 (01:55 +0200)]
Planar Probe: Add UI, 3d view Display and change defaults.

4 years agoEevee: Initial implementation of planar reflections.
Clément Foucault [Fri, 16 Jun 2017 22:08:03 +0000 (00:08 +0200)]
Eevee: Initial implementation of planar reflections.

Still pretty barebone: No roughness support, No normal distortion support.

4 years agoEevee: Add special shader for depth prespass.
Clément Foucault [Fri, 16 Jun 2017 21:50:40 +0000 (23:50 +0200)]
Eevee: Add special shader for depth prespass.

This way we can extend it to output more data (like motion vectors).
Add a variation that uses clip distances.

4 years agoDrwManager: Remove the need for buffers to be available.
Clément Foucault [Fri, 16 Jun 2017 13:11:23 +0000 (15:11 +0200)]
DrwManager: Remove the need for buffers to be available.

This way we can just avoid binding a texture by setting it's ref to NULL.

4 years agoDrwManager: Remove unnecessary ifs.
Clément Foucault [Fri, 16 Jun 2017 13:10:05 +0000 (15:10 +0200)]
DrwManager: Remove unnecessary ifs.

4 years agoProbe: Add planar type.
Clément Foucault [Fri, 16 Jun 2017 13:00:02 +0000 (15:00 +0200)]
Probe: Add planar type.

4 years agoDrwManager: Add support for Custom Clipping Planes
Clément Foucault [Fri, 16 Jun 2017 12:23:30 +0000 (14:23 +0200)]
DrwManager: Add support for Custom Clipping Planes

4 years agoDrwManager: Add the possibility to invert backfacing.
Clément Foucault [Fri, 16 Jun 2017 11:27:09 +0000 (13:27 +0200)]
DrwManager: Add the possibility to invert backfacing.

This is done in order to support planar reflection rendering.

4 years agoGPUFramebuffer: Add support to attach individual texture layer.
Clément Foucault [Fri, 16 Jun 2017 11:25:22 +0000 (13:25 +0200)]
GPUFramebuffer: Add support to attach individual texture layer.

4 years agoManipulator: de-duplicate flags and scale option
Campbell Barton [Mon, 19 Jun 2017 07:47:04 +0000 (17:47 +1000)]
Manipulator: de-duplicate flags and scale option