* Add alpha pass output, to use set Transparent option in Film panel.
* Add Holdout closure (OSL terminology), this is like the Sky option in the
internal renderer, objects with this closure show the background / zero
alpha.
* Add option to use Gaussian instead of Box pixel filter in the UI.
* Remove camera response curves for now, they don't really belong here in
the pipeline, should be moved to compositor.
* Output full float values for rendering now, previously was only byte precision.
* Add a patch from Thomas to get a preview passes option, but still disabled
because it isn't quite working right yet.
* CUDA: don't compile shader graph evaluation inline.
* Convert tabs to spaces in python files.
===== Situation before this patch =====
in the current situation inside the node editor there is a properties panel (press 'n'-key). This pabel displays some information about the node, backdrop and grease pencil. The UI of the property panel is typically vertical oriented. Nodes in the other hand are not oriented in a direction. Both area's are draw via the same draw function.
With some nodes this will create not user-friendly UI. Try the color-balance for instance). The 3 color circles are drawn next to each other, it would be better to draw them below each other.
When creating more complex nodes you don't want to display all handles in the node-panel and in the properties panel. For instance fine-tuning handles you only want to appear in the property panel to reduce place in the node itself.
===== Situation after this patch =====
This patch separates the draw functions of the property panel and the node panel.
When no special draw function is created for the property panel, the draw function of the node will be used as 'fallback'
===== Impact =====
==== BKE_node.h ====
add a new uifunc (called uifuncbut) to the bNodeType struct. The definition is the same as the uifunc.
==== node_buttons.c ====
if the uifuncbut is set, call it. currently calls the uifunc method
==== drawnode.c ====
static void node_composit_set_butfunc(bNodeType *ntype). set the uifuncbut function where needed. When at the end of the method uifuncbut is still empty, set uifuncbut to the uifunc.
===== Final note =====
! PS. this is not limited to the compositor it also works for Materials and Textures !
! PPS. For other branching creating their own node-tree. Please make sure that your uifuncbut is set NULL or a valid draw function !
A mesh can consist out of multiple material. Take a character with clothing's. the skin can be a different material as the different clothing's. During compositing it is a common use-case to only do a part of the composit on only a specific material. Currently this can not be done.
In blender movies this feature is known to be implemented, but until now it never got integrated into trunk.
Proposal
With material index the Blender internal renderer will be capable of creating a buffer containing the material indexes of the first pixel-hit. This will be implemented in the same manner as the object index.
In the compositor the ID Mask node can be used to extract the information out of the Render pass.
Impact
User interface
On the properties-space the next changes will be done
Scene⇒Render layer⇒Passes⇒Material index will be added
Material⇒Options⇒Pass index will be added
DNA
Material struct will get an new field called “index”. this will be a short-type.
Material struct the field pad will be removed.
A new Render-layer pass will be added (bit 1«18)
RNA
Material RNA is updated (based on “pass index” from object)
Render layer RNA is updated (based on IndexOB)
Blender internal renderer
The Blender internal renderer will process the render pass as a copy of the Object index.
Blender compositor
The render layer input will get a new output socket called “IndexMA”
Usage
An example on how to use material index can be found at:
https://svn.blender.org/svnroot/bf-blender/trunk/lib/tests/compositing/composite_materialindex.blend
This is also example of a commit message longer than the commit itself :)
http://wiki.blender.org/index.php/Dev:2.5/Source/Render/TextureWorkflow
* Added "active texture node" in shading node trees.
* Texture draw mode draw active texture node now, and new Material draw
mode shows GLSL material.
* GLSL materials now match solid draw mode lighting better.
* Texture properties can now texture nodes from material/world/lamp.
Some notes about code status:
* The Blender modifications were fairly quickly put together, much more code
polish and work is needed to get this to a state where it can be committed
to trunk. Files created with this version may not work in future versions.
* Only simple path tracing is supported currently, but we intend to provide
finer control, and more options where it makes sense.
* For GPU rendering, only CUDA works currently. The intention is to have the
same kernel code compile for C++/OpenCL/CUDA, some more work is needed to
get OpenCL functional.
* There are two shading backends: GPU compatible and Open Shading Language.
Unfortunately, OSL only runs on the CPU currently, getting this to run on
the GPU would be a major undertaking, and is unlikely to be supported soon.
Additionally, it's not possible yet to write custom OSL shaders.
* There is some code for adaptive subdivision and displacement, but it's far
from finished. The intention is to eventually have a nice unified bump and
displacement system.
* The code currently has a number of fairly heavy dependencies: Boost,
OpenImageIO, GLEW, GLUT, and optionally OSL, Partio. This makes it difficult
to compile, we'll try to eliminate some, it may take a while before it
becomes easy to compile this.
When using masks or other simple 3D elements in composites, doing
a layer re-rendering on a node is a bit clumsy all the time.
This commit does two things to help:
- new hotkey "Z" in node editor automatically finds render layer
that changed and re-renders it + composites
- option "Auto Render" does same, but then after every transform
edit in 3D window
The latter is experimental; real & proper system for this requires
full threaded render support (like previews). But it works!
Demo file:
http://download.blender.org/demo/test/auto_composite.blend
Important fix:
After any render, all the render layers were tagged "changed", which
caused any edit to first totally recomposte everthing. Now it only
composites changes.
Implementation notes
- DAG scene flush now sets 'changed' flags in render layer nodes
- Added notifier for 'transform finished' to trigger the update,
this is temporarily.
This is because problem reported by venomgfx on the irc.
If you have a render of 2k with a render size of 25% (and this
problem is for any resolution/size) and you try to use a image
of 1k in the compo, the first thing you do is put a scale node.
Here come the problem, if you set the option "Scene Size" in the
node scale, the buffer output is not the same size that the render.
This is because the "Scene size" work with the image size and
not the render size, so in this case is the 25% of 1k.. not
the 25% 2k.
So this new option "Render Size" scale the output buffer to the
render resolution, taking into account the render size (percentage) too.
* Remove the manual OSA method but rather pass on derivatives to the
textures. This means that at the moment e.g. the bricks node is not
antialiased, but that image textures are now using mipmaps. Doing
oversampling on the whole nodetree is convenient but it is really
the individual textures that can do filtering best and quickest.
* Image textures in a texture node tree were not color corrected and
did not support 2d mapping, now it's passing along shadeinput to
make this possible. Would like to avoid this but not sure how.
* Fix preview not filling in all pixels when scaling or rotating in
the texture nodes.
Was very quick to do, now re-aquainted with node editor.
http://mke3.net/blender/devel/2.5/hue_correct_node.jpg
Todo: modes for affecting hue and value on the vertical axis as well as just saturation - or if an enterprising coder wants to give it a go, let me know and
I can help :)
similar to sequence editor.
--> http://mke3.net/blender/devel/2.5/color_balance_node.jpg
Also added 0 key (zero key) shortcut when mouse is over a button, to reset it to its default value.
Same as the RMB menu ->Reset to Default, except for color wheels, it only resets the hue/sat/value
components that that widget affects.
Peter/Xavier: The existing color balance code can generate NaNs (fractional power of a negative),
which causes havoc along the image pipeline. I added a check in the node code to prevent this.
Still plenty of potential for lots of better colour correction tools in the compositor, just needs time...
Testing a new method that hopefully will be faster to use than finicky socket
selection - now just select multiple nodes and press F - available output sockets
on the selected nodes will get automatically connected to the active node.
It works for one socket type each time, to avoid getting lots of extra connections
when you join up, but as a shortcut you can easily press F again to connect up
other socket types. For example, to connect a render layer node (with vector pass)
to a vector blur node, select the render layer then the vector blur, and press F
three times to connect up the Image, Z and Vector sockets. It now also
preferences sockets with the same name to connect up first.
There's also another option (ctrl F) which will replace existing input links, rather
than only connecting up links to available input sockets.
* Also changed socket link knife cut to a more convenient shortcut - Ctrl LMB tweak
Now the rna path to nodes happens via the node name, which is ensured to be unique via RNA.
As part of this, the node->username string has been removed, upon renaming the node itself it takes care of making sure it's unique (like bones, constraints, etc). There's currently no interactive rename tool, but you can do it via the datablocks editor.
- plus a few notifier tweaks, using the newer NC_NODE notifier to refresh graph editor etc.
Still a few quirks, including redraw issues on multilayer image input nodes, but it's pretty much there.
Would also be good to wrap the input/output sockets, too, will check on it.
This fixes bug [#19740] INPUT NODE: Cannot load images / motion pictures
Selecting a material in the node tree sets this as the active material and the buttons view redraws.
Added rna prop material.active_node_material
Currently its not clear what settings are used by the node material and the base material (needs some tedious research) so I made most panels use the node material with the exceptions of volumetrics, physics and halo settings.
We'll probably need to split the panels up to do this properly.
Editors Modules
* render/ module added in editors, moved the preview render code there and
also shading related operators.
* physics/ module made more consistent with other modules. renaming files,
making a single physics_ops.c for operators and keymaps. Also move all
particle related operators here now.
* space_buttons/ now should have only operators relevant to the buttons
specificially.
Updates & Notifiers
* Material/Texture/World/Lamp can now be passed to DAG_id_flush_update,
which will go back to a callback in editors. Eventually these should
be in the depsgraph itself, but for now this gives a unified call for
doing updates.
* GLSL materials are now refreshed on changes. There's still various
cases missing,
* Preview icons now hook into this system, solving various update cases
that were missed before.
* Also fixes issue in my last commit, where some preview would not render,
problem is avoided in the new system.
Icon Rendering
* On systems with support for non-power of two textures, an OpenGL texture
is now used instead of glDrawPixels. This avoids problems with icons get
clipped on region borders. On my Linux desktop, this gives an 1.1x speedup,
and on my Mac laptop a 2.3x speedup overall in redrawing the full window,
with the default setup. The glDrawPixels implementation on Mac seems to
have a lot of overhread.
* Preview icons are now drawn using proper premul alpha, and never faded so
you can see them clearly.
* Also tried to fix issue with texture node preview rendering, globals can't
be used with threads reliably.
* Node buttons can now use the layout engine. a few simple
ones are converted. We'll keep this code in C for now,
python wouldn't help much here.
* For node buttons not using the layout engine, manually
computing the button height is not longer needed.
* Node inputs are still not RNA wrapped, would be good to
have these available as well for keying, but makesrna does
not have access to the bNodeTypes.
Added RGB space distance matte Node
Added HSV color matte Node
Fixed Image difference matte Node to use image differences instead of RGB space distance
Fixed luminance node for low end values being read wrong
Fixed CMP_util copy/swap functions not accounting for all channels
Fixed UI for difference matte Node
Added RNA for new nodes
Delegates now receive a TexParams* instead of float *coords. This gives texture nodes access to dxt, dyt, cfra as well as coords. This fixes the time node and allows nice sampling to be implemented.
Implementation Note:
* Moved the scene copy/unlink code back into blenkernel, with
the exception of the copy single user stuff which is still in
object_edit.c.
* Uses SCREENDELETE notifier like SCREENBROWSE, seems only clean
way to do this now.
TEX and CMP to follow.
Also, renumbered the texture nodes because when I first wrote them I thought
they could share ID numbers with the SH and CMP nodes. D'oh!
Notes:
* Sequence transform strip uses G.scene global, this is commented
out now, should be fixed.
* Etch-a-ton code was most difficult to merge. The files already in
2.5 got merged, but no new files were added. Calls to these files
are commented out with "XXX etch-a-ton". editarmature.c and
transform_snap.c were complex to merge. Martin, please check?
* Game engine compiles and links again here for scons/make/cmake
(player still fails to link).