/* * Copyright 2011-2013 Blender Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License */ #include "stdosl.h" #include "node_texture.h" /* Wave */ float wave(point p, float scale, string type, float detail, float distortion, float dscale) { float x = p[0] * scale; float y = p[1] * scale; float z = p[2] * scale; float n = 0.0; if (type == "Bands") { n = (x + y + z) * 10.0; } else if (type == "Rings") { n = (sqrt(x * x + y * y + z * z) * 20.0); } if (distortion != 0.0) { n = n + (distortion * noise_turbulence(p * dscale, "Perlin", detail, 0)); } return 0.5 + 0.5 * sin(n); } shader node_wave_texture( int use_mapping = 0, matrix mapping = matrix(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), string Type = "Bands", float Scale = 5.0, float Distortion = 0.0, float Detail = 2.0, float DetailScale = 1.0, point Vector = P, output float Fac = 0.0, output color Color = 0.0) { point p = Vector; if (use_mapping) p = transform(mapping, p); Fac = wave(p, Scale, Type, Detail, Distortion, DetailScale); Color = Fac; }