|
v002 Model LoaderHi. Here is a beta of a new model loader for QC. This model loader supports animation (yes, really), and works using Open Asset Import Library 2.0, allowing for import and display of over 20 different model formats. An in complete list: Collada (.dae), 3ds Max 3DS (.3ds), 3ds Max ASE (.ase), Wavefront Object (.obj), Stanford Polygon Library (.ply), AutoCAD DXF (.dxf), LightWave (.lwo), Modo (.lxo), Stereolithography (.stl), AC3D (.ac), Milkshape 3D (.ms3d), TrueSpace (.cob, .scn), Valve Model (.smd,.vta), Quake I (.mdl), Quake II (.md2), Quake III (.md3), Return to Castle Wolfenstein (.mdc), Doom 3 (.md5), Biovision BVH (.bvh), CharacterStudio Motion (.csm), DirectX X (.x)., BlitzBasic 3D (.b3d)., Quick3D (.q3d,.q3s)., Ogre XML (.mesh, .xml)., Irrlicht Mesh (.irrmesh)., Irrlicht Scene (.irr)., Neutral File Format (.nff), Sense8 WorldToolKit (.nff), Object File Format (.off), PovRAY Raw (.raw), Terragen Terrain (.ter), 3D GameStudio (.mdl) and 3D GameStudio Terrain (.hmp) You can also optionally patch in an image and use that as the models texture image, and select various texture coordinate generation routines (or use the models baked UVs). If you choose Object Linear or Eye linear you might want to use an Image Texturing Properties patch before the model image input port and choose TEXTURE_2D (so you can leverage repeat texture mode) and adjust scaling to fit. Animations work via Patch Time, so you can scratch and scrub animations if you use an external timebase (yes, really). The model loader also handles vertex skinning on the CPU as well as keyframe interpolation, so you don't need a specific vertex shader to implement animation (although it might be faster, its far more limiting to and end user). It should work within a GLSL patch as well, but honestly i've not tested every combination or complete compatibility. Current issues I am aware of is that its not super smart about looking for texture paths. Some models have really fucked paths for textures, listing absolute or relative paths that do not exist. You can see some errors in the console if this is the case. This is very beta, but very very fast. You can load a 230 MB OBJ file and render 3.2 million verts at ~40 fps on a 330m. Current issues that are solvable: Exposing animation duration, exposing inputs for selecting different animation tracks. Issues I don't really want to deal with: mesh output compatible with OpenCL / Mesh renderer. This might be doable, but the internal structure is not suitable to expose as a single mesh object. Will have to look into this (if its possible at all). This could mean (due to CPU side vertex skinning) animated meshes to OpenCL, which.. thinking about it might be worth the effort. Fuck. I also wont be exposing the internal textures for now, so they are loaded and handled internally and not exposed. Anyway, this loader is very optimized, I think you will find it pretty damn fast. Let me know how it goes. Also, while this is a pubic beta, I'd prefer I don't get random reports from people saying it doesn't work without any useful debugging info. Check it out: http://v002.info/downloads/beta/v002%20Model%20Importer.plugin.zip I'd like to thank the Open Frameworks conference for giving me the time to finish animation support, and specifically Memo for giving me a kick in the ass to get framerates up to their max. I think we can get this even faster. Let me know how it goes.
|
Nooo! It's 404! :)
(Can't wait to check it.)
Ah, correct link to v002 (as opposed to Vade), and it dl's. (gee, I haven't even read all of the post yet :)
Oh god im an asshole. ill fix that stat.
I cant edit the post, but Im an ass and put the wrong URL in there. The correct DL link is
http://v002.info/downloads/beta/v002%20Model%20Importer.plugin.zip
If a Kineme admin could edit the post, that would be awesome. Sorry about that. Herpa Derpa etc. etc.
So, just for me to be clear, we can run animations... do you have any thoughts about adding a way to control joints in the future?
Yes you can run animations. Control individual joints is very very tricky. You have to supply a proper, weighted matrix for each bone in the mesh. Honestly, probably not. You can look at the source, once I get some of the bugs worked out.
The source for this is a slightly modified version of the open frameworks loader I ported from this at the OF Dev conference, feel free to peruse here:
https://github.com/vade/openFrameworks/tree/master/addons/ofxAssimpModel...
This will be included in OF 007
(Fixed link in original post.)
I'd appreciate looking at the source once your comfortable with it.
I was adding in manual joint control to a loader I'm less than thrilled with (this weekend actually), but that had an ok starting point for adding in joint control, and that's exactly what I was doing - creating weighted matrix for each bone in the mesh. It would be gargantuan to create a one size fits all for that (or maybe impossible?), but it would be handy to work with it, and maybe get some stuff going solidly with select models.
(btw, I just posted an openCL lerp/morph kernel that might get your mind rolling in some cool direction, as far as lerping between keyframes via openCL, and having it work w/ CL mesh.)
I had a feeling it was related to the OFX project, but didn't want to assume anything.
Definitely check out the OF source. It's based on a Mac example I donated to the assimp project so they had an up to date VBO based gl example. I wrote the QC plugin next but never had a chance to add animation until the OF conference, thus the post here right after the conference :)
Thanks for the link to the OF source.
AWESOME ! Thank you soooo much.
I believe there's problems using relative file paths with actual models (not just texture). (To counter, I'm loving looking at bvh files playing through.)
sweet i herd you where working on a collada importer but this seems to be a bit more. sounds awesome can't wait to try.
This is the loader playing through some bvh files.... I used some motion blur on the render (Quartz Crystal).
I've attached a zip. Now, files will have to be reloaded into paths, because it looks like paths have to be absolute.
Oh, good catch. Indeed I did not add that code, I ought to add the relative path checking. Will do for the next beta.
I tried loading these guys into a trackball to no avail. Any reason why it wouldn't work inside a trackball?
They work fine in a trackball.
I may be assuming too much but I'm guessing you selected all, then hit macro (at which point you would see all the characters disappear because the file paths just got eradicated), then hit transmutate trackball.
Just put the file paths back in.
It 100% works in a trackball. I have tons of comps that do that.
thank you very much for this great plugin.
hi, how am I supposed to import skinned meshes ? should I import bones as well ?
Updated the model loader, fixed some display/rendering issues with certain format models, removing redundant loading options, fixed relative paths for texture loading. Added animation index option, so if your model supports multiple animation tracks, you can select which animation to use.
http://v002.info/downloads/v002%20Model%20Loader%201.0%20Beta%201.dmg
Example comp includes a demo collada (dae) model with animation. This loader supports 35+ format models, most have been tested and verified to work.
Enjoy.
Hrm? You include the skinned bones with the model, or export a format that supports both like MD5, which exports the MD5mesh and MD5anim files, and make sure they are in the same directory.
Or use Collada which includes the animation tracks and bones in one file.
Thanks!
A marvelous plugin ! Cheers Vade!
A.W.E.S.O.M.E ! and thxx for the source, this is ultra-valuable, will definetly learn a lot.
Just gotten into the whole working process of utilising the Model Importer, currently only with .dae and .ply within GLSL shaders derived pretty directly from the MeshLab application. [see MeshLab Shaders Collection ].
I'm pretty wowed out about it, very useful and I know I've only just begun to skim the surface of what is possible with the plugin.
Source Code too :-)
vade - you're a true star
im seriously going to try this plugin soon with some animations. it really excites me particularly the external time component. the link is dead now but i think i have this on my other machine. going to try it on my clean plugin free dev machine.
Thank you once again for this amazing plugin. Should I be able to put it inside an iterator? If not, suggestions?
Yes you should be able to, see attached, uses seashell.ply in a Normal Map Shader from MeshLab, ported to QC.
Thanks a lot, cybero. Not sure why the simple dae file I tried didn't show up at first but I didn't try too hard to troubleshoot.
The 1024 guys and Weirdcore helped me identify some issues where I was not properly handling specific types of transforms, and additionally, was blindly transforming things that did not need transforming. The net result is a new version of the v002 Model Loader that properly handles many more formats and more types of animation.
Im uploading the DMG now, im gonna make a new post about Beta 2. Let me know if it fixes your loading woes.
hi vade is this for snow leopard only or us is hotter climate can use it too?
10.6 and QC 4.0 required.
To quote from the Read Me included in the DMG.
Works really nicely with .ply models [& other types besides].
Also, without giving too much away, works AOK in Lion as well as 10.6.x /////////////////////////////////////////////////////////////////////////////////////////////
BTW - is it possible to place the Model Loader inside an RII patch and get it to render in Quartz Crystal?
I merely ask because a composition that looks exceedingly cool using the v002 Rutt Etra 3.0 patch fed by such an RII reversioning of the seashell composition above, renders fine in QC but fails to produce anything apart from a square grid in Crystal [version 2.0].
If it renders ok in QC, it may be a bug in Quartz Crystal 2.0, or, in turn, I could be making an error in how I handle some subtle state changes that Quartz Crystal is doing that QC itself is not.
Can you post a simple composition illustrating the issue?
Sure, here it is.
Includes the .ply employed in the composition.
BTW, although I haven't included a Sprite or other rendering patch apart from the v002 Rutt Etra 3.0 patch in the composition attached, I have tried out this composition with them and Quartz Crystal still renders it as a black, empty space.
Quote:
Requirements: Mac OS X 10.6 (Quartz Composer 4.0) Only.
NOW thats unfair. packing my sht to go to the snow. its time. wish me luck!!!!
You won't need too much in the way of luck, just some patience, bernardo :-).
The process should be quite painless.
Retaining a bootable Leopard partition would be a good idea if you can manage to though.
ah!! thanks cybero as for the partition my disk is too small.... i am considering ditching my dvd drive and gor for another hdd instead...
You and I have different ideas of simple. Your composition renders black for me in Quartz Composer when I open and run it.
My bad, just need to turn up the Color Alpha setting on the v002 patch to get it to render in Composer, if I explode the Iterator and then present to Crystal it renders , so actually this is the simplest version that reproduces the problem, albeit the case that the use of the Concert patch is arguably inessential to running the v002 patch's Displacement image input, as it could use the same image input as the main image input.
I am actually able to re-produce an issue with just an iterator, and I think I have found a bug with the iterator patch.
If I have a 3rd party plugin that I check has a published input port, and save a value into that input port, and in the execute method I check for "did value for input key change", when I am in an iterator, that value does not seem to fire when starting the comp for the first frame, but will fire on load outside of the iterator
So what is happening, is that its not actually being told to load a model
sigh
I am going to send a bug report to the QC list.
I guess I just wasn't seeing the wood for the trees.
Thanks for enquiring further.
Mind you, having just taken a look back at the pre RII version, having exploded the various macros down to a single Iterator wrapping a Model Loader patch [no RII], I can render in QC.
Perhaps you're meaning an Iterator in an RII?
However, I am unable to reproduce your reported problem maker, in fact, going down that route [so far as I am understanding what that route is] actually results in a product that is renderable in Quartz Crystal, both inside and outside of Quartz Crystal.
These examples don't use GLSL shaders, or Trackballs.
They both render in Quartz Crystal for me.
If you take your problem comp and make the file path in an insert splitter, that's not in the iterator or rii, but then links to the model loader, does it load then?
I'd already done that. It , indeed they all, load and render in Composer, but fail, unless otherwise previously indicated, in Crystal.
http://lists.apple.com/archives/quartzcomposer-dev/2011/Jun/msg00002.html
http://vade.info/IteratorBug.mov
Firstly thank you for a great plugin! Was having some trouble previously bringing in 3d models and this sorted everything out!
With the exception of the textures - I'm sure I'm just doing something wrong on my side, but I'm new to this so can't quite manage to work it out.
I'm trying to load multiple textures on my 3d model, so for example the boots are textures separately to the torso etc - is this possible? How do I go about doing it?
only single texture file supported, SFAIK.
Funny you should say that - I would have expected as much, but when I loaded it up this morning textures were all loaded... Don't know if it will last, but was a nice surprise! I also haven't changed anything so I'm not sure what happened...
On a related note, is there a way to bring in .mtl files (linked to .obj) for the textures?
Cybero, dude, it loads as many textures are linked in the model file.
:\
Unexpected Girl: May have to do with the paths. The model loader looks for the image file of the texture via the paths as specified in the model file. If you had weird paths, or moved/edited the paths, that might explain a difference?
I've 100% loaded models with many different textures, and know that it works just fine. The only gotcha is using models where full paths are specified as texture resources. The logic for deducing the proper path is pretty simple. That could use a bit of fleshing out. That said, it will work if paths are "sane".
Updated :_)
Hi Been looking to get into real time 3d for ages, here we go,cheers Vade. Have read through the thread but couldn't quite pin where the latest version can be got from? X Matt Black
v002.info
thank you Vade.
do you know where there is some info about what one can do to objects/meshes? have read around it on the forums here but I'm not clear about a simple thing like: can one deform objects in a flexible way? say I want to take a plane and put a sinewave on the Y axis to make it ripple. Possible?
x Matt
Also Vade, my mate and me were just talking about '3d feedback' , objects creating objects, and then found the post here with the Iterator idea 'Seashell.'! sounds like what we wanted. We grabbed it, but on opening it in QC its black. Do we need eg to explicitely load the seashell.ply object to it? thanks X M
Making a sinewave ripple with a mesh is fairly easy when using GLSL.
One can put the "renderer" patch inside of a GLSL environment (I guess in this case it would be a GLSL grid, or the v002 model loader, from context of previous discussion).
If you want the ripple to be on a different axis than Y, take the line:
vec3 vertex = gl_Vertex.xyz + sin(offset + gl_Vertex.y * scaleIn)*scaleOut;
...and change the gl_Vertex.y to gl_Vertex.x or z.
One thing to realize about using a GLSL environment, like this, is that you will have to implement stuff like lighting manually (using GLSL code).
thank you George, and thanks for your many creative inputs here and elsewhere