Well, when i should have been fixing bugs, adding long-requested features, and replying to emails, I've instead been working on a shader language for Indigo!
*begs forgiveness from exporter writers*
The language is a simple little strongly typed, pure functional language.
It's currently interpreted by a stack-based bytecode VM I hacked up.
I looked around at a few existing languages / VMs, but none of them provided quite what i wanted, or had too much overhead, so I decided to roll my own. Perhaps I'll switch to an existing language later, we'll see.
So here's an example shader used on a diffuse material:
Code: Select all
<material>
<name>mat1</name>
<diffuse>
<colour>0.7 0.7 0.7</colour>
<albedo_texture>
<uv_set>albedo</uv_set>
<path>colorchecker_srgb_from_ref.jpg</path>
<exponent>2.2</exponent>
</albedo_texture>
<albedo_shader>
<![CDATA[
def rgbAlbedo(vec3 pos, vec2 uv) vec3 :
sample2DTextureVec3(
0,
add(
getTexCoords(0, uv),
vec2(fbm(pos, 10))
)
)
]]>
</albedo_shader>
</diffuse>
</material>
http://fatalfantasy6.deviantart.com/art ... 2-89539933
It uses a fractal Brownian motion function to perturb the texture coordinates. (good for making procedural marble

You will be able to write shaders for any material parameter, also for displacement.
Thoughts, ideas, requests, etc..?