Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //OSL Projection node for OctaneRender 3.08/4 and above//
- //Random position scale and rotation uvs for scattered objects, by Beppe Gullotta//
- //Use a Random Color Texture node in the RandomColorTex pin to drive the changes //
- shader BGrandomUVproj(
- color rndm = 0 [[string label = "RandomColorTex",]],
- float offset_multiplay = 2 [[float min = 0, float slidermax = 10, float sliderexponent = 1, string label = "Offset",]],
- float scale_factor = 0 [[float min = 0, float slidermax = 10, float sliderexponent = 4, string label = "Scale Factor",]],
- float scale_multiplay = 1 [[float min = 0.01, float slidermax = 10, float sliderexponent = 4, string label = "Scale Multiply",]],
- float angle = 0 [[float min = 0, float slidermax = 360, float sliderexponent = 4, string label = "Rotation Angle",]],
- int EqRot = 0 [[string widget="checkBox", string label = "90° Rotation",]],
- int FlipX = 0 [[string widget="checkBox", string label = "Flip X",]],
- int FlipY = 0 [[string widget="checkBox", string label = "Flip Y",]],
- int FlipSinc = 0 [[string widget="checkBox", string label = "Flip Sincro",]],
- output point uvw = 0,)
- {
- //Scaling
- u = u/(scale_multiplay+rndm[0]*scale_factor);
- v = v/(scale_multiplay+rndm[0]*scale_factor);
- //Flip axis
- if (FlipX == 1 && rndm[0] < 0.5) { u = -u; }
- if (FlipY == 1 && FlipSinc == 0 && rndm[0] > 0.5) { v = -v; }
- if (FlipY == 1 && FlipSinc == 1 && rndm[0] < 0.5) { v = -v; }
- //Sign
- color signR = 0;
- if (rndm[0] < 0.5) {signR[0] = rndm[0]*-1;}
- if (rndm[0] > 0.5) {signR[0] = rndm[0];}
- //Offset
- point p = point (u + signR[0]*offset_multiplay, v + signR[0]*offset_multiplay, 0);
- //Rotation
- point p1 = point(0.5, 0.5, 0);
- point p2 = point(0.5, 0.5, 1);
- point rotatedST = rotate(p, radians(angle*signR[0]), p1, p2);
- //90° Rotation
- if (EqRot == 1 && angle == 0) {
- if (rndm[0] < 0.25) { rotatedST = rotate(p, radians(0), p1, p2); }
- if (rndm[0] > 0.25 && rndm[0] < 0.50) { rotatedST = rotate(p, radians(90), p1, p2); }
- if (rndm[0] > 0.50 && rndm[0] < 0.75) { rotatedST = rotate(p, radians(180), p1, p2); }
- if (rndm[0] > 0.75) { rotatedST = rotate(p, radians(270), p1, p2); }
- }
- if (EqRot == 1 && angle > 0) {
- if (rndm[0] < 0.25) { rotatedST = rotate(p, radians(0+angle*signR[0]), p1, p2); }
- if (rndm[0] > 0.25 && rndm[0] < 0.50) { rotatedST = rotate(p, radians(90+angle*signR[0]), p1, p2); }
- if (rndm[0] > 0.50 && rndm[0] < 0.75) { rotatedST = rotate(p, radians(180+angle*signR[0]), p1, p2); }
- if (rndm[0] > 0.75) { rotatedST = rotate(p, radians(270+angle*signR[0]), p1, p2); }
- }
- //END
- uvw = rotatedST;
- }
Advertisement
Add Comment
Please, Sign In to add comment