Report noted the slow icon renders for menus, which indeed is an issue,
especially when texture images need to be loaded (not to mention that
will eat up loads of memory).
Added a flag in scene to disable loading of images, makes it 50 times
faster, at least :)
Another thread render issue, now in Image texture, the 'repeat' value was
still a global... how did I think that would ever work? Just forgot about
that one I guess. :)
Render timers were called in the internal render loops (tile processor),
they still had to be moved to the outer loop, so they include fields/blur
or sequencer render timing correctly.
Thread render error: a flag was stored in read-only data to indicate
whether top or bottom hemisphere of sky was rendered. That can't work
with tiles (but did work when scanlines were threads).
suffered for the entire movie. :)
It only happened when rendering large frames, using a lot of memory and
typically when you also use other software in meantime.
Reason: the main thread does the drawing updating, while rendering is
still continuing. When using Ztransp, there was a free buffer done
when possibly a draw could still be in progress. Only crashed when drawing
is slow... explaining why it only showed up in more complex cases.
A proper check for the error "No Camera" on rendering can only be made
after a renderwindow was initialized. The error menu then shows in the
render window, which appears to not work OK in windows ATI (again!).
So; I've moved the test to before the renderwindow is activated, this is
not a test checking on the entire render pipeline (like Composite nodes or
sequence strips). In case more complex setups cannot render, an error is
printed in the console only.
Not clearing the value for 'parts rendered' caused 3d previewrender to
sometimes fail doing updates (when an escape happens during converting
render data).
Wire render crashes in Linux (only!), but why? Using a calloc instead of
malloc fixes it, but that doesn't solve the real issue in the code.
I can only imagine that bsearch() in linux has a completely different
implementation...
Anyhoo; let's commit the calloc, at least then we got stable wire render!
- when renderwin exists, but not used for render, the ESC timer check still
could return ESC event, due to missing flag clearing.
(For example in sequencer, a scene strip did not update on frame advance)
- option 'single layer' set in combination with render "Do Sequence" didn't
free the pushed layers.
The new Material "LightGroups" only worked with lamps in visible layers.
Now also lamps from the group that are not visible are included for
rendering, ensuring that a lightgroup always works on that material,
disregarding layer settings (unless lamp is type 'layer lamp').
Sequencer:
Removing feature that allowed live updates of render progress while using
scene strips. In 2.41 and older this also happens invisible, and ESC from
it works now anyway.
Two reasons:
- it is quite annoying, especially on quit renders
- new 'render to window' conflicts too much with the sequencer window
option that shows previews (in code as well as functional!)
When faces (like in cubes) have exactly 90 degrees angles with other
faces, the check for a vertex-normal flip became random, caused by the
infamous bad floating point resolution.
Solved with including FLT_EPSILON in the check.
Also: minor optimize for readability and removed dutch function name
(contrpuntnorm -> check_vnormal)
Material option "Only shadow" didn't work 100% anymore since shadowbuffer
returns 0.0 (shadow) on backfacing normals.
Added extra test in code to solve this.
Lens flare: error in counting visibility per halo-flare in the to-be
cropped area of tiles. Halos now don't render in the 2 pixels exta outline
per tile, which is only used by faces anyway.
When using multiple RenderLayers, each with own 'edge render', the buffer
holding edge pixels wasn't cleared from scratch, so the edges of previous
layers were showing too.
The Stucci texture now returns an 'intensity' value too, this wasn't too
interesting though... not reflecting all options for the texture itself.
Now it shows better in preview renders.
solution could have been much simpler, but since that would have required
altering blender code (only a single line though)...
also fixed a minor bug reported in the yafray forums, when spotlights had the
shadowbuf flag set and then switching to yafray, yafray still rendered
shadows which to user was unexpected since there was no shadow flag enabled
in the yafray lamp panel, so now ignores the blender flag.
Creating texture coordinates for Curve bevels didn't allocate a correct
sized memory block when both U and V directions of a bevel are circular.
This will also fix "UV orco" for such curves (like donut shapes).
Silly: when using vector blur on a curve or text object, without having a
material assigned to it, the default material didn't get initialized OK
for vector blur, causing random streaks.
In windows, without temp path set, the 'save buffers' render option crashes.
I've coded a blenlib BLI_is_writable(char *filename) to check for such
cases. This is not much needed in Blender, since the open() command is
checked for. However, file saving happens deep inside the C++ exr lib, and
it throws an exception crash when a file cannot be written.
naming convention for Compositing:
- Render Result node -> Render Layers node (name only appears in Add menu)
- Compositor image -> Viewer Node image
I've also added a version patch (2.41 saved files only) to rename existing
"Compositor" Images.
More Sequence render fixes:
- on load of .blend file, with Sequencer invoking a sequence render, the
header window matrix was not set, giving "Insane icon" prints
- option "Do Sequence" had no re-display call in end
- removed "Unified" button, replaced with "HD" preset for 1920x1080 output
- removed the unused "Pass" options
- removed the unused "Strands" render-layer option
Because the internal render pipe supports this already; added two more
render-layer options:
- "Sky", to enable/disable sky render in a layer (this was part of "Solid"
before, not so correct... to ensure previously saved files work, the
"Sky" option is set by default when "Solid" was set. The version patching
will do this temporally always, until we've bumped up version to 2.42
- "Edge", to enable/disable edge render in a layer. Nice for compositing.
Also in this commit: fixed warnings for exported functions for the new
Node Editor pull-down menus.
Code to allow "Env" material to mask out ztransp gave bad AA on edges of
solid faces, when transparant was behind it.
Recoded "Env" to use index -1 in the polygon index buffer, and restored
code that caused the bad AA.
NOTE: stucci didn't return 'intensity' since blender 1.0, something that
alsways caused headaches all over (all other textures do per definition).
But, allowing stucci to return 'intensity' would break old files.
To make it work for preview, I had to solve this once. Done with a version
patch, so old files (including current 2.41!) won't read with color channel
active for Stucci textures.
(Preview.blend I saved as a 2.42 file btw!)
By default it is disabled (depth 0.0), so rendering is as usual.
The meaning of "depth" and "falloff" will be extensively shown in the
release log pages. Coming soon!
(Patch provided by Ed Halley)
Next to the "DispWindow" there are now two new choices:
- Display render output to Image Editor
- Display render output to Screen-sized Image Editor
Both options won't open a 2nd window anymore, which makes work quite more
smooth even, especially because 'focus' isn't lost. Further it fits in the
'single window UI' paradigm of Blender. Should have been done 10 years ago!
Lastly it might bypass issues with X11... having 2 windows with opengl
context is not always stable in Linux.
This option uses an identical trick as for the Compositor viewer, using an
Image block with a fixed name ("Render Result").
The flow, when invoking a Render, goes as follows:
- first it checks if there's an Image Editor visible displaying the "Render
Result", if so then it uses that area-window.
(Use this option for dual-monitor setups for example, a render will always
go to the same location then)
- else it checks if there's an Image Editor open in general, it then
assigns that window the "Render Result" Image.
- else: it searches for the largest Area in the screen, and turns that into
a temporal Image Editor showing render output.
After a render, an ESC will push back the former view, if the Area type has
changed.
Same rules apply for the "Full Screen" option. Here an ESC will always go
back to the regular Screen, and restore Area type if required.
While rendering, the queue for the renderwindow isn't handled yet, so you can
not zoom (nor get full redraws), as for the regular render window.
Existing conflicts:
- in FaceSelect mode, the Image editor enforces to display the face texture
after rendering again.
- when using an Image window for compositing, you'll lose the Viewer output
on a render.
Implementation note:
While rendering updates, nothing is drawn in frontbuffer anymore. That's
good news for b0rked OpenGL drivers (and faster). However, for the few
OpenGL cards that don't do a "swap copy" but a "swap exchange" you get
issues... has to be worked on. I'm afraid we have to drop frontbuffer
drawing altogether.
Other fixes:
- Hotkeys NumPad 1, 2, 4, 8 will set zoom levels (was half coded only?)
Use SHIFT to zoom out (smaller).
- Rendering Tile updates still had draw errors on edges of tiles, in OSA
only. (Caused by commit 4 days ago)
Preview render in 3d window could crash when a re-render was invoked before
the render was initialized even, reading a NULL pointer for scene.
Happened on frantic & quick editing.