Updated the Make environment to point to the correct location. The include
paths were still pointing to source/blender/bpython/include while it should be
source/blender/python.
I did not encounter the build problems because I'm always working with the
autoconf build environment.
even for each redraw! Now its all smooth & fast again.
introduced new kernel API call: int is_basis_mball(ob), this provides a
quick check of the object is the actual basis for the displaylist and
polygonization.
colors. This because of the pretty weird (ab)use of load & make editmesh...
For each added undo step, the load_editmesh was fed with an empty mesh
to assign data to, without knowledge of what was in the original mesh.
That way UV and color data got lost.
Solved it in 2 steps:
1. removing the ->tface pointer from EditVlak, and make TFace a builtin
struct inside EditVlak. This didnt cost much extra mem, since it already
stored UV and color. This enabled some pretty cleanup in editmesh.c as
well, storing tface pointers was cumbersome.
2. for each undo step, it then generates always a tface and mcol block to
link to the undo Mesh.
Even when it wasn't in the actual Mesh, at exit editmode the original
Mesh is used as reference anyway, and undo-meshes are freed correctly.
The enormous commit is because I had to change the BLI_editVert.h file, and
found it was included in about every file unnecessary. I removed it there.
ALso found out that subsurf has code ready (unfinished) to make UV coords for
the displaylist in EditMode as well, nice to know for later...
This is a temporary fix, but a complete fix will require a rewrite of of some part of the where_is_object function, and that would take too much time before 2.31.
from NaN period, someone just commented out a piece of code... this to
prevent the curve itself being converted (as edges) next to the 3d filled
faces. but for 3D curves there are no filled faces.
reason: mixbuffer size was not correctly initialized in .blend. Doing this
for struct UserData has some extra quirks, so better not do it with
checking for version (if version<2.27 etc) but always (if U.mix==0 etc).
I mail this to committers list as well.
standard starts with 0.5 sec. Turn the threshold value up to effectively
disable it when you dislike it. But give it a try!
- added 'Home' after splitting window for buttonswindow
- subsurf also smoothed loose vertices, in a strange way that never showed
up until 'draw subsurf handles' was implemented.
fixed subsurf code not to include loose vertices anymore
- saving a file in editmode caused a new displaylist to made... fixed an
old bad hack from NaN period.
(displists are still lousy code...)
- fixed drawing vertices in frontbuffer on select.
the delay you see is because blender waits for 'rightmouse transform'.
Aim was to find a simple & easy system, script alike, to add and configure
a toolbox system, so that others can experiment, but also of course Python.
Summary:
- spacebar calls it up. SHIFT+A still does old toolbox
- hold left or rightmouse for 0.4 second, and it pops up as well
this is experimental! Can be tweaked with Userdef var "ThresA"
- it is a little bit complete for Object mode only. Needs still work
at information desing/structure level
- the code works like an engine, interpreting structs like this:
static TBitem addmenu_curve[]= {
{ 0, "Bezier Curve", 0, NULL},
{ 0, "Bezier Circle", 1, NULL},
{ 0, "NURBS Curve", 2, NULL},
{ 0, "NURBS Circle", 3, NULL},
{ 0, "Path", 4, NULL},
{ -1, "", 0, do_info_add_curvemenu}};
- first value is ICON code,
- then name
- return value
- pointer to optional child
last row has -1 to indicate its the last...
plus a callback to event function.
I also built an old toolbox style callback for this:
static TBitem tb_object_select[]= {
{ 0, "Border Select|B", 'b', NULL},
{ 0, "(De)select All|A", 'a', NULL},
{ 0, "Linked...|Shift L", 'L', NULL},
{ 0, "Grouped...|Shift G", 'G', NULL},
{ -1, "", 0, tb_do_hotkey}};
here the return values are put back as hotkeys in mainqueue.
A mainloop can do all context switching, and build menus on the fly.
Meaning, it also allows other designs such as radials...
This is done by disabling the object position refresh call when calculating these constraints. From the tests I did, this doesn't cause any problem at all.
The main point of this is to create pistons and the like.
For coders:
the detect_constraint_loop function now takes an additional parameter that determines the constraint type of the object it's looping from.
instead of the old 'septex' which only showed the active one
- rendering: the 'stencil' option now works to stencil out normals as well
(special requests from our manual master, s68)
- transparent faces in editmode don't write in zbuffer anymore (prevents
drawing errors) but still read (so behind the subsurf faces for example)
- improved drawing 'handles' for subsurf editing
- going in editmode to Solid view, will draw extra wire always, including
transparent faces when set
- works in all combos... http://www.blender.org/docs/ton/subsurf.html
- fixed error; padplus/padminus didnt work in buttonswindow anymore
- improved buttonswin: when dragging window edge, the buttons dont
rescale, but stay same size
- in zbuffer mode, vertices will be blended 50% in... and when you increase
vertex size larger than 2 pixels, it will draw them smaller
- removed all 'wire extra' calls (there were dozens!) and replaced it with
simple call where it belongs.
This drawing mode is becoming nice & stable... maybe something to make
default on for new objects? Makes selecting quite easier...
- Subsurf: in editmode, with new 'Optimal' option set, the mesh itself
will not draw, but instead it draws 'handles' to the vertices. Looks
extremely clean!
- matched drawing of default grid-floor (persp) to ortho grid
- killed drawing vertices outside of main drawing loop, apart from the
routine that uses mouse-selecting. (tekenvertices_ext()). It was an old
optimize routine which became quite useless.
Axis options for TrackTo
LockTrack
FollowPath
Auto creation of TrackTo constraint from Ctrl-T (old track still an option)
Auto creation of FollowPath when parenting to path (Normal parent still an option)
Backward compatibility stuff to convert the per object axis settings to per constraint when a Track constraint is present.
Function to convert old track to constraint (commented out)
Revamped the constraints interface with Matt's work from tuhopuu and the stuff we were discussing earlier.
--------------------
For coders:
unique_constraint_name and *new_constraint_data moved to the kernel (constraint.c)
new Projf function in arithb gives the projection of a vector on another vector
add_new_constraint now takes a constraint type (int) parameter
add_constraint_to_object(bConstraint *con, Object *ob) to link a constraint to an object
add_constraint_to_client(bConstraint *con) to link constraint to current client (object or bone)
add_influence_key_to_constraint (bConstraint *con) to (eventually) add a keyframe to the influence IPO of a constraint
can be found under the 'SubSurf' button.
Optimal drawing only shows the subdivided original edges. Quite nice!
And; it's a load faster!
- to evaluate: do we want this in editmode too?
- menu auto open now is user preset, including 2 thresholds you can set
- hilites of pulldown menus were not cleared, fixed
- changed F4 key to logic. F5 will show lamp buttons, when lamp active
- in 'shader context' buttons, clicking camera will show world
- Converted lamp buttons and world buttons, they're pretty!
- menu auto open now is user preset, including 2 thresholds you can set
- hilites of pulldown menus were not cleared, fixed
- changed F4 key to logic. F5 will show lamp buttons, when lamp active
- in 'shader context' buttons, clicking camera will show world
EEEK! It doesn't look well yet! Hopefully it inspires others to come
with great solutions.
- the material buttons have 6 panels, three of them merged
- some drawing errors in preview render
- made settings for new Material that makes sense for Flares
First, check on the new files, which are listed below.
The new butspace.h is a local include, only to be used for the buttons
drawn in the buttonswindow.
- editbuts, animbuts, gamebuts, displaybuts, paintbuts, work now
- i quite completely reorganized it, it's now nicely telling you what
context it is in
- sorting error in panel align fixed (tabs were flipping)
- align works correctly automatic when you click around in Blender
- editsca.c renamed to buttons_logic.h
- button names are truncated from the right for allmost all buttons
(except text buttons and number buttons)
- while dragging panels, you cannot move them outside window anymore
And of course fixed loads of little bugs I encountered while testing
it all. This is a version I really need good test & feedback for.
Next step: restoring material/lamp/texture/world
Multiple environments now can be rendered in one pass. Previously the other objects with environment maps didn't show up in a reflection. Like this:
http://www.blender.org/bf/dep.jpg
By default, Blender renders now this result:
http://www.blender.org/bf/dep0.jpg
For a further 'recursive ray-tracing effect' you can give each EnvMap texture a higher "Depth" value. Here is a result with depth set at '2':
http://www.blender.org/bf/dep2.jpg
Related new options:
- in (F10) DisplayButtons, environment map rendering can be turned on and off.
- in EnvMap texture buttons you can free all environment maps
- Environment map sizes are also reduced with the (F10) 'percentage' option.
Tech note: with this commit the VlakRen struct has on *ob pointer!
- added new MetaElem types (plane, elipsoid and cube) old TubeX, TubeY and TubeZ will not be supported
- new buttons in Edit button window (dx, dy, dz)
- added new items into the headers menu and toolbox menu
more details at: http://blender.webpark.cz
- the link order for Blender has changed, the libradiosity.a has to be moved after the librender.a (obviously for a new dependency!). Check blender/source/Makefile
- there's a new file: blender/source/radiosity/intern/source/radrender.c
Here's what the new code does:
Using the core routines of the Radiosity tool, each renderface with 'emit material' and each renderface with 'radio material flag' set will be used to itterate to a global illumination solution. Per face with high energy (emit) little images are rendered (hemicubes) which makes up lookup tables to 'shoot' its energy to other faces.
In the end this energy - color - then is directly added to the pixel colors while rendering, Gouraud shaded.
Since it's done with renderfaces, it works for all primitives in Blender.
What is doesn't do yet:
- take into account textured color of faces. Currently it uses the material RGB color for filtering distributed energy.
- do some smart pre-subdividing. I don't know yet if this is useful... Right now it means that you'll have to balance the models yourself, to deliver small faces where you want a high accuracy for shadowing.
- unified render (is at my todo list)
User notes:
- per Material you want to have included in radiosity render: set the 'radio' flag. For newly added Materials it is ON by default now.
- the Ambient slider in Material controls the amount of radiosity color.
- for enabling radiosity rendering, set the F10 "Radio" button.
- the Radiosity buttons now only show the relevant radiosity rendering options. Pressing "collect meshes" will show all buttons again.
- for meshes, the faces who use Radio material always call the 'autosmooth' routine, this to make sure sharp angles (like corners in a room) do not have shared vertices. For some smooth models (like the raptor example) you might increase the standard smoothing angle from 30 to 45 degree.
Technical notes:
- I had to expand the renderface and rendervertices for it... shame on me! Faces have one pointer extra, render vertices four floats...
- The size of the hemicubes is now based at the boundbox of the entire scene (0.002 of it). This should be more reliable... to be done
- I fixed a bug in radiosity render, where sometimes backfaces where lit
In general:
I'd like everyone to play a bit with this system. It's not easy to get good results with it. A simple "hit and go" isn't there... maybe some good suggestions?
outside of the old boundbox of the Object.
it's a small fix, the code is still commented in... need further
work to find out why sometimes balls disappear
- the plane has a material
- material has texture
- scene has a world
- default set 'draw faces' and 'draw edges'
that last one for the noobies, to prevent them complaining!
- added a note in interface.c about the new api doc
- forgot to commit blender.c, for setting the G.f from the file
(this will save faceselect and vertexpaint mode too)
do a make clean in source/blender/ to be sure!
- Included the new shaders from Cessen... well, only the shader calls
themselves. To make sure the shaders work I nicely integrated it
- MaterialButtons: layout changed a bit, but still resembles the old
layout. The 'shader' options now are located together.
- Shaders are separated in 'diffuse' and 'specular'. You can combine them
freely.
- diffuse Lambert: old shader
diffuse Oren Nayar: new shader, gives sandy/silky/skinny material well
diffuse Toon: for cartoon render
- specular Phong: new spec, traditional 70ies spec
specular CookTorr: a reduced version of cook torrance shading, does
off specular peak well
specular Blinn: new spec, same features as CookTorr, but with extra
'refraction' setting
specular Toon: new spec for cartoon render
- default blender starts with settings that render compatible!
- works in shaded view and preview-render
- works in unified render
Further little changes:
- removed paranoia compile warnings from render/loader/blenlib
- and the warnings at files I worked at were removed.
it needs tests... just a simple cube with sides texmapped. and then
import to whatever vrml viewer or importer you have around.
the trick lies in adding textureCoordIndex nodes to file.
This enables Blender to;
- have scenes with different codec settings. (same as avicodec)
- render directly without dialog.
- batch/background render to Quicktime movies.
Only tested on windows. ;)