Blender V4.3
hair.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#ifndef __HAIR_H__
6#define __HAIR_H__
7
8#include "scene/geometry.h"
9
11
13
14class Hair : public Geometry {
15 public:
17
18 /* Hair Curve */
19 struct Curve {
22
23 int num_segments() const
24 {
25 return num_keys - 1;
26 }
27
28 void bounds_grow(const int k,
29 const float3 *curve_keys,
30 const float *curve_radius,
31 BoundBox &bounds) const;
32 void bounds_grow(const int k, const float4 *keys, BoundBox &bounds) const;
33 void bounds_grow(float4 keys[4], BoundBox &bounds) const;
34 void bounds_grow(float3 keys[4], BoundBox &bounds) const;
35 void bounds_grow(const int k,
36 const float3 *curve_keys,
37 const float *curve_radius,
38 const Transform &aligned_space,
39 BoundBox &bounds) const;
40
41 void motion_keys(const float3 *curve_keys,
42 const float *curve_radius,
43 const float4 *key_steps,
44 size_t num_curve_keys,
45 size_t num_steps,
46 float time,
47 size_t k0,
48 size_t k1,
49 float4 r_keys[2]) const;
50 void cardinal_motion_keys(const float3 *curve_keys,
51 const float *curve_radius,
52 const float4 *key_steps,
53 size_t num_curve_keys,
54 size_t num_steps,
55 float time,
56 size_t k0,
57 size_t k1,
58 size_t k2,
59 size_t k3,
60 float4 r_keys[4]) const;
61
62 void keys_for_step(const float3 *curve_keys,
63 const float *curve_radius,
64 const float4 *key_steps,
65 size_t num_curve_keys,
66 size_t num_steps,
67 size_t step,
68 size_t k0,
69 size_t k1,
70 float4 r_keys[2]) const;
71 void cardinal_keys_for_step(const float3 *curve_keys,
72 const float *curve_radius,
73 const float4 *key_steps,
74 size_t num_curve_keys,
75 size_t num_steps,
76 size_t step,
77 size_t k0,
78 size_t k1,
79 size_t k2,
80 size_t k3,
81 float4 r_keys[4]) const;
82 };
83
86 NODE_SOCKET_API_ARRAY(array<int>, curve_first_key)
88
89 /* BVH */
93
94 /* Constructor/Destructor */
95 Hair();
96 ~Hair();
97
98 /* Geometry */
99 void clear(bool preserve_shaders = false) override;
100
101 void resize_curves(int numcurves, int numkeys);
102 void reserve_curves(int numcurves, int numkeys);
103 void add_curve_key(float3 loc, float radius);
104 void add_curve(int first_key, int shader);
105
107
109 void apply_transform(const Transform &tfm, const bool apply_to_motion) override;
110
111 /* Curves */
112 Curve get_curve(size_t i) const
113 {
114 int first = curve_first_key[i];
115 int next_first = (i + 1 < curve_first_key.size()) ? curve_first_key[i + 1] : curve_keys.size();
116
117 Curve curve = {first, next_first - first};
118 return curve;
119 }
120
121 size_t num_keys() const
122 {
123 return curve_keys.size();
124 }
125
126 size_t num_curves() const
127 {
128 return curve_first_key.size();
129 }
130
131 size_t num_segments() const
132 {
133 return curve_keys.size() - curve_first_key.size();
134 }
135
136 /* UDIM */
137 void get_uv_tiles(ustring map, unordered_set<int> &tiles) override;
138
139 /* BVH */
140 void pack_curves(Scene *scene,
141 float4 *curve_key_co,
142 KernelCurve *curve,
143 KernelCurveSegment *curve_segments);
144
145 PrimitiveType primitive_type() const override;
146
147 /* Attributes */
149 bool update_shadow_transparency(Device *device, Scene *scene, Progress &progress);
150};
151
153
154#endif /* __HAIR_H__ */
BoundBox bounds
int motion_step(float time) const
Definition hair.h:14
void resize_curves(int numcurves, int numkeys)
Definition hair.cpp:320
void add_curve(int first_key, int shader)
Definition hair.cpp:361
Curve get_curve(size_t i) const
Definition hair.h:112
bool need_shadow_transparency()
Definition hair.cpp:601
void compute_bounds() override
Definition hair.cpp:396
size_t curve_key_offset
Definition hair.h:90
void reserve_curves(int numcurves, int numkeys)
Definition hair.cpp:330
size_t curve_segment_offset
Definition hair.h:91
size_t num_curves() const
Definition hair.h:126
bool update_shadow_transparency(Device *device, Scene *scene, Progress &progress)
Definition hair.cpp:613
void get_uv_tiles(ustring map, unordered_set< int > &tiles) override
Definition hair.cpp:380
void copy_center_to_motion_step(const int motion_step)
Definition hair.cpp:370
void pack_curves(Scene *scene, float4 *curve_key_co, KernelCurve *curve, KernelCurveSegment *curve_segments)
Definition hair.cpp:505
size_t num_segments() const
Definition hair.h:131
CurveShapeType curve_shape
Definition hair.h:92
void clear(bool preserve_shaders=false) override
Definition hair.cpp:340
size_t num_keys() const
Definition hair.h:121
void apply_transform(const Transform &tfm, const bool apply_to_motion) override
Definition hair.cpp:464
PrimitiveType primitive_type() const override
Definition hair.cpp:548
void add_curve_key(float3 loc, float radius)
Definition hair.cpp:352
#define CCL_NAMESPACE_END
#define NODE_SOCKET_API_ARRAY(type_, name)
Definition graph/node.h:63
ccl_gpu_kernel_postfix ccl_global KernelWorkTile * tiles
PrimitiveType
CurveShapeType
#define NODE_DECLARE
Definition node_type.h:142
void cardinal_motion_keys(const float3 *curve_keys, const float *curve_radius, const float4 *key_steps, size_t num_curve_keys, size_t num_steps, float time, size_t k0, size_t k1, size_t k2, size_t k3, float4 r_keys[4]) const
Definition hair.cpp:146
void bounds_grow(const int k, const float3 *curve_keys, const float *curve_radius, BoundBox &bounds) const
Definition hair.cpp:42
void cardinal_keys_for_step(const float3 *curve_keys, const float *curve_radius, const float4 *key_steps, size_t num_curve_keys, size_t num_steps, size_t step, size_t k0, size_t k1, size_t k2, size_t k3, float4 r_keys[4]) const
Definition hair.cpp:238
void bounds_grow(float3 keys[4], BoundBox &bounds) const
void motion_keys(const float3 *curve_keys, const float *curve_radius, const float4 *key_steps, size_t num_curve_keys, size_t num_steps, float time, size_t k0, size_t k1, float4 r_keys[2]) const
Definition hair.cpp:120
int first_key
Definition hair.h:20
void keys_for_step(const float3 *curve_keys, const float *curve_radius, const float4 *key_steps, size_t num_curve_keys, size_t num_steps, size_t step, size_t k0, size_t k1, float4 r_keys[2]) const
Definition hair.cpp:194
int num_segments() const
Definition hair.h:23
int num_keys
Definition hair.h:21
bool override
Definition wm_files.cc:1167