Home General Discussion

realtime procedural textures

polycounter lvl 18
Offline / Send Message
arshlevon polycounter lvl 18
pretty cool article on a company that is making realtime procedural shaders. i think this is really cool, i mean there are tons of pros for this, the size will be A LOT smaller, allowing for tons more content, and they will hold up no matter how close you get to them, you can say goodbye to blurry textures.. i am sure there are cons.. i mean i would much rather paint textures.. but the screens look great and the end product is really all that matters.. so here is the article

http://www.bit-tech.net/gaming/2006/11/09/Procedural_Textures_Future_Gam/1.html

and here is the company bringing you this fancy stuff
http://www.profxengine.com/index.php?PAGE=GALLERY

Replies

  • Neo_God
    Options
    Offline / Send Message
    Neo_God polycounter lvl 18
    Wow! Those are mighty impressive!

    Thanks for the link!
  • Asmuel
    Options
    Offline / Send Message
    Asmuel polycounter lvl 17
    Good stuff arsh, tons of applications smile.gif
  • hawken
    Options
    Offline / Send Message
    hawken polycounter lvl 19
    it's interesting that this hasn't happened already

    all the old 3d software like Imagine and Real3d has procedural / fractal textures as the norm, and that was over 10 years ago.
  • LordScottish
    Options
    Offline / Send Message
    LordScottish polycounter lvl 18
    If I remember right Roboblitz has lots precedural textures.
  • Vailias
    Options
    Offline / Send Message
    Vailias polycounter lvl 18
    They mention roboblitz on page 2. Apparently this is the company that is responsible for those textures.
  • Black_Dog
    Options
    Offline / Send Message
    Black_Dog polycounter lvl 17
    It seems to me that this scheme is about pre-creating assets procedurally that will be "decompressed" and loaded into graphics memory as bitmaps, with the aim of reducing the size of games on disk. As such this has zero benefit over artist-painted bitmaps other than massively reduced disk space, unless I totally misunderstand the whole thing.

    Which is possible. confused.gif
  • CheapAlert
    Options
    Offline / Send Message
    CheapAlert polycounter lvl 18
  • wille
    Options
    Offline / Send Message
    wille polycounter lvl 17
    [ QUOTE ]
    It seems to me that this scheme is about pre-creating assets procedurally that will be "decompressed" and loaded into graphics memory as bitmaps, with the aim of reducing the size of games on disk. As such this has zero benefit over artist-painted bitmaps other than massively reduced disk space, unless I totally misunderstand the whole thing.

    Which is possible. confused.gif

    [/ QUOTE ]


    well, its a good help if you stream so much data the disk cant handle to stream it;the cpu will always be faster than the disk, so streaming procedural textures from the cpu instead of bitmap textures from the disk will be alot faster.

    also, you can do alot of funky stuff with the procedural textures that you cant as easily do with bitmap textures, like change them over time for example.
  • Vailias
    Options
    Offline / Send Message
    Vailias polycounter lvl 18
    Black dog: yes you totally misunderstand. They are generated by the cpu via an algorithm and rendered to texture memory for storage, to avoid recomputation unless its necessary. Its the same process as is used for your favorite 3d programs' fractal noise textures, marbles, woodgrain etc.
  • rooster
    Options
    Offline / Send Message
    rooster mod
    only thing I'm wondering about now is how long it takes to make one of these procedural textures look just how you want vs photosourcing/photoshopping. they do look fantastic
  • Richard Kain
    Options
    Offline / Send Message
    Richard Kain polycounter lvl 18
    This is actually a big help for next-generation content creation. One of the issues developers seem to keep running into is texturing. When dealing with higher-resolutions, you have to have much higher resolution texture. Otherwise, those nasty pixels become more and more apparent. And of course, if you ever zoom in close enough, or get too close to an in-game object, you'll see those pixels regardless of the texture's resolution.

    File size is actually one of the more minor gripes regarding textures. This solution solves much more than just squeezing file sizes down. Procedurally generated textures are resolution independent. Their actual pixel resolution when applied to a scene is theoretically infinite. It is also scalable. (meaning that textures on objects farther away can be rendered at lower pixel resolutions)

    And of course, there is the issue of time. I don't know about the rest of you, but it takes me a while to paint textures. It can actually take me more time to paint a skin than it did to make the model I'm painting it for. Now imagine that you are producing the environmental textures for an entire next-generation game. All those high-resolution textures. All that detail. Although I wouldn't recommend a method like this for character textures, it would be ideal for environments.
  • MoP
    Options
    Offline / Send Message
    MoP polycounter lvl 18
    Agreed with Rooster here - I can totally appreciate the scalability and performance improvements that using textures created in this manner would bring, but what about the tools for creating procedural textures?
    Can you make, say, a dirty, cobwebbed, bullet-ridden concrete wall in under an hour just by tweaking procedural nodes and values? How mathematical does an artist need to be to know how to get the best out of textures like this?

    I look forward to working with tech like this though. Having textures nice and sharp even when right next to them would be awesome.
  • Toomas
    Options
    Offline / Send Message
    Toomas polycounter lvl 18
    Actually i think that its quite possible to use procedurals on characters aswell. Especially to specify materials, havnt you noticed all the "scaled up" cloth? Or as a bump on skin along with decals for lips, joints etc.
  • Joseph Silverman
  • Mongrelman
    Options
    Offline / Send Message
    Mongrelman polycounter lvl 18
    I think it would interesting to use this, particularly on characters.

    If you could have procedural skin texture, then use some low resolution, painted texture maps for specific things, I imagine some good results could be achieved.

    For example, procedural skin all over a character, and a 512 texture map to darken the appropriate areas, such as for muscle definition. And procedural metal for the funky sci fi armour at least one character will be wearing, with a texture map containing decals added.

    Or maybe using weightmaps to control blending of procedural textures, allowing you a bit more control.
  • arshlevon
    Options
    Offline / Send Message
    arshlevon polycounter lvl 18
    *deleted for dumbness*
  • SHEPEIRO
    Options
    Offline / Send Message
    SHEPEIRO polycounter lvl 17
    ye i too can see it becomeing widely used as a "material" layer, that will provide a detail pass to all your textures when viewed up close. for enviroments the use would be a bit easier than characters, which i can image getting very complicated with blend maps everywhere. although you could split the mesh up into materials.

    you'd have to avoid that "so ninty-ninties" pre-render look
  • chrismaddox3d
  • Black_Dog
    Options
    Offline / Send Message
    Black_Dog polycounter lvl 17
    [ QUOTE ]
    Its the same process as is used for your favorite 3d programs' fractal noise textures, marbles, woodgrain etc.

    [/ QUOTE ]

    I don't think it is. What I think of procedural texturing is where a renderer derives texture values on the fly algorithmically rather than fetching data from memory, whereas this seems to be using normal bitmap textures that are generated procedurally, once, and then just left alone.

    One of those approaches gives you infinite detail, no tiling, etc and the other does not. I'm fairly sure this is the latter.
  • KDR_11k
    Options
    Offline / Send Message
    KDR_11k polycounter lvl 18
    Polish your knowledge of complex math and fourier transformations gentlemen, you're going to write your textures as formulas soon!

    A problem with procedurals is that they aren't as easy to make as textures. With a texture you want a speck of dirt and you paint a speck of dirt, with a procedural you have to find a way to mathematically describe a speck of dirt so your computer understands how it should look, where it should occur, etc. Preferrably in a solution that is not computationally expensive. Try using a procedural to add weathering to an object, not only do you have to teach it how the material weathers (e.g. concrete erodes, darkens, forms moss, etc while steel rusts and paint chips), you have to teach it the conditions causing it and let it simulate the weathering over the shape of your mesh if you don't want the wear and tear to appear random. Then you have to start adding specific treatment for some parts of the mesh (e.g. movable parts) so the wear on something that keeps scraping over another surface looks different from something that just takes a bit of rain.

    You are pretty much teaching the PC how to do art, it's easier the more you do the thinking for it but that also makes your procedural more static (e.g. if you hardcode the position of a rust spot it's going to look the same on every instancce of the procedural). To get the full power of procedurals including flexibility (so your steel material can be used on a trash can as easily as a tank and needs only minor changes each time) and variation (same surface won't look tiled no matter how large the area) you have to teach the computer how to make art. Unlike you the computer has NO understanding of the world and you have to teach it EVERYTHING, basically turning the computer itself into an artist. When you can do procedural photorealistic textures and meshes you've got the make art button.
  • Toomas
    Options
    Offline / Send Message
    Toomas polycounter lvl 18
    KDR_11k you dont have to do every effect with the same shader. For example if you want rust on metal you have metal shader and rust shader and mask for the rust shader (preferably vector then it will be always sharp too)
  • Motz
    Options
    Offline / Send Message
    Motz polycounter lvl 12
    I use this to some extent in a prototype game. I have a base diffuse layer and a mask to denote where the procedural shader is to overlay. It's a kind of 'mother of pearl' looking shader for vehicles made from a shell type material. You would be surprised at how much detail you can get with a 128x128 diffuse layer with this procedural shader masked on it.

    It uses some basic fractal algorithims to generate a normal map in memory to denote etches in the shell like material. It also controls the specular on it with a falloff material.

    Very efficiant. Very difficult to master. Most likely a visual application will come into play for common use shaders.
  • Waz
    Options
    Offline / Send Message
    Waz polycounter lvl 17
    I always have heard that the reason procedural textures weren't used in games is it takes longer to calculate the textures and display them compared to using a texture. So do you get lower fps but lower level load times using procedurals?
  • Motz
    Options
    Offline / Send Message
    Motz polycounter lvl 12
    Kind of opposite actually. Longer load times, durring level load sure. There is no FPS difference as far as I can tell. The main advantages for us is that we can make a smaller diffuse map, and not even ship an art asset for the normal this shader uses. The effect also has the benefit of making the objects look unique since no fractal we generate has the same seed. It does add some load time initially to actually build the texture. Look at .kkgrieger for instance. A tottaly procedural game, ages to load, 64k.

    I mostly use it to avoid objects looking exactly the same. You could technically have two of the same tank sit side by side, and make one paint sample look more sunworked/faded and rusted than the other. Even have teh rust come from different areas. Both dynamic, both of the same algorithms, just using different randomization seeds. Makes for a little less repetitivness.
  • arshlevon
    Options
    Offline / Send Message
    arshlevon polycounter lvl 18
    [ QUOTE ]
    Polish your knowledge of complex math and fourier transformations gentlemen, you're going to write your textures as formulas soon!


    [/ QUOTE ]

    i use procedural textures all the time for base textures, its not that complicated and there is no formulas involved what so ever. it all comes down to tools. darktree is a perfect example of this, i just adjust a few sliders and i have no problem getting what i want. i use max's as well as blur's procedural textures quite frequently and i do it because its much faster to get the desiered result than painting. i have yet to use any math while doing a procedural shader or texture.
  • Richard Kain
    Options
    Offline / Send Message
    Richard Kain polycounter lvl 18
    I said that procedurals would be less useful on characters. It's quite true that they could be used on characters, no problem at all. But I just imagine that most artists would wnat greater control over their character's paint jobs. A character is supposed to have...well...character! And using mathematically generated textures would probably take away from that somewhat. A method for blending traditional texture painting and procedural texture generation could be a compromise between the two methods. (as described by some of the earlier posts) I just know that a lot of current level design uses tiled textures extensively. It occured to me that level design would more immediately benefit from procedurally generated textures. After all, characters are usually in motion, which makes it harder to see the pixels of their textures anyway. (as opposed to stationary walls, floors, and ceilings)

    This is still a budding technology, and won't find widespread use for some time yet. In my mind's eye, I'm imagining a game engine that works hand-in-hand with this sort of programming. Instead of rendering actual textures and loading them to memory, the engine will apply the textures to polygons at run time. It would determine the exact pixels that need to be drawn given the scene displayed. A kind of automatic culling and scaling for procedurally generated textures. As such, no actual 2D pixel images would be used at any point of the process. No painting, all pure math.

    I've actually thought up the exact same thing years ago, only using standard vector graphics as textures. I never understood why no one tried to to do this. Vector image formats are mathematically generated given vector curves and shapes. They have no actual pixel resolution, and scale infinitely large or small. Why not use them for texture maps instead of pixel images?
  • Mark Dygert
    Options
    Offline / Send Message
    Ironic, in some cases I use procedural textures, render to texture and then apply final texture that is just a defuse with the procedural baked into it (along with lighting and my original defuse).

    I don't see this replacing quality hand painted textures but a nice way to speed up certain areas no one really wants to texture anyway, hahaha. I'm sure it will be abused at first just like bloom, normal/spec maps are being screwed up more times than they are correctly used.
  • Black_Dog
    Options
    Offline / Send Message
    Black_Dog polycounter lvl 17
    [ QUOTE ]
    Vector image formats are mathematically generated given vector curves and shapes. They have no actual pixel resolution, and scale infinitely large or small. Why not use them for texture maps instead of pixel images?

    [/ QUOTE ]

    I don't think typical graphics cards accelerate that kind of thing. Software renderers do it already.
  • Richard Kain
    Options
    Offline / Send Message
    Richard Kain polycounter lvl 18
    That's true, typical graphic cards aren't designed with those sorts of hardware acceleration in mind. But I imagine that adapting them to that purpose would be easy. I'm pretty sure vector images are primarily comprised of floating point variables. And GPUs are designed specifically to accelerate the calculation of floating point variables. In fact, I'm pretty sure someone has already created a rendering engine that already does this for 2D vector graphics. (using the GPU to accelerate their rendering in real time)

    Now, naturally, there would be obvious drawbacks. There always are. The style of textures that could be used for this would be limited. It would be best for solid color blocks. Gradients would probably be possible, but not necessarily advisable. Textures generated in this fashion would likely always have a very "cartoony" look to them, and realism would almost be out of the question. So use of such an engine would limit the game stylistically. For some games that would be perfect, for others it would be a huge problem. Cel-shaded games, though, would benefit immensely from such a system.
  • Motz
    Options
    Offline / Send Message
    Motz polycounter lvl 12
    Kain,

    Actually procedural textures are great for characters. Beards, dynamic player controlled skin tones or entire skin shaders. You could make a 'dirt' texture layer that is dynamically grimed up if the player walks through mud, and conversely washes off in the rain. We are using a procedural layer for wetness on our models, and it actually moves downward untill dry, when they are out of a rain/water volume. Camo clothing texture for military games etc. It's all done after the base assets are done in my case, in a 3rd or 4rth pass if we have resources availible, but it is night and day when you have these small details.
  • Eric Chadwick
    Options
    Offline / Send Message
    I suspect at some point not too far from now we'll see hardware support for rendering renderman shaders in realtime. We've got it working now, but on the CPU, so not quite fast enough.
  • Richard Kain
    Options
    Offline / Send Message
    Richard Kain polycounter lvl 18
    Motz,

    Hmmmm...that really does sound like an excellent application. I had forgotten that procedurals also benefit from a greater degree of interactivity. Because they are mathematically generated, their properties can be altered or animated at run-time. Making various procedural layers that react in response to environmental conditions would look spectacular in-game. (the water drying effect you mention sounds kick-ass, can't wait to see some videos of it in action)

    Needless to say, this technology holds a lot of potential for the industry. Although its still in its infancy, it may not be long before it is a driving force in game development. It will be very interesting to see how it progresses and is used. (I wonder if DirectX10 will have any features that support it/make it easier)
  • HonkyPunch
    Options
    Offline / Send Message
    HonkyPunch polycounter lvl 18
    Bye bye hand painted textures, I knew thee well.
  • Asmuel
    Options
    Offline / Send Message
    Asmuel polycounter lvl 17
    Oh man yea that sounds awsome Motz
  • JKMakowka
    Options
    Offline / Send Message
    JKMakowka polycounter lvl 18
    And people are already complaining about all games looking the same in the current ("next-gen") generation... if this really becomes the norm be ready for a hole new LEVEL of "looking the same" (and in the beginning also probably very sterile and "that CG rendered" look).
  • rooster
    Options
    Offline / Send Message
    rooster mod
    well, depends on the tools doesn't it, and how many people are lazy and just tweak the example textures (or if its so difficult thats all people can do)
  • Motz
    Options
    Offline / Send Message
    Motz polycounter lvl 12
    JK, you can actually use real textures in a procedural formula. The rust instance fo example. It's faster to sample a rust texture and just generate the alpha map dynamically then say simulate every pixel of the rust. I would never use it for anything that is'nt inherintly random or mathmatical. I would never use it for wood, but maybe marble for instance. The whole point of procedural shaders, at least in my system, is to breakup already great static assets and give them some added uniqueness. Rooster is 100%, it depends on the methods used.
  • Lyr
    Options
    Offline / Send Message
    Lyr polycounter lvl 13
    Forget learning fourier transforms looks like this tech relies on wavelets, so understanding the continous wavelet transform and the discreet wavelet transform would probably be more useful for programmers.

    The key thing about this tech isn't procedural textures, but it's use of wavelets to create and I would assume (and hope) display the textures. From what I gather from looking at screenshots of thier authoring tool, it looks like it can take a bitmap and convert it into a CWT or DWT, search it for patterns then make it a repeating pattern, so in theory any bitmap can be made into a procedural. Finding a pattern in a signal isn't exactly the hardest thing in the world.

    The potential for this kind of technology is huge and it goes way beyond just texturing, unfortunately there are very few people who understand wavelets well enough to implement them in a practical way. Once they catch on it will change the computing world forever.

    oh wavelets also make mip-mapping obsolete.
  • Lyr
    Options
    Offline / Send Message
    Lyr polycounter lvl 13
    [ QUOTE ]
    It seems to me that this scheme is about pre-creating assets procedurally that will be "decompressed" and loaded into graphics memory as bitmaps, with the aim of reducing the size of games on disk. As such this has zero benefit over artist-painted bitmaps other than massively reduced disk space, unless I totally misunderstand the whole thing.

    Which is possible. confused.gif

    [/ QUOTE ]

    The chief benefit of using wavelet texture encoding is that all of your textures will only ever take up as much memory as your frame size so for instance at a resolution of 1920x1080 all of your textures combined will only take up a maximum of about 6.2mb of ram. However the hardware implementation of dxtc on on most video cards really gets in the way of pulling off an elegant texture wavelet encoding in realtime.

    Also you can encode handpainted textures as a wavelet, so it doesn't apply only to procedural textures.
Sign In or Register to comment.