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:
authorCharlie Jolly <charlie>2021-03-23 12:21:56 +0300
committerCharlie Jolly <mistajolly@gmail.com>2021-03-23 12:59:20 +0300
commitd3758892987d76749fdf1211ed27ff77f39b5b3b (patch)
tree0e0b6b2a614b9829255cae77fb75f93696e7df7b /intern/cycles/kernel/shaders
parent4c19fcacc0b71271ca2fafc87ef5772a819e7075 (diff)
Nodes: Add Refract and Faceforward functions to Vector Maths nodes
Cycles, Eevee, OSL, Geo, Attribute Based on outdated refract patch D6619 by @cubic_sloth `refract` and `faceforward` are standard functions in GLSL, OSL and Godot shader languages. Adding these functions provides Blender shader artists access to these standard functions. Reviewed By: brecht Differential Revision: https://developer.blender.org/D10622
Diffstat (limited to 'intern/cycles/kernel/shaders')
-rw-r--r--intern/cycles/kernel/shaders/node_math.h7
-rw-r--r--intern/cycles/kernel/shaders/node_vector_math.osl6
2 files changed, 13 insertions, 0 deletions
diff --git a/intern/cycles/kernel/shaders/node_math.h b/intern/cycles/kernel/shaders/node_math.h
index 3a008721d5e..2da73b94212 100644
--- a/intern/cycles/kernel/shaders/node_math.h
+++ b/intern/cycles/kernel/shaders/node_math.h
@@ -88,6 +88,13 @@ point wrap(point value, point max, point min)
wrap(value[2], max[2], min[2]));
}
+/* Built in OSL faceforward is `(dot(I, Nref) > 0) ? -N : N;` which is different to
+ * GLSL `dot(Nref, I) < 0 ? N : -N` for zero values. */
+point compatible_faceforward(point vec, point incident, point reference)
+{
+ return dot(reference, incident) < 0.0 ? vec : -vec;
+}
+
matrix euler_to_mat(point euler)
{
float cx = cos(euler[0]);
diff --git a/intern/cycles/kernel/shaders/node_vector_math.osl b/intern/cycles/kernel/shaders/node_vector_math.osl
index 30f0b1daf4c..3963c23ea9c 100644
--- a/intern/cycles/kernel/shaders/node_vector_math.osl
+++ b/intern/cycles/kernel/shaders/node_vector_math.osl
@@ -46,6 +46,12 @@ shader node_vector_math(string math_type = "add",
else if (math_type == "reflect") {
Vector = reflect(Vector1, normalize(Vector2));
}
+ else if (math_type == "refract") {
+ Vector = refract(Vector1, normalize(Vector2), Scale);
+ }
+ else if (math_type == "faceforward") {
+ Vector = compatible_faceforward(Vector1, Vector2, Vector3);
+ }
else if (math_type == "dot_product") {
Value = dot(Vector1, Vector2);
}