This repository has been archived on 2023-10-09. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
blender-archive/source/blender/render/RE_bake.h
Campbell Barton 0ef96cd392 Cleanup: ensure space after file named in headers
Add blank lines after file references to avoid them being interpreted as
doc-strings the following declarations.
2022-04-04 13:34:42 +10:00

137 lines
4.2 KiB
C++

/* SPDX-License-Identifier: GPL-2.0-or-later
* Copyright 2010 Blender Foundation. All rights reserved. */
/** \file
* \ingroup render
*/
#pragma once
struct Depsgraph;
struct ImBuf;
struct MLoopUV;
struct Mesh;
struct Render;
#ifdef __cplusplus
extern "C" {
#endif
typedef struct BakeImage {
struct Image *image;
int width;
int height;
size_t offset;
} BakeImage;
typedef struct BakeTargets {
/* All images of the object. */
BakeImage *images;
int images_num;
/* Lookup table from Material number to BakeImage. */
int *material_to_image;
int materials_num;
/* Pixel buffer to bake to. */
float *result;
int pixels_num;
int channels_num;
/* Baking to non-color data image. */
bool is_noncolor;
} BakeTargets;
typedef struct BakePixel {
int primitive_id, object_id;
int seed;
float uv[2];
float du_dx, du_dy;
float dv_dx, dv_dy;
} BakePixel;
typedef struct BakeHighPolyData {
struct Object *ob;
struct Object *ob_eval;
struct Mesh *me;
bool is_flip_object;
float obmat[4][4];
float imat[4][4];
} BakeHighPolyData;
/* external_engine.c */
bool RE_bake_has_engine(const struct Render *re);
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[]);
/* bake.c */
int RE_pass_depth(eScenePassType pass_type);
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,
float mat_low[4][4],
float mat_cage[4][4],
struct Mesh *me_cage);
void RE_bake_pixels_populate(struct Mesh *me,
struct BakePixel *pixel_array,
size_t pixels_num,
const struct BakeTargets *targets,
const char *uv_layer);
void RE_bake_mask_fill(const BakePixel pixel_array[], size_t pixels_num, char *mask);
void RE_bake_margin(struct ImBuf *ibuf,
char *mask,
int margin,
char margin_type,
struct Mesh const *me,
char const *uv_layer);
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]);
/**
* This function converts an object space normal map
* to a tangent space normal map for a given low poly mesh.
*/
void RE_bake_normal_world_to_tangent(const BakePixel pixel_array[],
size_t pixels_num,
int depth,
float result[],
struct Mesh *me,
const eBakeNormalSwizzle normal_swizzle[3],
float mat[4][4]);
void RE_bake_normal_world_to_world(const BakePixel pixel_array[],
size_t pixels_num,
int depth,
float result[],
const eBakeNormalSwizzle normal_swizzle[3]);
void RE_bake_ibuf_clear(struct Image *image, bool is_tangent);
#ifdef __cplusplus
}
#endif