Publications Procedural Noise using Sparse Gabor Convolution
Created:
2009-05-12
Updated:
2009-05-12

Ares Lagae, Sylvain Lefebvre, George Drettakis, Philip Dutré

[Project page]
Noise is an essential tool for texturing and modeling. Designing interesting textures with noise calls for accurate spectral control, since noise is best described in terms of spectral content. Texturing requires that noise can be easily mapped to a surface, while high-quality rendering requires anisotropic filtering. A noise function that is procedural and fast to evaluate offers several additional advantages. Unfortunately, no existing noise combines all of these properties. In this paper we introduce a noise based on sparse convolution and the Gabor kernel that enables all of these properties. Our noise offers accurate spectral control with intuitive parameters such as orientation, principal frequency and bandwidth. Our noise supports two-dimensional and solid noise, but we also introduce setup-free surface noise. This is a method for mapping noise onto a surface, complementary to solid noise, that maintains the appearance of the noise pattern along the object and does not require a texture parameterization. Our approach requires only a few bytes of storage, does not use discretely sampled data, and is nonperiodic. It supports anisotropy and anisotropic filtering. We demonstrate our noise using an interactive tool for noise design.

Software RotoPath
Created:
2009-03-14
Updated:
2009-03-14

How much time do you spend navigating through folders every day? For me, the answer was: Way too much. I created a very simple app to navigate through folders (folders only, this is not a file explorer!!). It presents folders in a wheel. A left click goes to the next folder, a right click opens explorer on the folder. The wheel can be displayed at any time by pressing Left-Control and Left-Windows simultaneously. Most visited folders are shown in red for fast access. There are three special icons to open a command line at the current folder, to show favorite folders, and to go back to MyComputer. Download it here.

Publications Lazy Solid Texture Synthesis
Created:
2008-06-19
Updated:
2008-06-19

Yue Dong, Sylvain Lefebvre, Xin Tong and George Drettakis

[Video]
The key idea of this work is to synthesize solid textures for surfaces, but only for the voxels around the object. Hence we never have to store or compute the entire volume. Our GPU implementation is very fast, so we can in fact synthesize a texture for the interior surfaces whenever an object is cut or broken. We obtain much more variety than a direct tiling of a 3D tile, which would create visible repetitions along some directions (and require storing a full volume tile). There is no pre-process of the object interior (ie. no thetrahedrons, no prior-knowledge of where the object will fracture) so our approach could be used for interactive breaking of large structures.

Publications Texture Synthesis From Photographs
Created:
2008-06-19
Updated:
2008-06-19

Christian Eisenacher, Sylvain Lefebvre and Marc Stamminger

The goal of texture synthesis is to generate an arbitrarily large high-quality texture from a small input sample. Generally, it is assumed that the input image is given as a flat, square piece of texture, thus it has to be carefully prepared from a picture taken under ideal conditions. Instead we would like to extract the input texture from any surface from within an arbitrary photograph. In this paper we combine a simple novel user interface with a generic per-pixel synthesis algorithm to achieve high-quality synthesis from a photograph. Applications range from synthesizing textures directly from photographs to high-quality texture completion.

Tutorial Parallel Controllable Texture Synthesis tutorial
Created:
2009-04-03
Updated:
2009-04-03

This is a 'small and clean' implementation of our 'Parallel Controllable Texture Synthesis' algorithm (SIGGRAPH 2005) on the CPU. There are many things left out, including many important optimizations, so don't hope for blazing fast performance. Nonetheless it has all the basic elements in place, supports multi-threading, and the synthesis quality is more than reasonable.

Publications Mesh-puzzle
Created:
2009-04-03
Updated:
2009-04-03

Modeling large architectural environments is a difficult task due to the intricate nature of these models and the complex dependencies between the structures represented. Moreover, textures are an essential part of architectural models. While the number of geometric primitives is usually relatively low (i.e., many walls are flat surfaces), textures actually contain many detailed architectural elements. We present an approach for modeling architectural scenes by reshaping and combining existing textured models, where the manipulation of the geometry and texture are tightly coupled. For geometry, preserving angles such as floor orientation or vertical walls is of key importance. We thus allow the user to interactively modify lengths of edges, while constraining angles. Our texture reshaping solution introduces a measure of directional autosimilarity, to focus stretching in areas of stochastic content and to preserve details in such areas. We show results on several challenging models, and show two applications: Building complex road structures from simple initial pieces and creating complex game-levels from an existing game based on pre-existing model pieces.

