QDUNE aka RenderMan in Blender!!!!

Well, I could be wrong, but personally I think it really is more because of the ‘programming’ part. Somehow people often seem to think that they have to program shaders themselves whenever renderman shaders are mentioned.
And programming is really very scary to most artists you know :stuck_out_tongue: I feel the same way whenever I think of modeling… :wink:

If the shaders are used and refined enough, they could easily be optimized and put directly into the renderer.

I would think a good optimizing compiler and VM would be ideal, the shader could be edited ‘live’ right inside blender for anyone who would want to. Compiled code would then take very little space as well, and be portable across different systems.
Actual compiled C-code is probably only needed in very few cases.

RSL has a few flaws that such a system could overcome like not being able to execute a piece of shader code only once per frame.

Being able to easily make changes to the language is part of the reason I did the compiler in python btw. At first I want it to be RSL compatible, but then I would make my own adaptations (but still keep it compatible of course). For instance, making things like the uniform/varying thing easier, let the compiler figure it out, instead of leaving it to the programmer. Same thing for transform(), etc.
Also translation to other shading languages would be nice, like GLSL and stuff like that. But all that probably is still very far away yet…

Anyway, I updated the quietdune page on my site a bit with some images of the example files included.
Most probably are quite familiar to users of the old bmrt renderer.

Thanks eehlso for all the work on this. I look forward to digging deeper and using it in the future.

i can see how the shader could be done either with nodes, or you could like link a file trough a special ‘insert’ node. :slight_smile: this way there would be a way for each, aka. to each their own.

sorry to ask, but was did there some build of this pop up somewhere? didn’t find any

