So, I have been doing some research on procedural textures and found out that they are resolution independent (maths based). Raster based images have a lot of limitations especially when it comes to resolution. I am surprised that by now, there isn’t some texture based format that has the raster look and is not resolution dependent.
The question is why are vector image textures(svg files) not being used as textures for cg assets. Apart from the look, is there a downside on the technical or performance side.
Blender internal had support for SVG textures (at least experimentally) a while back. From what I recall, only a handful of folks had an interest in actually using that feature… and vector art is more computationally expensive than raster art.
I don’t think it is hard to edit. There are apps that handle vector very easily and can even convert raster to vector. As for slower to render, that is better than having to deal with low resolution that plagues raster images. For offline renderers, vector image textures shouldn’t be a problem as resolution independence means you can render out at any resolution.
I have used Flash and inkscape and this handles vector based images well. Even opentoonz has vector based tools.
Nowadays, artists are making use of procedural textures which are resolution independent (math based) like svg files and they work well in renderers. Raster images should be old school by now. Why there isn’t more extensive research for resolution independent images and it’s use in CG is mind boggling. Are we still going to be using raster based images with very large image size and file sizes in the next 10 years?
Currently, vector images are only problematic for game engines when it comes to frame rate since most game engines are designed from the ground up to work with raster images so some time will be spent rastering the vector images and that would affect performance.This would not be the case if a game engine is designed with vector images from the ground up. I don’t think there is any vector based image texture designed game engine.
Pls feel free to read through these threads to the end if you can spare the time:
A experimentation project done with Blender and vector textures before it got discontinued:
Discussion of vector textures and advantages of its use:
Every workflow has its downsides and I think vector maps could play a bigger role especially in CG. Procedural textures are already being used so why not make it possible for svg files to be added as textures? Cycles already supports procedural textures.
It would be nice to hear from a dev what the possibilities are. Any insight provided will be helpful.
If Autodesk did not see the need for this. They wouldn’t have added this to 3dsmax. Procedural textures are becoming mainstream especially for environmental assets/ archviz so I see no reason why vector map textures can’t be added for Blender cycles and eevee.
That is basically what substances are. Except substances are procedural to boot. Substance SDK however is proprietary. Would be interesting to have an open source alternative, sure. Cycles is released under the Apache Public License and the nodes can be used to basically build same sort of schemes/graphs like substance does. Taking cycles as a basis and creating a fork that basically throws out all the shaders other than the emission and building a UI using something like Qt should be quite doable.
Thanks for thr input, Felix. Does this mean vector image maps as textures for Blender cannot be created for master version but can only work as a fork and a separate branch.
As a plugin, can it work with the main blender version currently?
It’s not only the game engines, it’s also the hardware acceleration. GPUs support fast image texture access and filtering. There is basically no real benefit from using anything completely procedural or even vector based in production renderings.
The most obvious benefit of image textures is speed. Just do a quick array access, some filtering, done. For vector or procedural textures you need to do a lot of math. If you evaluate them at runtime, the speed cost gets quite high very soon. A more complex Substance Graph takes for examples multiple seconds to bake to a 1k texture. Let’s just assume that you can do it independently from other pixels (and that’s a wrong assumption), it still needs more than a micro second to calculate a texel. That’s incredible expensive, if you need to do it for a lot of raytracing samples.
Second is (for procedurally created texture) that a exclusive random access at unlimited resolution limits you to a smaller set of operations (or gets incredible expensive). One thing that makes Substance so powerfull are the blur, warp and slope blur nodes. But all of them need to access neighbouring pixels. Substance basically stores the intermediate results as image textures, too.
Third one is filtering. Game Engines use MipMaps and even most raytracers use some texture filtering techniques. Without them, a texture would become a noisy area of almost random pixels, if you look at them from some distance. While doing prefiltering like mipmaps is almost trivial for image textures, it is almost impossible for procedural or vector textures.
Fourth one is implementation complexity. You want to keep it as stupid and simple as possible and don’t want to bloat your code with almost unused features. Vector Texture evaluation at reasonable performance is quite hard to code. You also have to keep in mind that GPU rendering might gets slower, if you add more code/complexity to it.
For me vector and procedural textures are great for content creation of certain use cases. But for rendering you always want to bake them out as images.
But well, Blender is open source, if you think it is a doable and useful thing, feel free to implement it. I promise you, it will be a struggle, even if you are an experienced programmer.
Yeah, cashing system would be needed for the procedural materials. I was about to edit my previous post after writing it and add that line but also wanted to keep it simple. Also: actually accessing at unlimited resolution - that would be insane(and I don’t mean good).
Thanks for the info, guys. From what you both have said, I have learnt a lot. I would suggest that vector textures should still be added. As procedural textures seems to be gaining ground in architectural visualization which is my field. We can render just a still image for 5 hours plus if need be.
The question is if the Blender devs have any plans of adding this.
For archviz animation, render farms are used.
You guys have given me an idea. if this is added, maybe an option to bake to raster map feature to speed up rendering after adding this texture if there is need for it:
Maybe also the ability to paint vector image textures directly on 3d models.
I don’t just get why it was discontinued simply because a lesser amount of people use it. 3dsmax has this implemented.
Blender Internal used to have texture plugins where the renderer would basically stop and let you do anything (like loading files from disk) for a texture sample. In the case of Vectex, that meant generating bitmap tiles (if it wasn’t cached) to sample from. Raytracing arbitrary vector graphics directly (without conversion) isn’t really practical.