Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/cycles/kernel/osl/shaders/node_wave_texture.osl')
-rw-r--r--intern/cycles/kernel/osl/shaders/node_wave_texture.osl119
1 files changed, 119 insertions, 0 deletions
diff --git a/intern/cycles/kernel/osl/shaders/node_wave_texture.osl b/intern/cycles/kernel/osl/shaders/node_wave_texture.osl
new file mode 100644
index 00000000000..71d81dff7ec
--- /dev/null
+++ b/intern/cycles/kernel/osl/shaders/node_wave_texture.osl
@@ -0,0 +1,119 @@
+/*
+ * 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 "node_noise.h"
+#include "stdcycles.h"
+
+/* Wave */
+
+float wave(point p_input,
+ string type,
+ string bands_direction,
+ string rings_direction,
+ string profile,
+ float distortion,
+ float detail,
+ float dscale,
+ float droughness,
+ float phase)
+{
+ /* Prevent precision issues on unit coordinates. */
+ point p = (p_input + 0.000001) * 0.999999;
+
+ float n = 0.0;
+
+ if (type == "bands") {
+ if (bands_direction == "x") {
+ n = p[0] * 20.0;
+ }
+ else if (bands_direction == "y") {
+ n = p[1] * 20.0;
+ }
+ else if (bands_direction == "z") {
+ n = p[2] * 20.0;
+ }
+ else { /* diagonal */
+ n = (p[0] + p[1] + p[2]) * 10.0;
+ }
+ }
+ else if (type == "rings") {
+ point rp = p;
+ if (rings_direction == "x") {
+ rp *= point(0.0, 1.0, 1.0);
+ }
+ else if (rings_direction == "y") {
+ rp *= point(1.0, 0.0, 1.0);
+ }
+ else if (rings_direction == "z") {
+ rp *= point(1.0, 1.0, 0.0);
+ }
+ /* else: "spherical" */
+
+ n = length(rp) * 20.0;
+ }
+
+ n += phase;
+
+ if (distortion != 0.0) {
+ n = n + (distortion * (fractal_noise(p * dscale, detail, droughness) * 2.0 - 1.0));
+ }
+
+ if (profile == "sine") {
+ return 0.5 + 0.5 * sin(n - M_PI_2);
+ }
+ else if (profile == "saw") {
+ n /= M_2PI;
+ return n - floor(n);
+ }
+ else { /* profile tri */
+ n /= M_2PI;
+ return abs(n - floor(n + 0.5)) * 2.0;
+ }
+}
+
+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 wave_type = "bands",
+ string bands_direction = "x",
+ string rings_direction = "x",
+ string profile = "sine",
+ float Scale = 5.0,
+ float Distortion = 0.0,
+ float Detail = 2.0,
+ float DetailScale = 1.0,
+ float DetailRoughness = 0.5,
+ float PhaseOffset = 0.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,
+ wave_type,
+ bands_direction,
+ rings_direction,
+ profile,
+ Distortion,
+ Detail,
+ DetailScale,
+ DetailRoughness,
+ PhaseOffset);
+ Color = Fac;
+}