The sourcecode of quietdune is now in main the Blender svn branch, and the Peach team (read Brecht :slight_smile: is now working on the code.

Now it’s confirmed that Brecht is working on the code for the micropolygons and other QDune stuff, with Bretcht behind it, it’ll probably get done and in this case it may be used in the Peach movie.:smiley:

No, there is no build. The sourcecode currently in Blender (blender/extern/qdune directory) is a standalone program, if you want to build it then you will have to make changes to the SConstruct script at least, or use some other preferred make system.

edit: probably shouldn’t do that yet :o

Hi folks
For all interested i posted an build with qdune at GRAFICALL.
http://graphicall.org/builds/builds/showbuild.php?action=show&id=521

Although it is WIP, it is rather interesting.
Have fun.

Greetz…Jens

I need PPC build.
Can you send me the modifications needed to make it build? so I can adjust it, if needed, to make it compile on PPC.

@daredemo
Hi. Sorry, iám not exactly sure how to tweak the PPC-build. ( Don´t use one anymore )
Normally the darwin-config.py is adapted to PPC out of the box.
If you had SVN-acces to the qdune-branch, you have the Blender-folder and the lib´s.
So all dependancies for OSXppc should be satisfied. Whats your problem?

I only changed the Libpath to darwin-intel for me and set some flags to false/true.
Heres my py, chaged to PPC in the first line. Python 2.5 is neccessary for this.
I don´t use user-config.py but configure the darwin-config.py for my needs.
Look:

LCGDIR = ‘#…/lib/darwin-6.1-powerpc’
LIBDIR = ‘${LCGDIR}’

enable ffmpeg support

WITH_BF_FFMPEG = ‘false’ # -DWITH_FFMPEG
BF_FFMPEG = LIBDIR +‘/ffmpeg’
BF_FFMPEG_INC = ‘${BF_FFMPEG}/include’
BF_FFMPEG_LIBPATH=‘${BF_FFMPEG}/lib’
BF_FFMPEG_LIB = ‘avformat.a avcodec.a avutil.a’

WITH_BF_VERSE = ‘false’
BF_VERSE = “#extern/verse/dist”
BF_VERSE_LIBPATH = “${BF_BUILDDIR}/extern/verse/dist”
BF_VERSE_INCLUDE = BF_VERSE
BF_VERSE_LIBS = “libverse”

python.org libs install in /library

BF_PYTHON_VERSION = ‘2.5’
if BF_PYTHON_VERSION==‘2.5’:
BF_PYTHON = ‘/Library/Frameworks/Python.framework/Versions/’
else:
BF_PYTHON = ‘/Library/Frameworks/Python.framework/Versions/’

BF_PYTHON_INC = ‘${BF_PYTHON}${BF_PYTHON_VERSION}/include/python${BF_PYTHON_VERSION}’
BF_PYTHON_BINARY = ‘${BF_PYTHON}${BF_PYTHON_VERSION}/bin/python${BF_PYTHON_VERSION}’
BF_PYTHON_LIB = ‘’
BF_PYTHON_LIBPATH = ‘${BF_PYTHON}${BF_PYTHON_VERSION}/lib/python${BF_PYTHON_VERSION}/config’
BF_PYTHON_LINKFLAGS = ‘-u __dummy -u _PyMac_Error -framework System -framework Python’

WITH_BF_OPENAL = ‘false’
#different lib must be used following version of gcc

for gcc 3.3

#BF_OPENAL = LIBDIR + ‘/openal’

for gcc 3.4

BF_OPENAL = ‘#…/lib/darwin-8.0.0-powerpc/openal’

BF_OPENAL_INC = ‘${BF_OPENAL}/include’
BF_OPENAL_LIB = ‘openal’
BF_OPENAL_LIBPATH = ‘${BF_OPENAL}/lib’

WITH_BF_SDL = ‘true’
BF_SDL = LIBDIR + ‘/sdl’ #$(shell sdl-config --prefix)
BF_SDL_INC = ‘${BF_SDL}/include’ #$(shell $(BF_SDL)/bin/sdl-config --cflags)
BF_SDL_LIB = ‘SDL’ #BF_SDL #$(shell $(BF_SDL)/bin/sdl-config --libs) -lSDL_mixer
BF_SDL_LIBPATH = ‘${BF_SDL}/lib’

WITH_BF_FMOD = ‘false’
BF_FMOD = LIBDIR + ‘/fmod’

WITH_BF_OPENEXR = ‘true’
BF_OPENEXR = ‘${LCGDIR}/openexr’
BF_OPENEXR_INC = ‘${BF_OPENEXR}/include ${BF_OPENEXR}/include/OpenEXR’
BF_OPENEXR_LIB = ’ Iex Half IlmImf Imath IlmThread’
BF_OPENEXR_LIBPATH = ‘${BF_OPENEXR}/lib’

WITH_BF_DDS = ‘true’

WITH_BF_JPEG = ‘true’
BF_JPEG = LIBDIR + ‘/jpeg’
BF_JPEG_INC = ‘${BF_JPEG}/include’
BF_JPEG_LIB = ‘jpeg’
BF_JPEG_LIBPATH = ‘${BF_JPEG}/lib’

WITH_BF_PNG = ‘true’
BF_PNG = LIBDIR + ‘/png’
BF_PNG_INC = ‘${BF_PNG}/include’
BF_PNG_LIB = ‘png’
BF_PNG_LIBPATH = ‘${BF_PNG}/lib’

BF_TIFF = LIBDIR + ‘/tiff’
BF_TIFF_INC = ‘${BF_TIFF}/include’

WITH_BF_ZLIB = ‘true’
BF_ZLIB = ‘/usr’
BF_ZLIB_INC = ‘${BF_ZLIB}/include’
BF_ZLIB_LIB = ‘z’

WITH_BF_INTERNATIONAL = ‘true’

BF_GETTEXT = LIBDIR + ‘/gettext’
BF_GETTEXT_INC = ‘${BF_GETTEXT}/include’
BF_GETTEXT_LIB = ‘intl’
BF_GETTEXT_LIBPATH = ‘${BF_GETTEXT}/lib’

WITH_BF_FTGL = ‘true’
BF_FTGL = ‘#extern/bFTGL’
BF_FTGL_INC = ‘${BF_FTGL}/include’
BF_FTGL_LIB = ‘extern_ftgl’

WITH_BF_GAMEENGINE=‘true’
WITH_BF_PLAYER=‘false’

WITH_BF_ODE = ‘false’
BF_ODE = LIBDIR + ‘/ode’
BF_ODE_INC = ‘${BF_ODE}/include’
BF_ODE_LIB = ‘${BF_ODE}/lib/libode.a’

WITH_BF_BULLET = ‘true’
BF_BULLET = ‘#extern/bullet2/src’
BF_BULLET_INC = ‘${BF_BULLET}’
BF_BULLET_LIB = ‘extern_bullet’

BF_SOLID = ‘#extern/solid’
BF_SOLID_INC = ‘${BF_SOLID}’
BF_SOLID_LIB = ‘extern_solid’

WITH_BF_YAFRAY = ‘true’

#WITH_BF_NSPR = ‘true’
#BF_NSPR = $(LIBDIR)/nspr
#BF_NSPR_INC = -I$(BF_NSPR)/include -I$(BF_NSPR)/include/nspr
#BF_NSPR_LIB =

Uncomment the following line to use Mozilla inplace of netscape

#CPPFLAGS += -DMOZ_NOT_NET

Location of MOZILLA/Netscape header files…

#BF_MOZILLA = $(LIBDIR)/mozilla
#BF_MOZILLA_INC = -I$(BF_MOZILLA)/include/mozilla/nspr -I$(BF_MOZILLA)/include/mozilla -I$(BF_MOZILLA)/include/mozilla/xpcom -I$(BF_MOZILLA)/include/mozilla/idl
#BF_MOZILLA_LIB =

Will fall back to look in BF_MOZILLA_INC/nspr and BF_MOZILLA_LIB

if this is not set.

Be paranoid regarding library creation (do not update archives)

#BF_PARANOID = ‘true’

enable freetype2 support for text objects

BF_FREETYPE = LIBDIR + ‘/freetype’
BF_FREETYPE_INC = ‘${BF_FREETYPE}/include ${BF_FREETYPE}/include/freetype2’
BF_FREETYPE_LIB = ‘freetype’
BF_FREETYPE_LIBPATH = ‘${BF_FREETYPE}/lib’

WITH_BF_QUICKTIME = ‘true’ # -DWITH_QUICKTIME

WITH_BF_ICONV = ‘true’
BF_ICONV = LIBDIR + “/iconv”
BF_ICONV_INC = ‘${BF_ICONV}/include’
BF_ICONV_LIB = ‘iconv’
BF_ICONV_LIBPATH = ‘${BF_ICONV}/lib’

Mesa Libs should go here if your using them as well…

WITH_BF_STATICOPENGL = ‘true’
BF_OPENGL_LIB = ‘GL GLU’
BF_OPENGL_LIBPATH = ‘/System/Library/Frameworks/OpenGL.framework/Libraries’
BF_OPENGL_LINKFLAGS = ‘-framework OpenGL’

##CC = gcc
##CCC = g++
##ifeq ($CPU),alpha)

CFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing -mieee

CFLAGS = [‘-pipe’,‘-fPIC’,‘-funsigned-char’,‘-fno-strict-aliasing’]

CPPFLAGS = [‘-fpascal-strings’]
CCFLAGS = [‘-pipe’,‘-fPIC’,‘-funsigned-char’,‘-fno-strict-aliasing’, ‘-fpascal-strings’]
CXXFLAGS = [‘-pipe’,‘-fPIC’,‘-funsigned-char’,‘-fno-strict-aliasing’, ‘-fpascal-strings’]
PLATFORM_LINKFLAGS = ‘-fexceptions -framework CoreServices -framework Foundation -framework IOKit -framework AppKit -framework Carbon -framework AGL -framework AudioUnit -framework AudioToolbox -framework CoreAudio -framework QuickTime’
REL_CFLAGS = [‘-O2’]
REL_CCFLAGS = [‘-O2’]
##BF_DEPEND = ‘true’

#ar = ar
##ARFLAGS = ruv
##ARFLAGSQUIET = ru

CC = ‘gcc’
CXX = ‘g++’
C_WARN = ’ -Wall -Wno-long-double -Wdeclaration-after-statement ’

CC_WARN = ’ -Wall -Wno-long-double’

##FIX_STUBS_WARNINGS = -Wno-unused

LLIBS = ‘stdc++ SystemStubs’
##LOPTS = --dynamic
##DYNLDFLAGS = -shared $(LDFLAGS)

BF_PROFILE_FLAGS = ’ -pg -g ’
BF_PROFILE = ‘false’

BF_DEBUG = ‘false’
BF_DEBUG_FLAGS = ‘-g’

BF_BUILDDIR=‘…/qdunebuild/darwin’
BF_INSTALLDIR=‘…/qduneinstall/darwin’

Hope it helps

Jens

You guys got to try this… Amazing eeshlo!!!

This is most excelent! I am currently making a film production company title, and when this stuff is more mature (or blender gets a full featured rman exporter) I just might do my projects fully in blender. Fast motion blur, adjustable shading rate, micropoly displacements…all the things I miss in blender internal will come true it seems!

Its already heaps and bounds faster than BI or Yafray (which doesnt have any motion blur so for my uses its useless).

I would like to have BI option in the future though, the more the merrier.

Anyways, excelent work!

PS. The current motion blur implementation (temporal multisample) is a temp solution? I think most Rman renderers use a different algo?

Also, any way to do shadows yet?

I cant get the interpolation of normals working, I have a nice model to try out the micropoly displacement but cant get it to work without interpolated normals.

Am I missing something?

could be someone so kind to build a win version out of this?

If it’s just camera blur, you can do this post pro in a compositor. I’m using this method on a project ATM. I just export the 3D camera to Shake and then apply motion blur by using the camera as a reference. I think Blender has a way of doing this kind of blurring too with comp nodes. It’s only linear and kinda limited to camera movement so it’s not as good as true motion blur but then e.g python exports are limited to linear blurs as Blender only samples on whole frames and that takes away the advantage of having true motion blur but it’s quicker to do it in post. I don’t know if QDune gets round that limitation.

Renderman uses multisamples though, it’s just that no matter how many samples you specify, the render time doesn’t go up by a great deal, though you kind of have to increase the pixel samples to avoid grain. It also interpolates linearly between samples, which I don’t actually think is a very good idea. I reckon most real-world cases would benefit more from cubic interpolation. This also keeps the file size down as you need fewer samples. This only really matters when it comes to deformation blurs though on high res models.

Not sure why you’d need to interpolate normals on a micropoly displacement or do you means that it’s not interpolating them? If you need explicit gouraud shading, you need to export the normals as varying.

Hello,
another quickie!

@oxrules: I may have misunderstood you, but are you saying that blender’s vector blur is currently limited to camera movements? If so, I’d like to inform you that it’s not the case, every pixel has a vector I think, and all these vectors are used by the vector blur node in the compositor. Its quite convincing.
If you’re just saying that the qdune branch doesn’t have full vectorial blur, then I won’t say you’re wrong :slight_smile: as I still don’t have a clue on what’s in that branch and what not!

cheers,
Dani

No I meant the method I used of exporting the camera to Shake only has camera blur.

yuhu,…

this is FAST!!

hey, the micropoly-displacement is good - i used the so-called “subpoly-displacement” in cinema4d, which is much slower…

excellent work, excellent results!

S.

i just can’t use proper uv-mapping with displacement…

This is extremely early work, only very basic integration yet, all done by Brecht btw, not me.

Currently you do indeed need vertex normals to displace meshes properly, otherwise all faces will be pushed apart by the displacement. Vertex normals are not implemented yet in the qdune/blender interface.

@simhar: don’t forget that there is no raytracing yet, and not even shadows either. C4D is raytracer isn’t it? Or does it also have a scanline mode or something? In any case, once qdune has raytracing (if ever), it will be almost certainly a lot slower.

Eeshlo,if I remember correctly,qdune has support for tif 32 bit(Blender support only the 8 bit tif,at least up to 2.43,I don’t know if the things is changed).It could be cool if 32 bit tiff can work,as it’s the 32 bit displacement standard format(zbrush,mudbox use it)

The fact that Brecht is helping with the intergration and Ton recognizing the project is pretty much a sure sign we’ll see this in Blender. (One of the Peach posts showed a picture of Brecht which Ton said he was hiding behind 2 micropolygons):yes: