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

node_blend_texture.osl « nodes « osl « kernel « cycles « intern - git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: de1bdaca90b369b39f28e6af80857c06b4cdc9c0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/*
 * Copyright 2011, Blender Foundation.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */

#include "stdosl.h"
#include "node_texture.h"

/* Blend */

float blend(point p, string progression, string axis)
{
	float x, y;

	if(axis == "Vertical") {
		x= p[1];
		y= p[0];
	}
	else {
		x= p[0];
		y= p[1];
	}

	float result = 0.0;

	if(progression == "Linear") {
		result = (1.0 + x)/2.0;
	}
	else if(progression == "Quadratic") {
		float r = max((1.0 + x)/2.0, 0.0);
		result = r*r;
	}
	else if(progression == "Easing") {
		float r = min(max((1.0 + x)/2.0, 0.0), 1.0);
		float t = r*r;
		
		result = (3.0*t - 2.0*t*r);
	}
	else if(progression == "Diagonal") {
		result = (2.0 + x + y)/4.0;
	}
	else if(progression == "Radial") {
		result = atan2(y, x)/(2*M_PI) + 0.5;
	}
	else {
		float r = max(1.0 - sqrt(x*x + y*y + p[2]*p[2]), 0.0);

		if(progression == "Quadratic Sphere")
			result = r*r;
		else if(progression == "Spherical")
			result = r;
	}

	return result;
}

shader node_blend_texture(
	string Progression = "Linear",
	string Axis = "Horizontal",
	point Vector = P,
	output float Fac = 0.0)
{
	Fac = blend(Vector, Progression, Axis);
}