Blender
V4.5
intern
cycles
kernel
osl
services_shared.h
Go to the documentation of this file.
1
/* SPDX-FileCopyrightText: 2025 Blender Foundation
2
*
3
* SPDX-License-Identifier: Apache-2.0 */
4
5
/* Shared functions between OSL on CPU and GPU. */
6
7
#pragma once
8
9
#include "
kernel/geom/motion_triangle.h
"
10
#include "
kernel/geom/triangle.h
"
11
12
CCL_NAMESPACE_BEGIN
13
14
/* TODO: deduplicate function `set_attribute_float3()` in CPU and GPU. */
15
16
ccl_device
bool
attribute_bump_map_normal
(
KernelGlobals
kg,
17
ccl_private
const
ShaderData *sd,
18
float3
f[3])
19
{
20
if
(!(sd->type &
PRIMITIVE_TRIANGLE
) || !(sd->shader &
SHADER_SMOOTH_NORMAL
)) {
21
/* TODO: implement for curve. */
22
return
false
;
23
}
24
25
const
bool
backfacing = (sd->flag &
SD_BACKFACING
);
26
27
/* Fallback when the smooth normal is zero. */
28
float3
Ng = backfacing ? -sd->Ng : sd->Ng;
29
object_inverse_normal_transform
(kg, sd, &Ng);
30
31
if
(sd->type ==
PRIMITIVE_TRIANGLE
) {
32
f[0] =
triangle_smooth_normal
(kg, Ng, sd->prim, sd->u, sd->v, sd->du, sd->dv, f[1], f[2]);
33
}
34
else
{
35
assert
(sd->type &
PRIMITIVE_MOTION_TRIANGLE
);
36
f[0] =
motion_triangle_smooth_normal
(
37
kg, Ng, sd->object, sd->prim, sd->time, sd->u, sd->v, sd->du, sd->dv, f[1], f[2]);
38
}
39
40
if
(sd->object_flag &
SD_OBJECT_TRANSFORM_APPLIED
) {
41
/* Transform to local space. */
42
object_inverse_normal_transform
(kg, sd, f);
43
object_inverse_normal_transform
(kg, sd, f + 1);
44
object_inverse_normal_transform
(kg, sd, f + 2);
45
}
46
47
if
(backfacing) {
48
f[0] = -f[0];
49
f[1] = -f[1];
50
f[2] = -f[2];
51
}
52
53
f[1] -= f[0];
54
f[2] -= f[0];
55
56
return
true
;
57
}
58
59
CCL_NAMESPACE_END
ccl_device
#define ccl_device
ccl_private
#define ccl_private
KernelGlobals
const ThreadKernelGlobalsCPU * KernelGlobals
Definition
device/cpu/globals.h:92
CCL_NAMESPACE_END
#define CCL_NAMESPACE_END
Definition
device/cuda/compat.h:10
triangle.h
triangle_smooth_normal
ccl_device_inline float3 triangle_smooth_normal(KernelGlobals kg, const float3 Ng, const int prim, const float u, float v)
Definition
geom/triangle.h:107
assert
#define assert(assertion)
Definition
gpu_glsl_cpp_stubs.hh:31
object_inverse_normal_transform
ccl_device_inline void object_inverse_normal_transform(KernelGlobals kg, const ccl_private ShaderData *sd, ccl_private float3 *N)
Definition
kernel/geom/object.h:167
SD_BACKFACING
@ SD_BACKFACING
Definition
kernel/types.h:999
PRIMITIVE_MOTION_TRIANGLE
@ PRIMITIVE_MOTION_TRIANGLE
Definition
kernel/types.h:814
PRIMITIVE_TRIANGLE
@ PRIMITIVE_TRIANGLE
Definition
kernel/types.h:806
SHADER_SMOOTH_NORMAL
@ SHADER_SMOOTH_NORMAL
Definition
kernel/types.h:597
SD_OBJECT_TRANSFORM_APPLIED
@ SD_OBJECT_TRANSFORM_APPLIED
Definition
kernel/types.h:1083
motion_triangle.h
motion_triangle_smooth_normal
ccl_device_inline float3 motion_triangle_smooth_normal(KernelGlobals kg, const float3 Ng, const int object, const uint3 tri_vindex, const int numsteps, const int step, const float t, const float u, const float v)
Definition
motion_triangle.h:183
CCL_NAMESPACE_BEGIN
Definition
python.cpp:37
attribute_bump_map_normal
CCL_NAMESPACE_BEGIN ccl_device bool attribute_bump_map_normal(KernelGlobals kg, ccl_private const ShaderData *sd, float3 f[3])
Definition
services_shared.h:16
float3
Definition
sky_float3.h:26
Generated on
for Blender by
doxygen
1.16.1