Commit: 1fe9c29e9955c75b710c71a88f9326e48cb1ae36
Author: OmarSquircleArt
Date: Sat Aug 3 18:24:48 2019 +0200
Branches: soc-2019-cycles-procedural
https://developer.blender.org/rB1fe9c29e9955c75b710c71a88f9326e48cb1ae36
Fix Vector Math Backward compatibility. Update cross product operator.
===================================================================
M source/blender/blenloader/intern/versioning_cycles.c
===================================================================
diff --git a/source/blender/blenloader/intern/versioning_cycles.c
b/source/blender/blenloader/intern/versioning_cycles.c
index 57901db558c..a002c6a6ee0 100644
--- a/source/blender/blenloader/intern/versioning_cycles.c
+++ b/source/blender/blenloader/intern/versioning_cycles.c
@@ -616,6 +616,73 @@ static void update_vector_dot_product_operator(bNodeTree
*ntree)
}
}
+/* Previously, the Vector output of the cross product operator was normalized.
+ * To correct this, a Normalize node is added to normalize the output if used.
+ * Moreover, the Value output was removed. This Value was equal to the length
+ * of the cross product. To correct this, a Length node is added.
+ */
+static void update_vector_cross_product_operator(bNodeTree *ntree)
+{
+ bool need_update = false;
+
+ for (bNode *node = ntree->nodes.first; node; node = node->next) {
+ if (node->type == SH_NODE_VECTOR_MATH) {
+ if (node->custom1 == NODE_VECTOR_MATH_CROSS_PRODUCT) {
+ bNodeSocket *sockOutVector = nodeFindSocket(node, SOCK_OUT, "Vector");
+ if (socket_is_used(sockOutVector)) {
+ bNode *normalizeNode = nodeAddStaticNode(NULL, ntree,
SH_NODE_VECTOR_MATH);
+ normalizeNode->custom1 = NODE_VECTOR_MATH_NORMALIZE;
+ normalizeNode->locx = node->locx + node->width + 20.0f;
+ normalizeNode->locy = node->locy;
+ bNodeSocket *sockNormalizeOut = nodeFindSocket(normalizeNode,
SOCK_OUT, "Vector");
+
+ /* Iterate backwards from end so we don't encounter newly added
links. */
+ for (bNodeLink *link = ntree->links.last; link; link = link->prev) {
+ if (link->fromsock == sockOutVector) {
+ nodeAddLink(ntree, normalizeNode, sockNormalizeOut,
link->tonode, link->tosock);
+ nodeRemLink(ntree, link);
+ }
+ }
+ bNodeSocket *sockNormalizeA = nodeFindSocket(normalizeNode, SOCK_IN,
"A");
+ nodeAddLink(ntree, node, sockOutVector, normalizeNode,
sockNormalizeA);
+
+ need_update = true;
+ }
+
+ bNodeSocket *sockOutValue = nodeFindSocket(node, SOCK_OUT, "Value");
+ if (socket_is_used(sockOutValue)) {
+ bNode *lengthNode = nodeAddStaticNode(NULL, ntree,
SH_NODE_VECTOR_MATH);
+ lengthNode->custom1 = NODE_VECTOR_MATH_LENGTH;
+ lengthNode->locx = node->locx + node->width + 20.0f;
+ if (socket_is_used(sockOutVector)) {
+ lengthNode->locy = node->locy - lengthNode->height - 20.0f;
+ }
+ else {
+ lengthNode->locy = node->locy;
+ }
+ bNodeSocket *sockLengthOut = nodeFindSocket(lengthNode, SOCK_OUT,
"Value");
+
+ /* Iterate backwards from end so we don't encounter newly added
links. */
+ for (bNodeLink *link = ntree->links.last; link; link = link->prev) {
+ if (link->fromsock == sockOutValue) {
+ nodeAddLink(ntree, lengthNode, sockLengthOut, link->tonode,
link->tosock);
+ nodeRemLink(ntree, link);
+ }
+ }
+ bNodeSocket *sockLengthA = nodeFindSocket(lengthNode, SOCK_IN, "A");
+ nodeAddLink(ntree, node, sockOutVector, lengthNode, sockLengthA);
+
+ need_update = true;
+ }
+ }
+ }
+ }
+
+ if (need_update) {
+ ntreeUpdateTree(NULL, ntree);
+ }
+}
+
void blo_do_versions_cycles(FileData *UNUSED(fd), Library *UNUSED(lib), Main
*bmain)
{
/* Particle shape shared with Eevee. */
@@ -776,6 +843,7 @@ void do_versions_after_linking_cycles(Main *bmain)
update_math_clamp_option(ntree);
update_vector_add_and_subtract_operators(ntree);
update_vector_dot_product_operator(ntree);
+ update_vector_cross_product_operator(ntree);
}
}
FOREACH_NODETREE_END;
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs