テンプレート:Release Notes/2.42/Rendering/Refactor
See CMS release notes for 2.42 at blender.org.
目次
- 1 Rendering
- 2 Shadow Bias
- 3 Orange zbuffer
- 4 Preview render
- 5 Tangent rendering
- 6 Orange renderer
- 7 Rendercore Orange fix
- 8 Renderer
- 9 render result layers
- 10 Rendering in RenderLayers
- 11 Previewrender
- 12 Misc
- 13 rendering
- 14 sequencer
- 15 previewrender
- 16 Live scanline updates while rendering
- 17 Recode of ztransp OSA
- 18 preview render
- 19 renderer
- 20 renderer
- 21 rendering
- 22 ztransp render
- 23 render
- 24 renderer
- 25 zttransp
- 26 renderlayer
- 27 bump correction factor
- 28 shadowbuffers
- 29 preview renderer
- 30 bokeh fix
- 31 rendering
- 32 non frontbuffer renderering
- 33 panorama
- 34 Memory saving for large renders
- 35 renderer
- 36 More environment map stuff
- 37 transmissivity
Rendering
Extra texture channel input for Mist effect; "Global". This feeds the global coordinate (from faces) to the sky texture color calculus, this to make textured mist a bit less transparent (was only view coordinate).
Added Copy/Paste 'mapping' options for World/Lamp buttons.
Moved render defines from scene to render module itself.
New diffuse shader, "Fresnel", which using existing fresnel formula. Since it hilights edges (away from lamp), nice to fill darker parts with the new layering system.
Note; for ray-shadow you need to use the Bias, to prevent 'terminator' problems. I made that option default now.
Shadow Bias
New option "Shadow Bias", to extend the boundary between shadow or no shadow a little bit. Uses same threshold function as the "Bias" button. (That latter still works, and will use an automatic bias value based on the geometry, to prevent terminator errors in raytracing).
Anyhoo, with this manual bias you can get rid of terminator problems for weird diffuse shaders now as well (like tangent or fresnel).
Orange zbuffer
Until now, the zbuffer was written straight from the internal zbuffer, which has values that are inverse-proportional (like 1.0/z) which makes it very hard to use it for postprocess, like zblur or other composit effects that require Z.
Based on info from ILM, the values stored for Z in exr files is the actual distance from a camera. I think that's about time to migrate to that convention!
By default now, after render, the z values are converted to floats. This saves in exr files now, but not in the Iris Z files. That latter was a blender-only anyway, so might be not a real hassle to drop. :)
You can see the difference in the image window, but notice the range now is linear mapped from camera clipstart to clipend.
Ortho camera now gives correct z values for buffers too.
Preview render
-Huge cleanup of code....
-renaming BIF_xxx calls that only were used internally
-BIF_previewrender() now accepts an argument for rendering method, so it supports icons, buttonwindow previewrender and node editor
-Only a single BIF_preview_changed() call now exists, supporting all signals as needed for buttoNs and node editor
Tangent rendering
WIP commit for inclusion of "Tangent" vector in rendering. This first implementation only supports it for Meshes with UV maps, and only tangents in V direction.
Tangent diffuse: http://www.blender.org/bf/0001_0080.avi Tangent spec, diffuse, and bump: http://www.blender.org/bf/20001_0080.avi
NOTE: since UV coordinates are still very badly subsurfed, this won't work well for subsurf meshes... on the todo.
On the todo; -generate tangents for meshes without UV (with some options) -use tangents from Curve/Surface -add the Ashkimin shader from tracker
Orange renderer
Accidentally didn't disable the tests I did for 'translucent raytrace', a cheapskate SSS method;
http://www.blender.org/bf/rt.jpg http://www.blender.org/bf/rt1.jpg
It slowed down render too much, was default on... but invisible! It needed the F10 buttons "rt" to be huge (600-1000)
Rendercore Orange fix
Optimization -frerun-cse-after-loop (included with -O2) was causing render to crash on cygwin with gcc 3.4.4. Changed declaration of shadepixel() argument "int facenr" to volatile. Can anybody recommend a more elegant solution?
Renderer
Log: Giant commit! A full detailed description of this will be done later... is several days of work. Here's a summary:
Render: -Full cleanup of render code, removing *all* globals and bad level calls all over blender. Render module is now not called abusive anymore -API-fied calls to rendering -Full recode of internal render pipeline. Is now rendering tiles by default, prepared for much smarter 'bucket' render later. -Each thread now can render a full part -Renders were tested with 4 threads, goes fine, apart from some lookup tables in softshadow and AO still -Rendering is prepared to do multiple layers and passes -No single 32 bits trick in render code anymore, all 100% floats now.
Writing images/movies -moved writing images to blender kernel (bye bye 'schrijfplaatje'!) -made a new Movie handle system, also in kernel. This will enable much easier use of movies in Blender
PreviewRender: -Using new render API, previewrender (in buttons) now uses regular render code to generate images. -new datafile 'preview.blend.c' has the preview scenes in it -previews get rendered in exact displayed size (1 pixel = 1 pixel)
3D Preview render -new; press Pkey in 3d window, for a panel that continuously renders (pkey is for games, i know... but we dont do that in orange now!) -this render works nearly identical to buttons-preview render, so it stops rendering on any event (mouse, keyboard, etc) -on moving/scaling the panel, the render code doesn't recreate all geometry -same for shifting/panning view -all other operations (now) regenerate the full render database still. -this is WIP... but big fun, especially for simple scenes!
Compositor -Using same node system as now in use for shaders, you can composit images -works pretty straightforward... needs much more options/tools and integration with rendering still -is not threaded yet, nor is so smart to only recalculate changes... will be done soon! -the "Render Result" node will get all layers/passes as output sockets -The "Output" node renders to a builtin image, which you can view in the Image window. (yes, output nodes to render-result, and to files, is on the list!)
The Bad News -"Unified Render" is removed. It might come back in some stage, but this system should be built from scratch. I can't really understand this code... I expect it is not much needed, especially with advanced layer/passes control -Panorama render, Field render, Motion blur, is not coded yet... (I had to recode every single feature in render, so...!) -Lens Flare is also not back... needs total revision, might become composit effect though (using zbuffer for visibility) -Part render is gone! (well, thats obvious, its default now). -The render window is only restored with limited functionality... I am going to check first the option to render to a Image window, so Blender can become a true single-window application. :) For example, the 'Spare render buffer' (jkey) doesnt work. -Render with border, now default creates a smaller image -No zbuffers are written yet... on the todo! -Scons files and MSVC will need work to get compiling again
OK... thats what I can quickly recall. Now go compiling!
render result layers
WIP commit on getting the 'render result layers' saved in a single file. Previous fix accidentally committed parts of that... :)
Note: it is currently disabled still... will commit the real version soon.
Rendering in RenderLayers
It's important to distinguish a 'render layer' from a 'pass'. The first is control over the main pipeline itself, to indicate what geometry is being is rendered. The 'pass' (not in this commit!) is related to internal shading code, like shadow/spec/AO/normals/etc.
Options for RenderLayers now are: -Indicate which 3d 'view layers' have to be included (so you can render front and back separately) -"Solid", all solid faces, includes sky at the moment too -"ZTransp", all transparent faces -"Halo", the halos -"Strand", the particle strands (not coded yet...)
Currently only 2 'passes' are exported for render, which is the "Combined" buffer and the "Z. The latter now works, and can be turned on/off.
Note that all layers are still fully kept in memory now, saving the tiles and layers to disk (in exr) is also todo.
Previewrender
Previewrender (buttons) now supports Lamp, Texture and Sky previews again. One exception I didn't solve yet... for the Stucci texture.
In a next commit I will add the preview.blend, so people can play with it!
The rules for preview.blend are pretty primitive still... might become a bit more advanced later. Here's what it uses now:
-If Object has name starting with 'p' it will get the to-be-previewed Material or Lamp assigned -If Object has name starting with 't' its Material gets the texture assigned for Texture previews
The layer codes for current preview options are in DNA_material_types.h;
- define MA_SPHERE 0
- define MA_CUBE 1
- define MA_FLAT 2
- define MA_MONKEY 3
- define MA_SPHERE_A 4
- define MA_TEXTURE 5
- define MA_LAMP 6
- define MA_SKY 7
(SPHERE_A is sphere with alpha for icons)
Misc
Hold SHIFT+MMB in camera view shifts the viewports around.
-Moved all 'render pipeline control' options out of the Material panels into the (now renamed) "Links and Pipeline" Panel. These are the options that are not per material-node, but global for the entire Material tree. It includes ZTransp, Zinvert, Strands, Halo, Wire, etc.
-To further make Node editing clear, when you enable Nodes for the first time, the link button to the first Material node is drawn red, to note that here needs something linked or added.
rendering
Recoded Panorama rendering.
The old implementation was added quite hackish (talking about 10 yr ago). You also had to make a small image slice, which was extended Xparts in size. That also required to adjust the camera angle. Very clumsy. Now; when enabling the Panorama option, it will automatically apply the panorama effect on the vertically aligned tiles. You can just enable or disable the "Pano" button, to get a subtle lens effect like this:
(without pano) http://www.blender.org/bf/rt.jpg (with pano) http://www.blender.org/bf/rt1.jpg
For Panorama render, the minimum slice size has been hardcoded to be 8 pixels. The XParts button goes up to 512 to allow that. In practice, rendering 64 slices will already give very good images for a wide angle lens of 90 degrees, the curvature of straight lines then is equal to a circle of 256 points. Rendering a full 360 degree panorama you do by creating an extreme wide angle camera. The theory says camera-lens 5 should do 360 degrees, but for some reason my tests reveil it's 5.1... there's a rounding error somewhere, maybe related to the clipping plane start? Will look at that later. :)
Also note that for each Xpart slice, the entire database needs to be rotated around camera to correct for panorama, on huge scenes that might give some overhead. Threaded render goes fine for Panorama too, but it can only render the vertically aligned parts in parallel. For the next panorama slice it has to wait for all threads of the current slice to be ready.
On reading old files, I convert the settings to match as closely as possible the new situation. Since I cannot bump up the version #, the code detects for old panorama by checking for the image size. If image width is smaller than height, it assumes it's an old file (only if Panoroma option was set).
sequencer
- Allow the Sequence editor to scale in Y axis too.
Why was this never enabled?
previewrender
Fix: buttons previewrender was re-rendering on scrolling a lot, this due to rounding noise when trying to detect if previewsize changed. Made it use a threshold now.
Fix: SHIFT+P in editmode is still push/pull, outside editmode it'll do the preview render. (Note; editmode changes are not updated anyway!)
Live scanline updates while rendering
Using a timer system, each second now the tiles that are being processed are checked if they could use display. To make this work pretty, I had to use the threaded 'tile processor' for a single thread too, but that's now proven to be stable.
Also note that these updates draw per layer, including ztransp progress separately from solid render.
Recode of ztransp OSA
Until now (since blender 1.0) the ztransp part was fully rendered and added on top of the solid part with alpha-over. This adding was done before the solid part applied sub-pixel sample filtering, causing the ztransp layer to be always too blurry. Now the ztransp layer uses same sub=pixel filter, resulting in the same AA level (and filter results) as the solid part. Quite noticable with hair renders.
preview render
Made preview render only use non-threaded tile processor, got reports of crashes, and noticed here theres something not well functioning with ghost & threads, probably. Will test that tomorrow more.
renderer
-RenderLayers with 'view layers' set, now also take visible lights into account. Works just like for scene layer settings.
-On ESC from render, compositing (if set) is being skipped too
-While rendering with multiple RenderLayers it will end with a display of the current RenderLayer (as in Scene buttons)
renderer
Log: Render feature request; when saving EXR files during anim render, it can optionally save a jpg next to it, with compression as set in buttons. This allows quick previews or download from farms.
Button: next to the 'half' and 'zbuf' options for exr.
-Scene support in RenderLayers You now can indicate in Compositor to use
RenderLayer(s) from other scenes. Use the new dropdown menu in the "Render Result" node. It will change the title of the node to indicate that. The other Scenes are rendered fully separate, creating own databases (and octrees) after the current scene was finished. They use their own render settings, with as exception the render output size (and optional border). This makes the option an interesting memory saver and speedup. Also note that the render-results of other scenes are kept in memory while you work. So, after a render, you can tweak all composit effects.
-Render Stats Added an 'info string' to stats, printed in renderwindow header. It gives info now on steps "creating database", "shadow buffers", and "octree".
- Bug fixes
Added redraw event for Image window, when using compositor render.
Text objects were not rendered using background render (probably a bug since depsgraph was added)
Dropdown buttons in Node editor were not refreshed after usage. Sometimes render window did not open, this due to wrong check for 'esc'.
Removed option that renders view-layers on F12, with mouse in 3d window. Not only was it confusing, it's now more efficient with the Preview Panel, which does this nicely.
rendering
additions to make the orange rendering preparation script work, sorry undocumented again (we are testing this now and gotta commit to get this to other compus at studio, Stivs make a note to bug me about the doc or someone add it.. :o)
ztransp render
-ZTransp render now also delivers Z values and Speed vectors in passes Note that speed vectors accumulate within a pixel to store the minimum, so rendering ztransp on top of a non-moving plane won't give speed... Best results you get is by rendering it in a separate layer. The Z value stored is the closest visible transparent face in the pixel.
Fixes:
-Render to 'spare page' has been enabled again. Because of the strict separation of Render and UI, but especially because a 'render result' now can consist of unlimited images, I've not made this a Render feature. Instead, the render-window itself stores the 'spare' image... I also had to change the convention for it a bit. Now, instead of having two "render buffers" (which was a render feature), the RenderWindow will store each previous frame on a re-render. This storing will only start after you've pressed 'Jkey' once, but then always will happen for as long the rendered image is same size as previously. For clarity, I've also renamed the window title, to 'previous frame'.
-RenderWindow shows alpha again on Akey
-Display of the Zvalues in ImageWindow has been tweaked. White now denotes closest, and the color range goes from camera clip-sta to clip-end.
render
Log: Upgraded max limit for faces in render. Up to now, quads were zbuffered as triangles, with a tag bit to denote which triangle was which part of the quad. That was hardcoded bit 0x800000, which allows a maximum of about 8 million quads...
I've made this a nice #define, set to be 16 times larger. So, now the facejunkies can go up to 128 Million faces, were it not that this will eat up a load of memory! I only have 1 Gig in this machine. A test with 9M vertices and 7.5M quads eats up 912 MB of memory already. If this becomes a real issue, I know tricks how to make the vertices 20 bytes smaller, and faces 4 bytes, which would in the above case save about 200 MB. Not much... but probably worth the try? A much better method is of course 'bucketing' the renderdata per tile. It's a spec of the render recode, but not a quicky to add.
Also: bug fix in curve code. There was a short counter still, crashing on large curves with resol set to 1024 :)
renderer
Log: Feature: -Appending Images now re-assigns relative paths, to match with the file as currently being used
Group Nodes made functional: each group now can be re-used (instanced) with SHIFT+G. This works as well for local groups as library-linked groups.
Also fixed that group nodes were copying internal data to the outside, which made it impossible to use the socket-buttons to set individual values for each group-instance.
Library-linked groups are prevented from editing.
But, try to open a group and it will give a request for 'make local'.
The make local rule is identical to other library data in blender, meaning: -if all users of the library data are local -> the library data is flagged 'local', and if needed a unique name is made -if there's mixed users (local and from other library data) it makes a full copy, and assigns this copy to all local users.
zttransp
-ZTransp render now also delivers Z values and Speed vectors in passes Note that speed vectors accumulate within a pixel to store the minimum, so rendering ztransp on top of a non-moving plane won't give speed... Best results you get is by rendering it in a separate layer. The Z value stored is the closest visible transparent face in the pixel.
renderlayer
Tweaks in RenderLayer rendering:
-LampHalos can be rendered separately too. Just disable 'Solid' in a layer and keep 'Halo' option enabled. -Note that disabling 'Solid' will still fill in Z values for the solid faces, to provide occlusion information for the Ztransp and Halo layer options. The latter didn't work this way until now for OSA render. ALso note that that Ztransp+LampHalo still isn't good marriage... it renders a bit weird, but that's an old issue. :)
bump correction factor
Testing commit for the studio; a bump-correction factor for when images get sampled on larger distance. It actually just flattens bump when the sampled area is (much) larger than pixel size, to prevent weird things like:
current render: http://www.blender.org/bf/b1.jpg
distance corrected: http://www.blender.org/bf/b2.jpg
(image based on Alexander file :)
Tested on env's dinos too... seems to work, but we'll see.
shadowbuffers
Work on shadowbuffer system... right now only new filtertypes for sampling have been activated for UI. Check the pictures here:
http://www.blender.org/bf/filters/index2.html
I also did do tests with anti-aliased shadowbuffers:
http://www.blender.org/bf/filters/index3.html
But this needs more thinking over still...
preview renderer
Until now, on each mouse/key event preview render restarted with first tile. It now rememers where it was, and continues rendering. Also tried to get threaded preview working, but its more work than I can spend right now. Back to bugs :)
bokeh fix
Log: Fix in blur filter 'bokeh'.
This filter type uses a filter-image, and spreads color of current pixel over all neighbour pixels based on this filter image. That creates a problem on borders... since there only parts get accumulated. Solved by going over the to-be-filtered image pretending it is wider exactly the amount of the filter-image size.
rendering
Rendering tricks for improving workflow:
-Button option "Single" in render-layer panel will enable to only render the currently indicated render-layer. It will also skip compositing.
-Brought back the 'Local View' render. This will only render the visible objects, but with lights from the original view layers. To make the option useful, it also temporal enables 'Single', which has the a disadvantage that you need to set the correct render-layer. It is a bit a tricky option though... since its quite invisble and confusing for people who don't know the feature. This might become either a button in 3d header, or use a popup requester to confirm, or... will need to think over! At least; both options display in render window a text to denote the option.
non frontbuffer renderering
Test with render window not drawing in frontbuffer anymore. Only enabled now for OSX though... that's where we can verify if the irregular crashes will stop (ATI issue, nvidia seems to be OK). If ATI users for other platforms want to check; just extend the two #ifdefs I added for frontbuffer drawing. Note; the syntax then becomes #if defined(__APPLE__) || defined(_YOUR_PLATFORM_)
panorama
nd now the studio is rendering panoramas... finding
out that vectorblur also could use correction for it. The current perspective projected blur would look in
180 degree view like this:
http://www.blender.org/bf/p2.jpg (circle of planes rotating around camera)
After some fight with my rusty highschool gonio I got it fixed; nice cylindrical projected speedvectors:
http://www.blender.org/bf/p1.jpg
Memory saving for large renders
New option "Save Buffers", in first Output panel of renderbuttons, will not allocate all render buffers, but instead save the rendered tiles to exr. For each scene rendered, a single exr file then is created. After rendering, the files get read, and only then the memory allocation is done.
The exr files are saved in the temp dir (from user settings), and have names derived from the filename+scene name. That way these buffers remain relatively unique, and can be re-used later too.
Saving all render-layers and passes in a single file (as F3 command) will be done later. Also reading back the current multilayer exr files is not supported yet (will read black). The purpose is that these files then can be used as input for the Compositor.
One fun thing I added; after rendering once with this option, close Blender, and restart it. If you have a Composite set up press 'R' on an active RenderResult node. This will refresh the node(s) and load the exr, so you can composite again without a re-render.
renderer
Added option to only render a single side of an Environment map cube, allowing to use it for planar mirrors. Enable it with the new "Plane" option in the Environment Map Panel.
Current default is to render the cube side that points to the positive Z axis direction. To make it work, it uses the same image for all other cube sides, so it will 'wrap around'.
Also made maximum resolution for environment map to be 4096x4096 now.
More environment map stuff
-added a zoom factor for Planar Environment Map, allowing to zoom in or out on the reflected object. The zoom is corrected when rendering, so it just gives control over the resolution. -Planar maps don't cycle anymore, but only render the front plane, using standard image texture extend mode. -threaded rendering is back in envmap render
transmissivity
Patch was already approved, but needed testing on existing files & time...
Description is here: http://mediawiki.blender.org/index.php/BlenderDev/Transmissivity
In short: patch adds filtering based on thickness of material, and support for internal reflection (resulting in better looking glass).
Thanks! (Only note; appearance of glass render now differs... is acceptable, but for the factor to control transmissivity a scaling factor could be added in UI, the length of a ray is a relative thing...)