Posts

Showing posts with the label fract

OSL - simple UV things and frac fract alternative

Here is a shoddy OSL shader that follow on from some of my GLSL experiments of yesteryear. I couldn't seem to find a frac or fract  function, but fmod-ing (it's like modulo) against 1 does the same thing. I don't put any input parameters in this shader. EDIT - just saw someone else's code that use x-floor(x) for fract, which could be faster..who knows! Variables Lame an Cat are assigned to u and v, I then multiply them by different values and fmod them so they repeat 3 and 4 times. It seems like u and v will be taken automatically, which is nice. After that I do a bit of if statement colour assignment.   shader use_uv(output color resultRGB = 0) {      float lame=u;      float cat=v;      cat=fmod(v*3,1);      lame=fmod(u*4,1);      resultRGB = color(lame, v, 1);      if(lame>0.5){      resultRGB+=color(0.3,0.4,0); } if(v<0.1){      resultRGB+=color(0...

kodelife/glsl drawing a circle (sdf)

 Below is the main function for drawing a circle. Let's go through the important parts of the code. Firstly vec2 uv =inData.v_texcoord-0.5; we subtract 0.5 from the uv vector so that we get the 0 value in the centre. (by default 0 is at the bottom left corner) vec2 gv=fract(uv*5)-0.5; We copy the pattern across by multiplying the uv. By using fract we get the fractional values that exist within each smaller uv space. The 0.5 subtraction is to shift the 0 point back to the centre - the fract values will run from 0 to 1 otherwise. Next up, the circle float d=length(gv); float r=0.3; float m=smoothstep(r,r*0.4,d); Here we calculate the distance a pixel is from the centre (now set correctly because of the -0.5 above), by using the length function. We then define our desired circle radius as "r" & give it a value. Next, we use a smoothstep of r & a slightly smaller r, testing against the pixel's distance, to see if it is within the circle or not. This value is stor...