AddOns DéjàVu
Created:
2005-11-08
Updated:
2009-01-25

DéjàVu is an interface AddOn for World Of Warcraft. DéjàVu keeps track of all the players you have targeted while playing the game. You can list each time you saw a particular player, as well as information about the player's guild at this time, his level, your level, and if you were in a party or not.
 
Simply type "/dejavu" or "/dv" to open the DéjàVu window in game. Disable all chat messages with "/dv silent".

Demo Ocean surface simulation
Created:
2007-04-01
Updated:
2007-04-01

This demo is a GPU implementation of the paper Interactive Animation of Ocean Waves. The package includes the demo executable and full source code. Enjoy!

Publications TileTrees
Created:
2007-03-29
Updated:
2007-03-29

Sylvain Lefebvre and Carsten Dachsbacher

[Video]
Texture mapping with atlases suffer from several drawbacks: Wasted memory, seams, uniform resolution and no support of implicit surfaces. Texture mapping in a volume solves most of these issues, but unfortunately it induces an important space and time overhead. To address this problem, we introduce the TileTree: A novel data structure for texture mapping surfaces. TileTrees store square texture tiles into the leaves of an octree surrounding the surface. At rendering time the surface is projected onto the tiles, and the color is retrieved by a simple 2D texture fetch into a tile map. This avoids the difficulties of global planar parameterizations while still mapping large pieces of surface to regular 2D textures. Our method is simple to implement, does not require long pre-processing time, nor any modication of the textured geometry. It is not limited to triangle meshes. The resulting texture has little distortion and is seamlessly interpolated over smooth surfaces. Our method natively supports adaptive resolution. We show that TileTrees are more compact than other volume approaches, while providing fast access to the data. We also describe an interactive painting application, enabling to create, edit and render objects without having to convert between texture representations.

Publications Perfect spatial hashing
Created:
2006-08-01
Updated:
2007-03-29

Sylvain Lefebvre and Hugues Hoppe

[Video]
We explore using hashing to pack sparse data into a compact table while retaining efficient random access. Specifically, we design a perfect multidimensional hash function — one that is precomputed on static data to have no hash collisions. Because our hash function makes a single reference to a small offset table, queries always involve exactly two memory accesses and are thus ideally suited for parallel SIMD evaluation on graphics hardware. Whereas prior hashing work strives for pseudorandom mappings, we instead design the hash function to preserve spatial coherence and thereby improve runtime locality of reference. We demonstrate numerous graphics applications including vector images, texture sprites, alpha channel compression, 3D-parameterized textures, 3D painting, simulation, and collision detection. No hindsights yet.

Publications Appearance-space texture synthesis
Created:
2006-08-01
Updated:
2007-03-29

Sylvain Lefebvre and Hugues Hoppe

[Video]
The traditional approach in texture synthesis is to compare color neighborhoods with those of an exemplar. We show that quality is greatly improved if pointwise colors are replaced by appearance vectors that incorporate nonlocal information such as feature and radiance-transfer data. We perform dimensionality reduction on these vectors prior to synthesis, to create a new appearance-space exemplar. Unlike a texton space, our appearance space is low-dimensional and Euclidean. Synthesis in this information-rich space lets us reduce runtime neighborhood vectors from 5x5 grids to just 4 locations. Building on this unifying framework, we introduce novel techniques for coherent anisometric synthesis, surface texture synthesis directly in an ordinary atlas, and texture advection. Remarkably, we achieve all these functionalities in real-time, or 3 to 4 orders of magnitude faster than prior work. No hindsights yet.

Publications Parallel Controllable Texture Synthesis
Created:
2005-07-02
Updated:
2005-07-02

Sylvain Lefebvre and Hugues Hoppe

[Additional results] [Video]
We present a texture synthesis scheme based on neighborhood matching, with contributions in two areas: parallelism and control. Our scheme defines an infinite, deterministic, aperiodic texture, from which windows can be computed in real-time on a GPU. We attain high-quality synthesis using a new analysis structure called the Gaussian stack, together with a coordinate upsampling step and a subpass correction approach. Texture variation is achieved by multiresolution jittering of exemplar coordinates. Combined with the local support of parallel synthesis, the jitter enables intuitive user controls including multiscale randomness, spatial modulation over both exemplar and output, feature drag-and-drop, and periodicity constraints. We also introduce synthesis magnification, a fast method for amplifying coarse synthesis results to higher resolution. No hindsights yet.

