normal Displace (normal dir; float amp; float truedisp;) { extern point P; float spacescale = length(vtransform("shader", dir)); vector Ndisp = dir * (amp / max(spacescale,1e-6)); P += truedisp * Ndisp; return normalize (calculatenormal (P + (1-truedisp)*Ndisp)); } displacement rockydisplace ( float Amplitude=0.20; float stucco_power2=7.67; float stucco_freq2=2.10; float Granite_freq5=1.00; point PP3=point "shader" (0.0,0.0,0.0); float octaves3=6; float freq3=2; float TrueDisplacement=1; ) { /*** stucco pattern code ***/ float magnitude2; point PP2; PP2 = transform ("shader", P); magnitude2 = pow (noise(PP2 * stucco_freq2), stucco_power2); /*** Granite pattern code ***/ point PP5; float sum5 = 0; float i5, freq5 = 1; PP5 = transform("shader", P) * Granite_freq5; for(i5 = 0; i5 < 6; i5 = i5 + 1) { #pragma nolint sum5 = sum5 + abs(.5 - noise(PP5+4*freq5*I))/freq5; freq5 *= Granite_freq5 * 2; } /** Turbulence_Brick_3 **/ point temp_PP3=0; if (PP3==point(0.0,0.0,0.0)) temp_PP3=P; temp_PP3=transform("shader",P); uniform float i3; float size3,sum3; sum3 = 0; size3 = 1; for (i3=0;i3