Blender V4.3
RE_bake.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2010 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#pragma once
10
11#include "RE_pipeline.h"
12
13struct Depsgraph;
14struct ImBuf;
15struct Mesh;
16struct Render;
17
18#ifdef __cplusplus
19extern "C" {
20#endif
21
22typedef struct BakeImage {
23 struct Image *image;
25 float uv_offset[2];
26 int width;
27 int height;
28 size_t offset;
29
30 /* For associating render result layer with image. */
33
34typedef struct BakeTargets {
35 /* All images of the object. */
38
39 /* Lookup table from Material number to BakeImage. */
42
43 /* Pixel buffer to bake to. */
44 float *result;
47
48 /* Baking to non-color data image. */
51
52typedef struct BakePixel {
54 int seed;
55 float uv[2];
56 float du_dx, du_dy;
57 float dv_dx, dv_dy;
59
60typedef struct BakeHighPolyData {
61 struct Object *ob;
62 struct Object *ob_eval;
63 struct Mesh *mesh;
65
66 float obmat[4][4];
67 float imat[4][4];
69
70/* `external_engine.cc` */
71
72bool RE_bake_has_engine(const struct Render *re);
73
74bool RE_bake_engine(struct Render *re,
75 struct Depsgraph *depsgraph,
76 struct Object *object,
77 int object_id,
78 const BakePixel pixel_array[],
79 const BakeTargets *targets,
80 eScenePassType pass_type,
81 int pass_filter,
82 float result[]);
83
84/* `bake.cc` */
85
86int RE_pass_depth(eScenePassType pass_type);
87
89 BakePixel pixel_array_from[],
90 BakePixel pixel_array_to[],
91 BakeHighPolyData highpoly[],
92 int tot_highpoly,
93 size_t pixels_num,
94 bool is_custom_cage,
95 float cage_extrusion,
96 float max_ray_distance,
97 const float mat_low[4][4],
98 const float mat_cage[4][4],
99 struct Mesh *me_cage);
100
102 struct BakePixel *pixel_array,
103 size_t pixels_num,
104 const struct BakeTargets *targets,
105 const char *uv_layer);
106
107void RE_bake_mask_fill(const BakePixel pixel_array[], size_t pixels_num, char *mask);
108
109void RE_bake_margin(struct ImBuf *ibuf,
110 char *mask,
111 int margin,
112 char margin_type,
113 const Mesh *mesh,
114 char const *uv_layer,
115 const float uv_offset[2]);
116
117void RE_bake_normal_world_to_object(const BakePixel pixel_array[],
118 size_t pixels_num,
119 int depth,
120 float result[],
121 struct Object *ob,
122 const eBakeNormalSwizzle normal_swizzle[3]);
127void RE_bake_normal_world_to_tangent(const BakePixel pixel_array[],
128 size_t pixels_num,
129 int depth,
130 float result[],
131 struct Mesh *mesh,
132 const eBakeNormalSwizzle normal_swizzle[3],
133 const float mat[4][4]);
134void RE_bake_normal_world_to_world(const BakePixel pixel_array[],
135 size_t pixels_num,
136 int depth,
137 float result[],
138 const eBakeNormalSwizzle normal_swizzle[3]);
139
140void RE_bake_ibuf_clear(struct Image *image, bool is_tangent);
141
142#ifdef __cplusplus
143}
144#endif
eBakeNormalSwizzle
eScenePassType
struct BakeHighPolyData BakeHighPolyData
void RE_bake_normal_world_to_object(const BakePixel pixel_array[], size_t pixels_num, int depth, float result[], struct Object *ob, const eBakeNormalSwizzle normal_swizzle[3])
Definition bake.cc:978
bool RE_bake_has_engine(const struct Render *re)
struct BakePixel BakePixel
void RE_bake_pixels_populate(struct Mesh *mesh, struct BakePixel *pixel_array, size_t pixels_num, const struct BakeTargets *targets, const char *uv_layer)
struct BakeTargets BakeTargets
bool RE_bake_engine(struct Render *re, struct Depsgraph *depsgraph, struct Object *object, int object_id, const BakePixel pixel_array[], const BakeTargets *targets, eScenePassType pass_type, int pass_filter, float result[])
void RE_bake_mask_fill(const BakePixel pixel_array[], size_t pixels_num, char *mask)
Definition bake.cc:130
struct BakeImage BakeImage
bool RE_bake_pixels_populate_from_objects(struct Mesh *me_low, BakePixel pixel_array_from[], BakePixel pixel_array_to[], BakeHighPolyData highpoly[], int tot_highpoly, size_t pixels_num, bool is_custom_cage, float cage_extrusion, float max_ray_distance, const float mat_low[4][4], const float mat_cage[4][4], struct Mesh *me_cage)
Definition bake.cc:545
void RE_bake_margin(struct ImBuf *ibuf, char *mask, int margin, char margin_type, const Mesh *mesh, char const *uv_layer, const float uv_offset[2])
Definition bake.cc:145
int RE_pass_depth(eScenePassType pass_type)
Definition bake.cc:1059
void RE_bake_ibuf_clear(struct Image *image, bool is_tangent)
Definition bake.cc:1034
void RE_bake_normal_world_to_tangent(const BakePixel pixel_array[], size_t pixels_num, int depth, float result[], struct Mesh *mesh, const eBakeNormalSwizzle normal_swizzle[3], const float mat[4][4])
Definition bake.cc:853
void RE_bake_normal_world_to_world(const BakePixel pixel_array[], size_t pixels_num, int depth, float result[], const eBakeNormalSwizzle normal_swizzle[3])
Definition bake.cc:1010
#define RE_MAXNAME
Definition RE_pipeline.h:40
const Depsgraph * depsgraph
struct Mesh * mesh
Definition RE_bake.h:63
struct Object * ob
Definition RE_bake.h:61
float imat[4][4]
Definition RE_bake.h:67
struct Object * ob_eval
Definition RE_bake.h:62
float obmat[4][4]
Definition RE_bake.h:66
bool is_flip_object
Definition RE_bake.h:64
int height
Definition RE_bake.h:27
char render_layer_name[RE_MAXNAME]
Definition RE_bake.h:31
int tile_number
Definition RE_bake.h:24
size_t offset
Definition RE_bake.h:28
struct Image * image
Definition RE_bake.h:23
float uv_offset[2]
Definition RE_bake.h:25
int width
Definition RE_bake.h:26
float dv_dx
Definition RE_bake.h:57
float du_dx
Definition RE_bake.h:56
int seed
Definition RE_bake.h:54
float du_dy
Definition RE_bake.h:56
float uv[2]
Definition RE_bake.h:55
float dv_dy
Definition RE_bake.h:57
int object_id
Definition RE_bake.h:53
int primitive_id
Definition RE_bake.h:53
struct Image ** material_to_image
Definition RE_bake.h:40
float * result
Definition RE_bake.h:44
bool is_noncolor
Definition RE_bake.h:49
int pixels_num
Definition RE_bake.h:45
int materials_num
Definition RE_bake.h:41
int channels_num
Definition RE_bake.h:46
int images_num
Definition RE_bake.h:37
BakeImage * images
Definition RE_bake.h:36
struct Material ** mat