[SCons] Build with Solid as default when enabling the gameengine in the build process
[SCons] Build solid and qhull from the extern directory and link statically against them
That was about it.
There are a few things that needs double checking:
* Makefiles
* Projectfiles
* All the other systems than Linux and Windows on which the build (with scons) has been successfully tested.
- added mesh_set_smooth_flag, mesh_delete_material_index function
- isolated some globals
- got rid of reliance on meshdata in buttons_editing.c and material.c
(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.
* Created a MESH_MAX_VERTS macro in DNA_mesh_types.h
* fixed vert limit for converting displistmesh ==> mesh
* fixed vert limit when doing boolean operations
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/").
different objects shouldn't share flags this way (still sharing of
other mesh flags in renderer... ickity pickity, but I'm not fixing now)
- removed some unnecessary uses of DNA_mesh_types.h
* 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.
it by precalculating all needed Osa vectors when rendering glass, this
because it is unpredictable what is exactly going to be needed after.
- a hint that this should be done better is in the code... will mostly
improve sharpness and a bit rendertime though
(thanks bugmaster intrr!)
- G.f's G_DEBUG flag was being erased in blenkernel/intern/blender.c's
setup_app_data:
G.f= bfd->globalf
// added a line above it to fix this:
if (G.f & G_DEBUG) bfd->globalf |=G_DEBUG;
G.f= bfd->globalf;
BPython:
- debug info now only shown if Blender is started with '-d' option
- added ~/.blender/scripts to modules sys.path
- added two new functions to Blender.sys: basename and splitext
- added doc for Blender.sys, updated other docs
recalculate the O.dxno and O.dyno for each pixel. This causes scanline
errors (stripes) when in same scanline something else is called that
calculates O.dxno/dyno...
by the seed variable. Requested by S68.
Basically they move slightly when you change the seed. Might be
a good idea to split this up so there are two seed options in a
particle effect, however there are already quite a bit of them so I opted
for this.
Kent
-- removed struct Script (DNA_script_types.h) from makesdna to blender/include/BPI_script.h
(BPI meaning Blender Python-related external Include file).
Had agreed with Ton that makesdna was not the proper place for it.
-- fixed two small warnings in Ipo.c (variables might be used uninitialized)
-- fixed a bug reported on blender.org's python forum by Wim Van Hoydonck (aka tuinbels):
Blender would hang if a script failed. My fault, accidentally put a node=node->next type call outside the while loop check, so it never ended.
With makesdna/DNA_script_types.h removed and include/BPI_script.h added, msvc projectfiles will need to be updated. Sorry to do it now, but I promissed I'd fix this before next release.
- 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
- 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).
re-using old one. New one = 'exp'.
- at first I used the old 'exposure' value, and just mapped it to 0. this
causes a problem with upward compatibility, old blenders then render a
black picture. is too confusing!
- warning; exposure values saved with commit of last week will get lost.
- changed code to make use of actual textures, not the hackish
'externtex', which is only for tools
- added a 'displacement' vector in ShadeInput, and moved calculation of
displacement vector to texture.c itself. So it works with stencil, but
also for options as 'add', 'mult' and 'sub'.
- for RGB textures it uses the brightness value of color for displace
- for stucci, and plugin textures returning a normal, it uses that
- Also: wrote call in end of preparing renderfaces, to split non-flat
quad faces in triangles. gives a lot fewer errors in displace textures,
but also raytracing irregular subsurfs goes better now.
- texture mapping that works for displace: orco, sticky, global, obj, normal.
UV not yet. Reflection-displace? uhh! :)
yet (R.vn and R.vlr no longer exist, and were needed to get the image mapped
right). Works esp. well with Subsurfs. Sensitive to vertex normal issues
in Simple and Mesh modes.
-Also porting Simple Subdivide. Subdivides mesh at rendertime w/o changing
shape, for smooth displace and Radiosity.
-Removed an unused var from KnifeSubdivide.
Materials are exported the best we can do by now. It will look almost as in
blender except for the missing procedural textures and some minor issues.
You have to tweak normal modulation amount to get the desired result cause
is not the same in yafray.
We added a panel in render space to adjust some yafray settings (GI and so)
Also we export transparency and reflection using new raytracing settings,
but that will be changed and improved soon.
Remember that you have to set YFexport path in user defaults and yafray must
be on path (version 0.0.6)
We added the "yafray" button to activate all this stuff in the render window.
Panel and settings are only shown when checked.
So now when activated the code calls yafray export instead of the internal
renderer and finally the resulting image is loaded back into render window's
buffer. So animation is also possible and results can be saved using blender
usual scheme.
----------------------------
Another (major) armature speed up for bones with many constraints.
When tranform()-ing, figure out which bones need to be recalculated
beforehand and only update those bones.
- based at 1.0-exp(-color) trick in Yafray. But to guarantee backwards
compatibility, and some more control, Stefano Selleri hacked a useful
formula for it.
- We now have 2 values to set:
- "exp": the exponential correction value (0-1)
- "range": the light range that maps on color 1.0 (0-5)
- Using exp(x) (is e^x) we can much better prevent overflows from render,
which are currently hard-clipped in Blender. Setting a small 'exp' value
wil efficiently smooth out high energy and map that back to a color for
display.
- total formula:
newcol= linfac*(1.0-exp(col*logfac))
col, newcol are colors
linfac= 1.0 + 1.0/((2.0*wrld.exp +0.5)^10)
logfac= log( (linfac-1.0)/linfac )/wrld.range
wrld.exp and wrld.range are the button values
- default setting: exp=0.0 and range=1.0 give results extremely close to
previous rendering.
- graph: http://www.selleri.org/Blender/buffer/Image1.png for 'exp' setting
ranging from 0-1, and with 'range'=2
Thanks Stefano for the help!
- New lamp type added "Area". This uses the radiosity formula (Stoke) to
calculate the amount of energy which is received from a plane. Result
is very nice local light, which nicely spreads out.
- Area lamps have a 'gamma' option to control the light spread
- Area lamp builtin sizes: square, rect, cube & box. Only first 2 are
implemented. Set a type, and define area size
- Button area size won't affect the amount of energy. But scaling the lamp
in 3d window will do. This is to cover the case when you scale an entire
scene, the light then will remain identical
If you just want to change area lamp size, use buttons when you dont want
to make the scene too bright or too dark
- Since area lights realistically are sensitive for distance (quadratic), the
effect it has is quickly too much, or too less. For this the "Dist" value
in Lamp can be used. Set it at Dist=10 to have reasonable light on distance
10 Blender units (assumed you didnt scale lamp object).
- I tried square sized specularity, but this looked totally weird. Not
committed
- Plan is to extend area light with 3d dimensions, boxes and cubes.
- Note that area light is one-sided, towards negative Z. I need to design
a nice drawing method for it.
Area Shadow
- Since there are a lot of variables associated with soft shadow, they now
only are available for Area lights. Allowing spot & normal lamp to have
soft shadow is possible though, but will require a reorganisation of the
Lamp buttons. Is a point of research & feedback still.
- Apart from area size, you now can individually set amount of samples in
X and Y direction (for area lamp type 'Rect'). For box type area lamp,
this will become 3 dimensions
- Area shadows have four options:
"Clip circle" : only uses a circular shape of samples, gives smoother
results
"Dither" : use a 2x2 dither mask
"Jitter" : applys a pseudo-random offset to samples
"Umbra" : extra emphasis on area that's fully in shadow.
Raytrace speedup
- improved filling in faces in Octree. Large faces occupied too many nodes
- added a coherence check; rays fired sequentially that begin and end in
same octree nodes, and that don't intersect, are quickly rejected
- rendering shadow scenes benefits from this 20-40%. My statue test monkey
file now renders in 19 seconds (was 30).
Plus:
- adjusted specular max to 511, and made sure Blinn spec has again this
incredible small spec size
- for UI rounded theme: the color "button" displayed RGB color too dark
- fixed countall() function, to also include Subsurf totals
- removed setting the 'near' clipping for pressing dot-key numpad
- when you press the buttons-window icon for 'Shading Context' the context
automaticilly switches as with F5 hotkey
Please be warned that this is not a release... settings in files might not
work as it did, nor guaranteed to work when we do a release. :)
Based on feedback (thnx phase!) I found a big disadvantage of the 'real'
fresnel formula. It doesnt degrade to 0.0, causing 2-3 times too many
rays being fired compared to the previous one. So; a lot slower.
Now committed is a hybrid which allows (close to) real, and nice artistic
freedom, *and* it really goes to 0.0 and 1.0, assisting nicely in optimal
render times.
A real doc how it works (with pics) will be made before real release.
- Fixed bug in raytrace: the first renderpass didn't use fresnel for mirror.
- Fixed bug in previewrender, now it closer matches how fresnel renders
Main target was to make the inner rendering loop using no globals anymore.
This is essential for proper usage while raytracing, it caused a lot of
hacks in the raycode as well, which even didn't work correctly for all
situations (textures especially).
Done this by creating a new local struct RenderInput, which replaces usage
of the global struct Render R. The latter now only is used to denote
image size, viewmatrix, and the like.
Making the inner render loops using no globals caused 1000s of vars to
be changed... but the result definitely is much nicer code, which enables
making 'real' shaders in a next stage.
It also enabled me to remove the hacks from ray.c
Then i went to the task of removing redundant code. Especially the calculus
of texture coords took place (identical) in three locations.
Most obvious is the change in the unified render part, which is much less
code now; it uses the same rendering routines as normal render now.
(Note; not for halos yet!)
I also removed 6 files called 'shadowbuffer' something. This was experimen-
tal stuff from NaN days. And again saved a lot of double used code.
Finally I went over the blenkernel and blender/src calls to render stuff.
Here the same local data is used now, resulting in less dependency.
I also moved render-texture to the render module, this was still in Kernel.
(new file: texture.c)
So! After this commit I will check on the autofiles, to try to fix that.
MSVC people have to do it themselves.
This commit will need quite some testing help, but I'm around!
- added 'Mapping to" channel "RayMirror", to control mirror with texture
- fixed bug in using mirror-rgb as texture channel... this is cumbersome
because it is abused by Envmap in a not nice way. Fixing the abuse will
cause compatibility errors, which can be fixed when we up release # to
2.32.
- added "Translucency", which is nothing else than allowing another
shading pass for the backside of a face (with normal inverted). This
is interesting for all kinds of situations where you want light from
behind to 'shine through'. Also works to reduce dark areas in
unlighted parts of rendering transparent faces. Light from behind on
transparent red window should make it glowing some, right?!
- added texture channel for this as well
- Reorganized Material Panels to reveil some consistancy where buttons
can be found. Not perfect yet, but at least all options for Shaders and
options for Mirror & Transparency now are together.
This gives some space in Shader Panel for nice expansion.
- implemented tracing of transparency for shadows. This is a material
option, in the new RayTrace panel.
it only traces color and alpha, not shading. So the results of some
transparant colored unlit faces can look odd. I will look onto that.
- changed fresnel formula (got hint from eeshlo!). this simplifies the UI,
now only one button needed. The fresnel value "should" be identical as
the refraction index, but that is booooring! So i added a special fresnel
refraction slider for both mirroring and transparency. By setting all 3
sliders equal, you get 'realism'.
- fresnel for transparancy works for Ztra rendering too. Same for transpa-
rent shadow. But then you need to set 'ray' on in F10 menu.
- uploaded new monkey_glass blend in download.blender.org/demo/test/
Next stage: killing the globals from render, and implement "translucency"
which is effectively allowing faces being lit from behind, as paper or
cloth.
Changelog:
- enable refraction with button "Ray Transp" in Material buttons.
- set "Angular Index" value for amount of refraction.
- use the "Alpha" value to define transparency.
- remember to set a higher "Depth" too... glass can bounce quite some
more than expected.
- for correct refraction, 3D models MUST have normals pointing in the
right direction (consistently pointing outside).
- refraction 'sees' the thickness of glass based on what you model. So
make for realistic glass both sides of a surface.
- I needed to do some rewriting for correct mirroring/refraction,
especially to prevent specularity being blended away.
Solved this with localizing shading results in the rendercore.c.
Now specularity correctly is added, and reduces the 'mirror' value.
- Localizing more parts of the render code is being planned. The old
render heavily relies on struct Render and struct Osa to store globals.
For scanline render no problem, but recursive raytracing dislikes that.
- done test with gamma-corrected summation of colors during tracing, is
commented out still. But this will give more balanced reflections. Now
dark reflections that are reflected in a bright surface seem incorrect.
- Introduced 'Fresnel' effect for Mirror and Transparency. This
influences the amount of mirror/transparency based at viewing angle.
Next to a new Fresnel slider, also a 'falloff' button has been added to
define the way it spreads.
- Fresnel also works for Ztransp rendering
- created new Panel for Raytrace options
I have to evaluate still where it all should be logically located.
- material preview shows fake reflection and fake refraction as well.
This commit moves the 2 undefined references to BPY_interface.c and
changes things a little, hopefully fixing the problem. I had to add a new dir,
source/blender/include/ to auto*'s Makefile.am in source/blender/python/.
Thanks Chris for the report, and Jiri, for adding a missing declaration.
when an object has an Ipo, the timing for each duplicated Object is
corrected for the lifetime of particle. Looks great!
Remark: this won't work for object location (is at particle) or for
particle type 'Vect' which gives a rotation already. But now you can
scale an object small, and let it grow over time.