old files still use the old fast OSA, and when you want a specific
material to have specular/shader/texture AA you can set this individual.
When rendering ray_mir or ray_transp or ray_shadow the new OSA will be
effective by default however.
Still todo; make this switch work for transparant faces and unified...
This problem appeared to be a famous one, with some fun read to be found
on the web. The solution as I commit here is described on the site:
http://www.blender3d.org/cms/Misc_improvements.355.0.html
As extra (I needed it quite some!) added requested feature to have the
renderwindow display in titlebar whether the spare page is shown (JKEY)
When using xml export, yafray will now render the alpha channel as well when 'RGBA' button in blender is enabled (Plugin does this automatically).
In plugin code, fixed smooth shading bug for non-mesh objects.
Relative paths for textures are now recognized (plugin & xml).
Fixed problem with duplicate objects (plugin & xml).
Really old bug, sun position is now correct (plugin & xml).
World background now can also be a regular image texture (jpeg & tga), but for now always assumes spheremapping, which is not the same as Blender either. In yafray the texture is assumed to be a full 360 (panorama type) map.
convertBlenderScene.c cleanup, the identity transform 'hack' is removed.
THIS AFFECTS ALL EXTERNAL RENDERERS (Aqsis and others) WHICH RELY ON THE RENDERDATA OUTPUT, VERTICES AND LAMPCOORDINATES/VECTORS NOW NEED TO BE TRANSFORMED BACK TO WORLD COORDINATES. See yafray plugin/export code.
Edges in Mesh
- adds automatic when you use creases. For other situations; call the
void make_edges(Mesh *me) in mesh.c. Of course, once in editmode the
edges are automatically recreated.
- in F9 buttons you can add/remove edges too
- both for Mesh and DisplistMesh, so it speeds up drawing quite some in
wireframe
- render for edges can't work... edges have no material nor tface nor col..
so here still the faces are rendered in wire
Creases in Subsurf
- based on the code by Chris McFarlen
- main changes is that now edges are used, saving quite some data in file
- use SHIFT+E in editmode to set edges-sharpness. values go from 0-1
- in F9 buttons you can set draw-crease mode. It draws now blended from
wire color to edge-select color (as provided in Theme)
Known issue: setting sharpness on 1 cube (subdiv 2) gives weird results
with some values... Chris, can you check?
Further; code cleanups, changing 0 in NULL when needed, no warnings, etc etc
for Armature. Note: only works for subsurfed Mesh now!
Change in drawobject.c: Halo option on subsurf Mesh now draws points.
but using the original vertices...
Displace mapping + Map-Input using Object wasn't working. This caused
by the inverse matrix of an Object potentially not being calculated when
displace was calculated.
Solved by moving imat calculus to the top of the main function.
Yafray note: the convention to hack out all transformations from
renderconverter could be implemented more elegant, by moving this to
the yafray section (and just matrix-transform back). Makes code less
unreadable, but also support displacement then (and might solve other
errors).
Switched order of routines for displacement and autosmooth, where the
autosmooth will be last now. This prevents displaced (loose) faces, and
might give attractive sharp edges in other cases too.
conversion. Old method tried to solve it per object, detecting a flipped
matrix. Since we have displacemapping and raytracing this is too inaccurate.
Also, flipping normals should alsways result i correct flipped vertex-
normals too.
Solution is to completely recalcuate the 'puno' (vertex normal) flags in
renderHelp.c now (set_normal_flags). The face normals themselves are not
flipped until that stage.
Second major improvement involves the calculation of correct splitted
triangles, when a quad is not flat. It now creates triangles based on the
vertex normals, which have actual information on surrounding geometry, thus
resulting in much smoother results.
Without this you get errors in ray-shadow, with light shining almost
parallel to a face. But again, displacement mapping improves with it too.
Third fix is that by removing normal flipping from displace code the result
is much better now.
'do_all_actions' run twice for all of the constraints to be updated
properly. (/me grumbles: I fixed this last week for the OpenGL
updating stuff in header_buttons.c ... do we really need to have so many
update_for_newframe()-style functions?)
I found it was an easy one to fix after all... the stars system is still
old and very cumbersome code, but for parts it now just works too, by
just disabling clipping in advance (as for panorama).
the non-flat quad detecting routine apparently didn't do anything
anymore! I've fixed it now with more comments, so people are warned
not to mesh with this... er... mess!
Apparently the reorganize of code in this c file, to merge the converter
routines for normal Mesh and subsurfed Mesh, cancelled out the fix I did
before to make sure Material option Wire correctly takes the OPTIM mode
into account.
Error was that it always rendered in OPTIM wire for subsurf, regardless
setting for subsurf.
(MVert,MFace,etc) off into DNA_meshdata_types.h, to isolate areas
of source that actually edit mesh *data* vs. areas that just edit
mesh object information.
of zr). This struct was never written to file and the new 'int based'
MFace can be used in it's place. Some removal of redundant code could
perhaps be done now (I didn't do any though, just "s/MFaceInt/MFace/").
In an attempt to optimize, displist wasn't recalced if 3D window subsurf
level was the same as render subsurf level, this kept wave effect
from being calculated in animations if leves were equal.
Fixes 1/2 of bug #1000 (Still doesn't update 3D Window)
* Blender static now links. By default this option is disabled on all
platforms. Simply set the option in config.opts to 'true'.
* Added the following flags to config.opts:
- HOST_CC. This is the C compiler for the host platform. This value is the
same as TARGET_CC when not cross compiling.
- HOST_CXX. This is the C++ compiler for the host platform. This value is
the same as TARGET_CXX when not cross compiling.
- TARGET_CC. This is the C compiler for the target platform.
- TARGET_CXX. This is the C++ compiler for the target platform.
- TARGET_AR. This is the linker command for linking libraries.
- PATH This is the standard search path
All SConscript files have been updated to reflect these changes. Now it's
possible to change only the root SConstruct file, and all compiler specific
variables are passed automatically to all SConscript files. Of course, this
does not apply to makesdna because there the host and target platform is
different from all other libraries.
To pass a variable that applies to all platforms, all we now have to do is
set the correct value in library_env
Note: as usual, to get the latest options in the config.opts file, first
remove your version.
* libraries are now generated in [BUILD_DIR]/lib
* passed the user_options to all libraries now.
This means I could remove a couple of Export/Import lines.
* Changed the order in source/blender/src/SConscript and
source/gameengine/SConscript.
All libraries are now sorted alphabetically. This has no impact on the build
process.
* Armatures that had constraint targets inside other armatures
weren't transform()-ing correctly
* Issues with lattice deformed objects that are parents of bones
when rendering an animation. Seems to be mostly OK now with the
exception of the first rendered frame -- weird bugs like this have
plagued blender for ages, which leads me to believe that
RE_rotateBlenderScene() is a piece of garbage that nobody understands
(especially me).
* made a few helper functions to clean up some repeated code related
to clearing constraint status and rebuilding displists.
Blender 'sphere' mode lights in yafray should now have more similar light levels
render shadow button in Blender must now be enabled to render shadows in yafray too
some other minor shadow related corrections
control how the intensity channel affects displacement. Nor
slider still controls how Nor channel affects displacement.
- Scaled Nor displacement to make Nor slider more usable.
- Removed Data scale from displacement routines. Made
sliders unusable for objects scaled in editmode. Displacement
now relative to unit sized object. Displace still tracks
with object scale, so scale out of editmode if you want a
large object with deep displacement.
This fixes bug in wrong flipping of normals during render in some cases
too. Most important, it also allows autosmooth and halos now with subsurf.
Particles do work, but still use the original geometry.
- I only coded 4 bytes of this, rest is from master zr!
properly, and uses the AutoTexSpace button to see if the size of the
data needs to be adjusted for.
- Scale now split to x/y/z components. Not sure if this is the most.
logical way to do it. Will have to reconsider later.
- removed rendermesh_uses_displist (no longer relevant)
- converted appropriate me->flag tests to using mesh_uses_displist
- made vert and face counting (for info header) use proper counts
- changed flip_subdivision to allow level==0 argument
- ps. thanks for subsurf orco fix ton
- when quads get split before render, the vertexcolors and texture face
(UV) info has to be corrected as well. This happens runtime during
render, no new data is created. The code was in previous versions, but
with raytrace and other new features it needed a rewrite
- this now also should work for the new smart split code from robert!
- cubemap relied on pointer to MFace, which is only available for Mesh
when directly converted to renderfaces.
It then checked the 'puno' flag where also bits were set to indicate
the optimal projection for a face (XY, XZ or YZ).
- I found out the renderface also has a puno flag, so the mface pointer
in a renderface is redundant. Is removed now
- added code in texture cubemap call, which checks on a projection flag
in 'puno'. If not set, it uses the orco's to calculate one.
- this means, that cubemap now also works for other objects than meshes,
provided they have an orco block while render.
- if no orco block available, it uses the 'global' projection to find which
of the cube sides map.
I couldnt find other errors with subsurf & orco though...
- reduced main subsurf interface to two functions to make DispListMesh
structures from an editmesh or a regular mesh. for the most part this
means that to implement a geometry modifier you only need to write
these two functions (not very plugable yet however).
- added displistmesh_from_mesh and displistmesh_from_editmesh functions
which allow simple support of subdivLevel(0) subsurfs, somewhat handy
for testing things (like why orco doesn't work for subsurf).
marginally suitable, like curves, because of relatively low renderface
count). Will have to thoroughly document pros and cons of each type.
Usefullness order (greatest to least):
CC Subsurf Meshes (Displacement likes the smooth normals)
Simple Subsurf Meshes
Manual subdivided meshes
MBalls
Surfaces (Normal errors/ hidden seams)
Curves (Large flat areas with few renderfaces to displace).