Publications Octree Textures on the GPU
Created:
2004-29-12
Updated:
2004-29-12

Sylvain Lefebvre, Samuel Hornus and Fabrice Neyret

 
Our GPU Gems 2 chapter describes how to store and efficiently access an octree data structure from the GPU. The octree is (compactly) stored in GPU memory and accessible from a fragment program.
Two applications are described: Interactive 3D painting of unparametrized meshes and simulation of liquid flowing along a surface.
Code, demo and videos are available to download.

Games Ragdoll Smasher
Created:
2007-07-14
Updated:
2007-07-14

Ragdoll Smasher is based on a very stupid idea: Throwing a character in the air to break stuff. The level is complete once everything is on the ground. The goal is to throw the smallest number of characters. New structures appear as you progress through the 11 levels of the game. Keep in touch as more levels will be added soon!

Publications Texture Sprites: Texture Elements Splatted on Surfaces
Created:
2004-06-11
Updated:
2005-02-03

Sylvain Lefebvre, Samuel Hornus and Fabrice Neyret

We present a new interactive method to texture complex geometries at very high resolution, while using little memory and without the need for a global planar parameterization. We rely on small texture elements, the texture sprites, locally splatted onto the surface to define a composite texture. The sprites can be arbitrarily blended to create complex surface appearances. Their attributes (position, size, texture id) can be dynamically updated, thus providing a convenient framework for interactive editing and animated textures. We demonstrate the flexibility of our method by creating new surface aspects difficult to achieve with other methods. Each sprite is described by a small set of attributes which is stored in a hierarchical structure surrounding the object's surface. The patterns supported by the sprites are stored only once. The whole data structure is compactly encoded into GPU memory. At run time, it is accessed by a fragment program which computes the final appearance of a surface point from all the sprites covering it. The overall memory cost of the structure is very low compared to the resulting texturing resolutions. Rendering is done in real-time. The resulting texture is linearly interpolated and altered.

Tutorial D3D FX tutorial - repeating a small part of a texture
Created:
2003-05-26
Updated:
2003-05-26

This tutorial shows how a subpart of a texture can be easily repeated. This overides the standard "repeat texture" mode were the whole texture is repeated for texture coordinates outside [0,1] range.
For more information please refer to this flipcode thread.

Publications Unified Texture Management for Arbitrary Meshes (research report)
Created:
2004-06-11
Updated:
2004-06-11

Sylvain Lefebvre, Jérome Darbon and Fabrice Neyret

Video games and simulators commonly use very detailed textures, whose cumulative size is often larger than the GPU memory. Textures may be loaded progressively, but dynamically loading and transferring this large amount of data in GPU memory results in loading delays and poor performance. Therefore, managing texture memory has become an important issue. While this problem has been (partly) addressed early for the specific case of terrain rendering, there is no generic texture management system for arbitrary meshes. We propose such a system, implemented on today's GPUs, which unifies classical solutions aimed at reducing memory transfer: progressive loading, texture compression, and caching strategies. For this, we introduce a new algorithm -- running on GPU -- to solve the major difficulty of detecting which parts of the texture are required for rendering. Our system is based on three components manipulating a tile pool which stores texture data in GPU memory. First, the Texture Load Map determines at every frame the appropriate list of texture tiles (i.e. location and MIP-map level) to render from the current viewpoint. Second, the Texture Cache manages the tile pool. Finally, the Texture Producer loads and decodes required texture tiles asynchronously in the tile pool. Decoding of compressed texture data is implemented on GPU to minimize texture transfer. The Texture Producer can also generate procedural textures. Our system is transparent to the user, and the only parameter that must be supplied at runtime is the current viewpoint. No modifications of the mesh are required. We demonstrate our system on large scenes displayed in real time. We show that it achieves interactive frame rates even in low-memory low-bandwidth situations.

Demo Spilling fluid over surfaces
Created:
2004-05-03
Updated:
2004-05-03

These videos (DivX 5.03) illustrate my shader simulating fluid flowing over a surface. The simulation is entirely computed by the GPU.

Publications Drops of water and texture sprites
Created:
2003-09-27
Updated:
2003-09-27

The Drops of Water shader is an animated effect showing drops falling along a surface. The shader relies on a fragment program and therefore no geometry is required for the rendering of the drops: all is done in texture space.
The Drops of Water shader is part of the ShaderX2 - Tips and Tricks book.

