Blender V4.5
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
8
9#pragma once
10
11#include "DNA_scene_types.h"
12
13#include "RE_pipeline.h"
14
15struct Depsgraph;
16struct ImBuf;
17struct Mesh;
18struct Render;
19
20struct BakeImage {
21 struct Image *image;
23 float uv_offset[2];
24 int width;
25 int height;
26 size_t offset;
27
28 /* For associating render result layer with image. */
30};
31
33 /* All images of the object. */
36
37 /* Lookup table from Material number to BakeImage. */
40
41 /* Pixel buffer to bake to. */
42 float *result;
45
46 /* Baking to non-color data image. */
48};
49
50struct BakePixel {
52 int seed;
53 float uv[2];
54 float du_dx, du_dy;
55 float dv_dx, dv_dy;
56};
57
59 struct Object *ob;
60 struct Object *ob_eval;
61 struct Mesh *mesh;
63
64 float obmat[4][4];
65 float imat[4][4];
66};
67
68/* `external_engine.cc` */
69
70bool RE_bake_has_engine(const struct Render *re);
71
72bool RE_bake_engine(struct Render *re,
73 struct Depsgraph *depsgraph,
74 struct Object *object,
75 int object_id,
76 const BakePixel pixel_array[],
77 const BakeTargets *targets,
78 eScenePassType pass_type,
79 int pass_filter,
80 float result[]);
81
82/* `bake.cc` */
83
84int RE_pass_depth(eScenePassType pass_type);
85
87 BakePixel pixel_array_from[],
88 BakePixel pixel_array_to[],
89 BakeHighPolyData highpoly[],
90 int highpoly_num,
91 size_t pixels_num,
92 bool is_custom_cage,
93 float cage_extrusion,
94 float max_ray_distance,
95 const float mat_low[4][4],
96 const float mat_cage[4][4],
97 struct Mesh *me_cage);
98
99void RE_bake_pixels_populate(struct Mesh *mesh,
100 struct BakePixel *pixel_array,
101 size_t pixels_num,
102 const struct BakeTargets *targets,
103 const char *uv_layer);
104
105void RE_bake_mask_fill(const BakePixel pixel_array[], size_t pixels_num, char *mask);
106
107void RE_bake_margin(struct ImBuf *ibuf,
108 char *mask,
109 int margin,
110 char margin_type,
111 const Mesh *mesh,
112 char const *uv_layer,
113 const float uv_offset[2]);
114
115void RE_bake_normal_world_to_object(const BakePixel pixel_array[],
116 size_t pixels_num,
117 int depth,
118 float result[],
119 struct Object *ob,
120 const eBakeNormalSwizzle normal_swizzle[3]);
125void RE_bake_normal_world_to_tangent(const BakePixel pixel_array[],
126 size_t pixels_num,
127 int depth,
128 float result[],
129 struct Mesh *mesh,
130 const eBakeNormalSwizzle normal_swizzle[3],
131 const float mat[4][4]);
132void RE_bake_normal_world_to_world(const BakePixel pixel_array[],
133 size_t pixels_num,
134 int depth,
135 float result[],
136 const eBakeNormalSwizzle normal_swizzle[3]);
137
138void RE_bake_ibuf_clear(struct Image *image, bool is_tangent);
eBakeNormalSwizzle
eScenePassType
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:971
bool RE_bake_has_engine(const struct Render *re)
void RE_bake_pixels_populate(struct Mesh *mesh, struct BakePixel *pixel_array, size_t pixels_num, const struct BakeTargets *targets, const char *uv_layer)
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:133
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:148
bool RE_bake_pixels_populate_from_objects(struct Mesh *me_low, BakePixel pixel_array_from[], BakePixel pixel_array_to[], BakeHighPolyData highpoly[], int highpoly_num, 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:543
int RE_pass_depth(eScenePassType pass_type)
Definition bake.cc:1052
void RE_bake_ibuf_clear(struct Image *image, bool is_tangent)
Definition bake.cc:1027
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:846
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:1003
#define RE_MAXNAME
Definition RE_pipeline.h:34
BPy_StructRNA * depsgraph
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
struct Mesh * mesh
Definition RE_bake.h:61
struct Object * ob
Definition RE_bake.h:59
float imat[4][4]
Definition RE_bake.h:65
struct Object * ob_eval
Definition RE_bake.h:60
float obmat[4][4]
Definition RE_bake.h:64
bool is_flip_object
Definition RE_bake.h:62
int height
Definition RE_bake.h:25
char render_layer_name[RE_MAXNAME]
Definition RE_bake.h:29
int tile_number
Definition RE_bake.h:22
size_t offset
Definition RE_bake.h:26
struct Image * image
Definition RE_bake.h:21
float uv_offset[2]
Definition RE_bake.h:23
int width
Definition RE_bake.h:24
float dv_dx
Definition RE_bake.h:55
float du_dx
Definition RE_bake.h:54
int seed
Definition RE_bake.h:52
float du_dy
Definition RE_bake.h:54
float uv[2]
Definition RE_bake.h:53
float dv_dy
Definition RE_bake.h:55
int object_id
Definition RE_bake.h:51
int primitive_id
Definition RE_bake.h:51
struct Image ** material_to_image
Definition RE_bake.h:38
float * result
Definition RE_bake.h:42
bool is_noncolor
Definition RE_bake.h:47
int pixels_num
Definition RE_bake.h:43
int materials_num
Definition RE_bake.h:39
int channels_num
Definition RE_bake.h:44
int images_num
Definition RE_bake.h:35
BakeImage * images
Definition RE_bake.h:34
struct Material ** mat