// original code obtained from https://www.shadertoy.com/view/lscyWr // by owmywrists 2018-02-13 // converted to osl #include "octane-oslintrin.h" vector xz(vector vec) { return vector(vec[0],vec[2], 0); } vector xy(vector vec) { return vector(vec[0], vec[1], 0); } vector vec2(float a, float b) { return vector(a,b,0); } vector frac(vector v) { return v - vector(floor(v[0]), floor(v[1]), floor(v[2])); } float fracf(float f) { return f - floor(v); } float planeSDF(vector p) { float w = 1.0 / sqrt(2); vector n = vector(0, w, 0); return dot(p, n) + w; } float displace(float d1,vector p, vector noise) { float d2 = noise[0]; return d1 + d2; } float sphereSDF(vector p, float r) { return length(p) -r; } float boxSDF(vector p, float size) { return length(max(abs(p)- vector(size),0.0)); } float repeat_sphere(vector p, vector c) { vector q = mod(p,c) - 0.5*c; return boxSDF(q, 7.0); } float smin(float a, float b, float k) { float res = exp(-k*a) + exp(-k*b); return -log(res)/k; } float sceneSDF(vector p, vector noise) { float terrain = displace(planeSDF(p), p, noise); return terrain; } #include "octane-oslintrin.h" shader OslGeometry( color noiseTex = color(1,1,1), color noiseTex2 = color(1,1,1), float noiseScale = 0.1, float noiseScale2 = 0.1, float timeScale = 1, output _sdf c = _SDFDEF) { color t = _evaluateDelayed(noiseTex, P[0] + time*timeScale, P[2]); color t2 = _evaluateDelayed(noiseTex2, P[0] + time*timeScale, P[2]); c.dist = sceneSDF(P,-1*(t*noiseScale+t2*noiseScale2)); c.u = P[0] + time*timeScale; c.v = P[2]; }