beep

osl floor planks

Nov 10th, 2019
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.70 KB | None | 0 0
  1. #include <octane-oslintrin.h>
  2.  
  3. shader Laminate(
  4. color plank1 = .3,
  5. color plank2 = color(0, 0, 1),
  6. color plank3 = color(0, 1, 0),
  7. color plank4 = color(0, 1, 1),
  8. color plank5 = color(1, 0, 0),
  9. color plank6 = color(1, 0, 1),
  10. color plank7 = color(1, 1, 0),
  11. color plank8 = 1,
  12. color plank9 = .1,
  13. float plankAspect = 5 [[float min = .01, float max=100, float sliderexponent=3]],
  14. matrix Transform = .25,
  15. point Projection = point(u, v, 0) [[string inputType = "projection"]],
  16. output color c = 0)
  17. {
  18. int AMOUNT = 9;
  19. // use the projection and transform inputs
  20. point p = transform(1/Transform, Projection);
  21. float y = p[1] * plankAspect;
  22. // random offset for each row
  23. float x = p[0] + noise("cell", y, 0);
  24. // random plank and orientation for each cell
  25. float rnd = noise("cell", x, y) * AMOUNT;
  26. int flip = (rnd - floor(rnd)) < .5;
  27. // make UV mapping per cell and evaluate the right texture
  28. float plU = x - floor(x);
  29. float plV = y - floor(y);
  30. if (flip)
  31. {
  32. plU = 1 - plU;
  33. plV = 1 - plV;
  34. }
  35. if (rnd < 1) { c = _evaluateDelayed(plank1, plU, plV); }
  36. else if (rnd < 2) { c = _evaluateDelayed(plank2, plU, plV); }
  37. else if (rnd < 3) { c = _evaluateDelayed(plank3, plU, plV); }
  38. else if (rnd < 4) { c = _evaluateDelayed(plank4, plU, plV); }
  39. else if (rnd < 5) { c = _evaluateDelayed(plank5, plU, plV); }
  40. else if (rnd < 6) { c = _evaluateDelayed(plank6, plU, plV); }
  41. else if (rnd < 7) { c = _evaluateDelayed(plank7, plU, plV); }
  42. else if (rnd < 8) { c = _evaluateDelayed(plank8, plU, plV); }
  43. else { c = _evaluateDelayed(plank9, plU, plV); }
  44. }
Advertisement
Add Comment
Please, Sign In to add comment