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:
authorAlexander Gavrilov <angavrilov@gmail.com>2022-02-08 14:12:30 +0300
committerAlexander Gavrilov <angavrilov@gmail.com>2022-02-08 14:37:25 +0300
commit460d1a4cb36a6ae222721a9721c627292fdd77ec (patch)
tree67796d16336ac1860f5762c1bea75eba97c156b8 /source/blender/nodes
parent3267c91b4d5caab7da8aef071a446dd2e86f86a9 (diff)
Eevee: support the no-op Bump node optimization like in Cycles.
A Bump node without a Height input is meaningless and does nothing. As such, it is available as an old workaround that allows making Node Group inputs that default to normal when not connected, by routing via a no-op Bump node before doing math. Cycles specifically recognizes this use case and either bypasses the node, or converts it into a Geometry Normal node, but Eevee was still evaluating it as usual. That incurred performance cost, and also normalized the vector unlike Cycles. This implements the same bypass logic for Eevee. Since I'm not sure if it's possible to totally remove the node at this stage, it emits a no-op function call to copy the input vector. Differential Revision: https://developer.blender.org/D14045
Diffstat (limited to 'source/blender/nodes')
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_bump.cc11
1 files changed, 11 insertions, 0 deletions
diff --git a/source/blender/nodes/shader/nodes/node_shader_bump.cc b/source/blender/nodes/shader/nodes/node_shader_bump.cc
index 252abd02ad7..690eacf30ff 100644
--- a/source/blender/nodes/shader/nodes/node_shader_bump.cc
+++ b/source/blender/nodes/shader/nodes/node_shader_bump.cc
@@ -60,6 +60,17 @@ static int gpu_shader_bump(GPUMaterial *mat,
GPUNodeStack *in,
GPUNodeStack *out)
{
+ /* If there is no Height input, the node becomes a no-op. */
+ if (!in[2].link) {
+ if (!in[5].link) {
+ return GPU_link(mat, "world_normals_get", &out[0].link);
+ }
+ else {
+ /* Actually running the bump code would normalize, but Cycles handles it as total no-op. */
+ return GPU_link(mat, "vector_copy", in[5].link, &out[0].link);
+ }
+ }
+
if (!in[5].link) {
GPU_link(mat, "world_normals_get", &in[5].link);
}