I've been working on a glsl shader to use SVG-like vector images instead of textures… It works by checking to see if each pixel is in a shape.
So far I've just got shader code for basic shapes:
- Rectangle
- Ellipse
- Triangle
- Rounded Rectangle
Currently working on the curve.. Instead of interpolating points into triangles, I'm transforming a curve into a circle for the shape inclusion test.
Things to do:
- Convert polygon data into triangles, use boolean intersection to remove curve volume
- Parse SVG to internal format
- Save within texture as bytecode and data
- Parse from texture and run bytecode for each pixel
- Add support for transformations
- Add support for texturing with mini tileable units
- Add support for gradients.
- Use multiple program textures for different objects but use the same render pass.
WHY?!
-
I would like to see clearer textures when close. Last attempt used batik to render SVG to texture was slow and memory intensive.
-
We could use this for splatting textures of variable resolutions, so say, a car door could have a pretty boring low-res fill, but maybe a higher resolution bullet-hole.
-
We could blend textures with gradients.
-
We could outline prominent features on textures.
-
We could potentially remove detail at distance based on pixel depth, transition, or switch to different LOD.
-
We could use this on text characters.
I don't currently intend to get into the interactable side of the SVG spec, mainly because the method I am using for curves currently needs to be pre-processed..
Some random dev photos:
http://picasaweb.google.com/116639945398351924659/VectorTextures?feat=directlink