Wristapp Deadline Wristapp
Created:
2003-08-03
Updated:
2003-11-03

This is my first wristapp for the awesome Timex Datalink USB watch.
The purpose of this wristapp is to count the remaining days before a deadline. Useful to increase your stress level ;)
The source code is available.

Games Jalweg
Created:
2002-12-20
Updated:
2003-05-31

Jalweg is an action/puzzle game based on a simple idea: you control a small sphere (the hero) in a level and you are chased by at least one big metal sphere (a monster). The goal is to destroy all the other spheres (the balls) by making the monster colliding with them. If the hero collides with a monster it is destroyed ... and you lose. However you can safely collide with the daemons. The idea is simple - but trust me, you will have a hard time to finish all the levels ! And if it is not enough, a game editor is included ! For more informations visit the Jalweg home page.
 
Just Another Little Week-End Game

Software Mobinet
Created:
2003-03-01
Updated:
2003-08-03

Mobinet is an educational program designed to show how the maths and physics learned in high-school are useful to create interactive applications.
It allows to easily create networked interactive applications by describing interactions between objects using a simple language.

Tutorial Cg tutorials
Created:
2003-04-14
Updated:
2003-04-14

You will find here some very simple Cg tutorials (at least one ;).
If you are interested in Cg but never tried it before, this section is for you !

Publications Automatic Cell-and-portal Decomposition (research report)
Created:
2003-07-01
Updated:
2003-07-01

Sylvain Lefebvre and Samuel Hornus

We present a method to automatically compute a decomposition of a polygonal scene into a simple cell-and-portal graph. The resulting cell-and-portal graph satisfies the following user-defined constraints: an upper bound on the rendering cost of each cell, and lower or upper bounds on the size of each cell. This is useful to achieve real-time rendering of large indoor models, and is especially suited to architectural walk-throughs and game engines. Our method relies on a binary space-subdivision preprocessing step, then on a portal grouping algorithm that selects or rejects portals generated by the subdivision. Finally the cell-and-portal graph (CPG) is built and post-processed to satisfy the constraints on the cells. We also propose a metrics for measuring the quality of portals, which is used to guide the post-processing. Furthermore, our simplification algorithm can be used on any CPG in order to reduce its complexity according to a user threshold. We present both a general algorithm and a complete implementation with practical details. Results show that portals created by our method have good geometrical properties (e.g. they often lie on doors and windows). The generated decomposition can be used for online occlusion culling.

Software Spam proof script
Created:
2003-05-26
Updated:
2003-05-26

If like me you are bored with receiving thousands of spams but are also too lazy to encode all your web site email links by hand, use this perl script. Create a mirror of your web site, launch the spam-proof.pl script in the root directory => it is done. All modified files are backuped as .bak files. Use the provided clean.pl script to delete all backup files.
The "encryption" method is to replace the mail link by an ugly Javascript code.

Libraries gluX
Created:
2002-07-17
Updated:
2008-10-10

GluX is a cross-platform easy-to-use OpenGL extension loader. It offers a very simple mechanism for loading and using OpenGL extensions. It allows your code to compile under Windows and Linux even if your video card doesn't support the OpenGL extensions used by your program: at run time, gluX will detect if required extensions are present or not.

Libraries GPUmesh
Created:
2004-05-03
Updated:
2004-05-03

The purpose of GPUmesh is to provide developers with a simple mechanism to send geometry to the GPU. The user chooses which type of mesh storage is desired (display list, vertex buffer, indexed vertex buffer, ...) and GPUmesh automatically performs the required conversions. The chosen mechanism can be changed very easily by changing only one typedef. This makes performance test with various storage solutions very easy. GPUmesh offers the same mesh specification mechanism under Direct3D and OpenGL, thus simplifying the task of writing mesh loaders.

Software gluXinfo
Created:
2003-03-07
Updated:
2003-06-06

gluXinfo is a very simple Windows application which purpose is to test availability of all OpenGL extensions on your hardware. It is build upon gluX. The source code is available in the gluX package.

Publications Pattern Based Procedural Textures
Created:
2003-03-07
Updated:
2003-03-07

Sylvain Lefebvre and Fabrice Neyret

This paper presents a framework to create procedural textures from a set of patterns. It relies on recent programmable graphic hardware to compute the color of each pixel from its texture coordinates. The texture is only computed at rendered pixels and there is no constraints on mesh as all computation is done in texture space. Our method allows a strong user control on the resulting texture. Applications are - but not restricted to - video games (decals, tile map, ...) and flight simulators (landscape texturing). Our framework allows to create a wide variety of textures by combining a set of basic blocks specifying simple operations.

