Wednesday, October 14, 2009

the realtime GI course

Thorsten just told me about the realtime GI course (Siggraph 2009) being available online
http://www.cs.ucl.ac.uk/staff/j.kautz/RTGICourse/

He also hinted me towards the GI compendium
http://www.cs.kuleuven.be/~phil/GI/

Friday, September 18, 2009

the virtual endoscopy


Here you can see the lung. For a upcoming presentation, I've been messing with some settings with the endoscopy system I've developed a year ago with focus on nasal sinuses, however it works for other hollow organs just fine. My supervisor on this project (diploma thesis) had made contacts with the university clinic in Leipzig and together with a leading ENT-surgeon, the usability of the system was tweaked. At the end it was used in larger clinical study at two locations with some 100+ patients (who prefered virtual pictures over video hehe). Texturing is tri-planar and several post steps are needed to smooth normals and so on (inter-leaved sampling, hitpoint refinement....).
More details about implementation can be found in one of the publications around this project:
SinusEndoscopy-IEEE Vis 2008 Paper, Slides

Main focus was a surface depiction that is similar to what the surgeons are used too (but not too real, to prevent false impression of too much data security, CT cannot show tissue diseases). The effect is similar to the Cascades-Nvidia demo.

And some videos:
IEEE Vis 2008 Video
Colonoscopy
Neck endoscopy

Friday, August 28, 2009

the simple cuda test


The refactoring and rewriting of luxinia's internals goes on, prior open sourcing the full project (cleaning up code and trying to apply some of what was learned). On the side to have some fun, further dx10 features (ogl equivalents) are added. So more of GL's bufferobjects features are made accessible on the Lua side.
A result was a small sample of coding up a lua extension dll, which runs a cuda kernel on a vertexbuffer. I never played with Cuda before, and kinda missed the built-in vector types of Cg, ie that float3*flaot must be done via operator overloading in cuda... means the compiler has to do vectorizing himself (but he can, compared to Cg). I've modified the simpleGL nvidia sample to make use of custom vertex color attribute. It's really nice that cuda supports the datatypes, transform feedback wouldnt allow you to store back to smaller datatypes.
Next comes up adding transform feedback, so that you can specify output streams in a shaderpass and streamobject will be a resource like a texture, assignable to material instances. First will only do for nvidia profiles. I still use Cg runtime quite a bit, so doing it for their GLSL profiles is a bit ugly at the moment. Not sure yet if I stick to Cg runtime, or just use it for compilation and do parameter and program creation all myself, would be a bit "what you want is what you get", but also more work now.

Tuesday, August 11, 2009

the new siggraph stuff

just looking at the various stuff coming from siggraph (check Atom blog for some onsite info)

light propagation (first bounce GI) in CryEngine3
http://www.crytek.com/technology/presentations/

And more links from siggraph at beyond3d and another interesting slides by Epic's Tim Sweeney

on a side-note, I did not go for the GC in C, but use a more simple refcounter similar to boost's shared/weak pointers with a dedicated allocator.

Saturday, August 8, 2009

the idtech5 virtual texturing

just saw this http://s09.idav.ucdavis.edu/talks/05-JP_id_Tech_5_Challenges.pdf on gamedev, some slides about the virtual texturing in idtech5 (Rage).
Other recent things I stumbled upon were of course the OpenGL 3.2 specs (yeah they finally get some momentum and turned "compatibility" into a profile, not that ugly giant extension). I am currently looking into C hashing libs and a garbagecollector for C. Reason is I want to better split the luxinia GC system from Lua, so that we can move on to using SWIG, ie providing a proper C api (and not just the Lua binding) but keep the reference system working. Smart pointers are not an option as it's too much of an issue to prevent cycles and in general I want to keep the core engine Ansi C.

Thursday, July 16, 2009

the good read

Bruno, a friend of mine, gave me a link to a very nice essay today
http://www.longnow.org/views/essays/articles/ArtFeynman.php

It's about the early days of "Thinking Machines", a company that built parallel computers in the early 80s, and how Richard Feynman helped them in an almost fatherly role.

And stumbled upon anther creative mind today, Michel Gagne. Very cool illustrations and the latest game based on his universe looks fantastic.

Saturday, July 11, 2009

the 3dsmax sdk frustration

3dsmax sdk gives me so much love... not. Today found out (the hard way) that their BitArray.EnumSet function is broken in 64 bit...

on a sidenote the SDK states if you want something you draw in viewport to have a fixed nonscaling size, to use
vpt->GetVPWorldWidth(wpt)/360.0f;
however this isnt correct, you want to use
aspect = ((float)gw->getWinSizeX()/(float)gw->getWinSizeY());
aspect = max(aspect,1.0f);

(vpt->GetVPWorldWidth(wpt)*aspect)/(float)gw->getWinSizeX();