- AO energy slider to control amount
- option "Use sky color" for colored AO. The horizon color will define
bottom diffuse color, the zenith works on top
- option "Use sky texture" will do a full sky render to define AO color
Please note that AO energy and color only is found when a ray does not
intersect. So for interior scenes make sure 'Dist' value is sufficient
low.
New also is:
- World "Map input" allows "Ang Map" (Angular mapping) which can be used
for 360 degree spherical maps, aka as Light Probes. Check samples here:
http://www.debevec.org/Probes/
Note that Blender doesn't support HDRI images yet, but option "Use sky tex"
already gives intersting results with such images
- World sky rendering with Image Textures now correctly filters and uses
antialiasing. Also noticable for raytrace mirror reflections
- World preview render for sky type "Real" now gives correct view as
defined by current used camera.
I tried to speed up AO tracing with coherence systems, none of it really
worked yet... time to tackle octree itself i guess!
Credits go to blendix! Well done!
Reported were errors in using procedural textures on "Map input" UV type.
It was due to un-initialized uv[2] members, which were actually still
used by texture.c for some coord flip magic.
When using MotionBlur, the rendered coordinates were not correctly
adjusted, causing visual artifacts using the new AO, but it was also
visible for normal ray-shadow, which didn't become anti-aliased in
Mblur render.
Solved it with 2 globals now, to pass on blur offset to renderloop.
Leave it that way... the entire method used to jitter/AA/blur stuff
needs revision.
- Ambient Occlusion is a more sophisticated ambient trick, which takes
nearby faces into account by firing a hemisphere of shadow-rays
around. AKA 'dirt shader'.
- Eeshlo made it a Lamp type, which doesn't fit well. I've moved the
settings to the World menu, and let the Material->ambient value control
the amount it contributes
- currently, the AO value is added/subtracted/mixed with the 'diffuse'
factor while shading, before it is multiplied with Material color
Buttons are in new Panel 'Amb Occ" in F8 menu. Note:
- "Dist:" by shortening the length of rays you get subtler effects and it
renders faster too
- "DistF:" the attennuation factor gives control over how the 'shadow'
spreads out.
Further it's just raytracing, so tends to be slooooow.... :)
Here same tricks as for other raytraced scenes apply, especially try to
keep the environment as small as possible (exclude faces from Octree by
giving them no Material Traceable).
I still have to think over a couple of aspects, will await feedback on it:
- AO color? Now it just adds 'white'
- other sampling patterns? I tried dithering, which was so-so
- method of controlling final 'samples' in F10? Might be useful for other
oversampling too (area light) to have it reacting to a percentage or so..
Basically this provides three new things:
1. Choice of a list of noise-base functions, which can be used by the
current Clouds, Marble, Wood textures as well.
2. Three new texture types: Musgrave, Voronoi and DistortedNoise
3. Python access to noise functions (not for render!)
All of this together makes Blender's builtin procedural textures a LOT
more powerful. Here again, a full webpage should be made to show off all
possibilities, and explain some of the more scientific names for settings.
A good read on Musgrave textures can be found here:
http://www.ypoart.com/Downloads/Musgrave.htm
About Voronoi:
http://www.ypoart.com/Downloads/Worley.htm
I can't find official DistortedNoise docs easily... maybe its something
Eeshlo created himself.
I've spent some time to change the patch Eeshlo provided. Worth noting:
- created main texture "Musgrave" with 5 sub choices (instead of 5 new
main textures)
- added for all new textures the option to scale (zoom in out)
- added patch in do_versions to initialize variables
I hope the Python team will check on the Noise.c API. And include in docs!
reason is that raytrace code doesnt like shadow on backfacing faces
at all. the hemi light is omni-directional, and would need a shadow
calculation to mimic this as well. the new 'Ambient Occlusion' patch
will make that possible.
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
* 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.
render solid now (no alpha).
- This gives nicer previews, but also makes envmaps look better, since
environment maps are rendered without raytracing
- I decided not to raytrace envmaps mainly because of speed... if you use
environment maps you want something quick... otherwise just use ray_mir
material here!
alpha>1.0, the 'threshold' calculation in vanillaRenderPipe.c then works
wrong... not sure if this should be fixed there.
- for now, the spothalo render function itself clips.
- again; thanks to horrible intrr test scene! :P
some tests where moved around, causing specularity being calculared when
light actually shines behind a face.
Thanks inttr for the (horrible!) test scene that showed it. :)
this was an error as reported more, with horizontal lines in raytraced
renderings. It appeared to be an Osa struct being not reset to zero
for normals... only happens when using bumpmapping.
- Lamp only shadow (use 'energy' to control amount that gets subtracted)
- Material only shadow (remember, is an alpha trick)
- demo files for this have been included in testing suite, will be
upgraded soon.
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.
(1 lamp, shadow). The 'coherence' check gets reset now for each new
pixel rendered, which remains efficient for oversampling.
- small cleanups in code, prototype added, less globals.
it is related to the fix for 2.31, wich disabled hackish feature of
inserting the previous render outside border. i forgot the unified has
this code entirely duplicated, something to get rid of one day...
rendered itself. this happened when transparent shadow ray hit a face
with same material as where ray started.
is this understandable? i guess not! :P
the actual fix is just a few lines, to store material locally before
going to trace transp shadow.
currently only for preview render and displaylist. It then uses the
provided texture coordinate itself...
Solution is not perfect... disadvantage of not having globals! then
you have to fix all mess! :)
Marble, wood, clouds. Instead of the retarded (but faster :) old method
it now derives the normal based on displacement of a 'nabla' vector;
sampling the texture additionally with three little offsets in x, y and z.
Code provided by Eeshlo, and gratefully accepted!
- 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...
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! :)
code. Now all the cpp code is in intern under yafray and the api include
file is just plain C
Also changed old include in initrender.c and updated Makefiles.am and configure.ac
so the new dirs are taken into account.
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.
You'll need SCons (www.scons.org) to build.
Platforms currently working:
* Linux (me)
- options for quicktime, openal and international disabled
- uses the system libs and include files for building - no option to build
with the precompiled libraries yet.
* Windows (jesterKing)
- builds with quicktime (optional)
- builds with openal (optional)
- builds with international support (optional)
- Use the DOS box to build
- builds with precompiled libraries
* Irix (Hos)
- Uses default Irix compiler
- Not all optimization levels correct yet
- options for quicktime, openal and international disabled
- builds with precompiled libraries
* Cygwin (me)
- has a problem in the linking stage
- uses free build tools (gcc)
- options for quicktime, openal and international disabled
- uses the system libs and include files for building - no option to build
with the precompiled libraries yet.
* MacOS (sgefant)
- builds with quicktime (optional)
- options for openal and international disabled
- builds a nice bundle
- builds with precompiled libraries
Thanks to IanWill for a bugfix in the Linux build.
Note: This is a work in progress. A lot still has to be done - for example the
optional parts are only to be enabled by directly setting 'true' or
'false' in the SConstruct file. This needs to be moved to a user config
file. Also, the .o/.obj files are stored in the source tree. This needs
to be fixed as well.
The game engine is not yet built.
already gave noise with area size of 0.1.
Limited buttons to minimum value of 0.01 for area light. For people
who want smaller they can scale it down in 3d, effectively reducing
the energy then as well.
- 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!