Shaders Volumetric Lighting and Shadowing (NV30 shader)
Created:
2002-11-05
Updated:
2002-11-05

This shader computes lighting and shadowing in volumetric data (ie. a 3d texture). The idea is to implement a ray marcher directly into the fragment program of the NV30. Each time a pixel textured by the volumetric data is rendered, a ray is cast towards the light. Densisty is integrated along the ray and then exact lightning is computed. This method allows to render colored shadows of semi-transparent objects. Thanks to CG and NV30 this can be entirely done in hardware. Moreover, if the 3d texture is applied to a geometric model the lightning computation is only done if the pixel is visible.

Shaders Drop of Water - NVidia NV30 shader
Created:
2002-09-27
Updated:
2002-10-08

"Simulate" a surface under rainfall. This shader was developped with the NV30 emulation driver. Movies of this animated effect as well as full source code are available.

Games Etees
Created:
2002-11-25
Updated:
2004-05-07

This is the first game project we worked on with my friend Alexis. Small but unfriendly creatures, the Etees, have just invaded the Earth, enslaved the Frogs and destroy Humanity. And why ? Just to create a huge devastated land where they can play their favourite game: fighting for nuts. So, have fun, and do not forget that this was a first project, so it is absolutely far from perfect.

Tutorial Diffusion effect tutorial
Created:
2001-10-17
Updated:
2001-10-17

This tutorial presents a simple and efficient algorithm to create a well-known effect, which can be seen in a lot of WinAMP plug-ins such as "Geiss".

Software k8k - Kernel driver for K8000 interface board
Created:
2002-02-01
Updated:
2002-03-09

This is a simple linux kernel driver for Vellman K8000 interface board. It allows you to access the card without being root. Usefull to control the card via a web server for an example. An API is provided for easy C programming.

Publications Synthesizing Bark
Created:
2002-07-02
Updated:
2002-07-02

Sylvain Lefebvre and Fabrice Neyret

Despite the high quality reached by today s CG tree generators, there exists no realistic model for generating the appearance of bark: simple texture maps are generally used, showing obvious flaws if the tree is not entirely painted by an artist. Beyond modeling the appearance of bark, difficulty lies in adapting the bark features to the age of each branch, ensuring continuity between adjacent parts of the tree, and possibly ensuring continuity through time. We propose a model of bark generation which produces either geometry or texture, and is dedicated to the widespread family of fracture based bark. Given that the tree growth is mostly on its circumference, we consider circular strips of bark on which fractures can appear, propagate these fractures to the other strips, and enlarge them with time. Our semi empirical model runs in interactive time, and allows automatic or influenced bark gen-eration with parameters that are intuitive for the artist. Moreover we can simulate many different instances of the same bark family. In the paper, our generated bark is compared (favourably) to real bark.

Software AdFiRe - Advanced File Research
Created:
2001-04-15
Updated:
2001-04-15

This software create a 3D view of your file system. It gives you a quick estimation of where are big files. A filter can be used to search for a type of file (*.zip for example). All the files that corresponds to this filter on the entire file system are shown in the 3D view. You can also quickly access to a file or a directory by clicking on it.
Just try !
 

Software Roto Rubber Light Map Sphere - RoRoLoMoS
Created:
2000-09-07
Updated:
2000-03-12

RoRoLoMoS is a WinAMP plugin inspired from one of my demo effects.
Just try it !

Software WOC - Open Controler for Windows ®
Created:
1999-02-10
Updated:
2002-05-21

WOC - Open Controler for Windows ® allows you to take control of a distant computer. You can use the distant computer just as if you were in front of it. Keybord and mouse can be controlled. You can explore drives, files, download or upload, run or kill processes (with a specific command line), shutdown or reboot the distant computer and all things that you can imagine : you can program your own plug-ins !! WOC is based on a client/server architecture.

Software Light And Darkness
Created:
1997-xx-xx
Updated:
1997-xx-xx

Light And Darkness is a small raytracer. It includes a procedural modeling language and some funny functionnalities. The LAD page is in french.

Tutorial Unreal Tournament Script
Created:
2000-xx-xx
Updated:
2000-xx-xx

A small tutorial on Unreal Tournament Script (in French)