Blender  V3.3
bump.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: Apache-2.0
2  * Copyright 2011-2022 Blender Foundation */
3 
4 #pragma once
5 
7 
8 /* Bump Eval Nodes */
9 
12  ccl_private float *stack,
13  uint offset)
14 {
15  /* save state */
16  stack_store_float3(stack, offset + 0, sd->P);
17  stack_store_float3(stack, offset + 3, sd->dP.dx);
18  stack_store_float3(stack, offset + 6, sd->dP.dy);
19 
20  /* set state as if undisplaced */
22 
23  if (desc.offset != ATTR_STD_NOT_FOUND) {
24  differential3 dP;
25  float3 P = primitive_surface_attribute_float3(kg, sd, desc, &dP.dx, &dP.dy);
26 
27  object_position_transform(kg, sd, &P);
28  object_dir_transform(kg, sd, &dP.dx);
29  object_dir_transform(kg, sd, &dP.dy);
30 
31  const float dP_radius = differential_make_compact(dP);
32 
33  sd->P = P;
34  make_orthonormals(sd->Ng, &sd->dP.dx, &sd->dP.dy);
35  sd->dP.dx *= dP_radius;
36  sd->dP.dy *= dP_radius;
37  }
38 }
39 
42  ccl_private float *stack,
43  uint offset)
44 {
45  /* restore state */
46  sd->P = stack_load_float3(stack, offset + 0);
47  sd->dP.dx = stack_load_float3(stack, offset + 3);
48  sd->dP.dy = stack_load_float3(stack, offset + 6);
49 }
50 
unsigned int uint
Definition: BLI_sys_types.h:67
ccl_device_noinline void svm_node_leave_bump_eval(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, uint offset)
Definition: bump.h:40
CCL_NAMESPACE_BEGIN ccl_device_noinline void svm_node_enter_bump_eval(KernelGlobals kg, ccl_private ShaderData *sd, ccl_private float *stack, uint offset)
Definition: bump.h:10
#define ccl_private
Definition: cuda/compat.h:48
#define ccl_device_noinline
Definition: cuda/compat.h:40
#define CCL_NAMESPACE_END
Definition: cuda/compat.h:9
const KernelGlobalsCPU *ccl_restrict KernelGlobals
ccl_device_forceinline float differential_make_compact(const differential3 D)
Definition: differential.h:117
ccl_gpu_kernel_postfix ccl_global float int int int int float bool int offset
ccl_device_inline AttributeDescriptor find_attribute(KernelGlobals kg, ccl_private const ShaderData *sd, uint id)
ccl_device_inline void object_position_transform(KernelGlobals kg, ccl_private const ShaderData *sd, ccl_private float3 *P)
ccl_device_inline void object_dir_transform(KernelGlobals kg, ccl_private const ShaderData *sd, ccl_private float3 *D)
ccl_device_inline void stack_store_float3(ccl_private float *stack, uint a, float3 f)
CCL_NAMESPACE_BEGIN ccl_device_inline float3 stack_load_float3(ccl_private float *stack, uint a)
@ ATTR_STD_NOT_FOUND
Definition: kernel/types.h:647
@ ATTR_STD_POSITION_UNDISPLACED
Definition: kernel/types.h:623
ShaderData
Definition: kernel/types.h:925
static float P(float k)
Definition: math_interp.c:25
ccl_device_forceinline float3 primitive_surface_attribute_float3(KernelGlobals kg, ccl_private const ShaderData *sd, const AttributeDescriptor desc, ccl_private float3 *dx, ccl_private float3 *dy)
Definition: primitive.h:83
ccl_device_inline void make_orthonormals(const float3 N, ccl_private float3 *a, ccl_private float3 *b)
Definition: util/math.h:566