Blender V5.0
BKE_ocean.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
7#include <stdbool.h>
8
12
14
15typedef struct OceanResult {
16 float disp[3];
17 float normal[3];
18 float foam;
19
20 /* raw eigenvalues/vectors */
21 float Jminus;
22 float Jplus;
23 float Eminus[3];
24 float Eplus[3];
26
27typedef struct OceanCache {
28 struct ImBuf **ibufs_disp;
29 struct ImBuf **ibufs_foam;
30 struct ImBuf **ibufs_norm;
31 /* spray is Eplus */
33 /* spray_inverse is Eminus */
35
36 const char *bakepath;
37 const char *relbase;
38
39 /* precalculated for time range */
40 float *time;
41
42 /* constant for time range */
46 float foam_fade;
47
48 int start;
49 int end;
53
54 int baked;
56
57struct Ocean *BKE_ocean_add(void);
58void BKE_ocean_free_data(struct Ocean *oc);
59void BKE_ocean_free(struct Ocean *oc);
60bool BKE_ocean_ensure(struct OceanModifierData *omd, int resolution);
65 struct OceanModifierData const *omd,
66 int resolution);
67
71bool BKE_ocean_is_valid(const struct Ocean *o);
72
76bool BKE_ocean_init(struct Ocean *o,
77 int M,
78 int N,
79 float Lx,
80 float Lz,
81 float V,
82 float l,
83 float A,
84 float w,
85 float damp,
86 float alignment,
87 float depth,
88 float time,
89 int spectrum,
90 float fetch_jonswap,
91 float sharpen_peak_jonswap,
92 short do_height_field,
93 short do_chop,
94 short do_spray,
95 short do_normals,
96 short do_jacobian,
97 int seed);
98void BKE_ocean_simulate(struct Ocean *o, float t, float scale, float chop_amount);
99
100float BKE_ocean_jminus_to_foam(float jminus, float coverage);
104void BKE_ocean_eval_uv(struct Ocean *oc, struct OceanResult *ocr, float u, float v);
108void BKE_ocean_eval_uv_catrom(struct Ocean *oc, struct OceanResult *ocr, float u, float v);
109void BKE_ocean_eval_xz(struct Ocean *oc, struct OceanResult *ocr, float x, float z);
110void BKE_ocean_eval_xz_catrom(struct Ocean *oc, struct OceanResult *ocr, float x, float z);
115void BKE_ocean_eval_ij(struct Ocean *oc, struct OceanResult *ocr, int i, int j);
116
120struct OceanCache *BKE_ocean_init_cache(const char *bakepath,
121 const char *relbase,
122 int start,
123 int end,
124 float wave_scale,
125 float chop_amount,
126 float foam_coverage,
127 float foam_fade,
128 int resolution);
129void BKE_ocean_simulate_cache(struct OceanCache *och, int frame);
130
131void BKE_ocean_bake(struct Ocean *o,
132 struct OceanCache *och,
133 void (*update_cb)(void *, float progress, int *cancel),
134 void *update_cb_data);
136 struct OceanCache *och, struct OceanResult *ocr, int f, float u, float v);
137void BKE_ocean_cache_eval_ij(struct OceanCache *och, struct OceanResult *ocr, int f, int i, int j);
138
139void BKE_ocean_free_cache(struct OceanCache *och);
141
142/* `ocean_spectrum.cc` */
143
149float BLI_ocean_spectrum_piersonmoskowitz(const struct Ocean *oc, float kx, float kz);
154float BLI_ocean_spectrum_texelmarsenarsloe(const struct Ocean *oc, float kx, float kz);
163float BLI_ocean_spectrum_jonswap(const struct Ocean *oc, float kx, float kz);
struct Ocean * BKE_ocean_add(void)
Definition ocean.cc:1571
void BKE_ocean_cache_eval_uv(struct OceanCache *och, struct OceanResult *ocr, int f, float u, float v)
Definition ocean.cc:1625
void BKE_ocean_bake(struct Ocean *o, struct OceanCache *och, void(*update_cb)(void *, float progress, int *cancel), void *update_cb_data)
Definition ocean.cc:1652
void BKE_ocean_eval_xz(struct Ocean *oc, struct OceanResult *ocr, float x, float z)
Definition ocean.cc:1563
void BKE_ocean_simulate(struct Ocean *o, float t, float scale, float chop_amount)
Definition ocean.cc:1569
float BKE_ocean_jminus_to_foam(float jminus, float coverage)
Definition ocean.cc:1553
void BKE_ocean_cache_eval_ij(struct OceanCache *och, struct OceanResult *ocr, int f, int i, int j)
Definition ocean.cc:1630
void BKE_ocean_free_modifier_cache(struct OceanModifierData *omd)
Definition ocean.cc:1670
bool BKE_ocean_ensure(struct OceanModifierData *omd, int resolution)
void BKE_ocean_free_data(struct Ocean *oc)
Definition ocean.cc:1604
void BKE_ocean_free_cache(struct OceanCache *och)
Definition ocean.cc:1616
void BKE_ocean_eval_xz_catrom(struct Ocean *oc, struct OceanResult *ocr, float x, float z)
Definition ocean.cc:1565
float BLI_ocean_spectrum_piersonmoskowitz(const struct Ocean *oc, float kx, float kz)
void BKE_ocean_eval_ij(struct Ocean *oc, struct OceanResult *ocr, int i, int j)
Definition ocean.cc:1567
void BKE_ocean_simulate_cache(struct OceanCache *och, int frame)
Definition ocean.cc:1650
void BKE_ocean_eval_uv(struct Ocean *oc, struct OceanResult *ocr, float u, float v)
Definition ocean.cc:1558
bool BKE_ocean_init(struct Ocean *o, int M, int N, float Lx, float Lz, float V, float l, float A, float w, float damp, float alignment, float depth, float time, int spectrum, float fetch_jonswap, float sharpen_peak_jonswap, short do_height_field, short do_chop, short do_spray, short do_normals, short do_jacobian, int seed)
Definition ocean.cc:1578
bool BKE_ocean_init_from_modifier(struct Ocean *ocean, struct OceanModifierData const *omd, int resolution)
void BKE_ocean_free(struct Ocean *oc)
Definition ocean.cc:1606
float BLI_ocean_spectrum_jonswap(const struct Ocean *oc, float kx, float kz)
bool BKE_ocean_is_valid(const struct Ocean *o)
void BKE_ocean_eval_uv_catrom(struct Ocean *oc, struct OceanResult *ocr, float u, float v)
Definition ocean.cc:1561
struct OceanCache * BKE_ocean_init_cache(const char *bakepath, const char *relbase, int start, int end, float wave_scale, float chop_amount, float foam_coverage, float foam_fade, int resolution)
Definition ocean.cc:1635
float BLI_ocean_spectrum_texelmarsenarsloe(const struct Ocean *oc, float kx, float kz)
ATTR_WARN_UNUSED_RESULT const BMLoop * l
ATTR_WARN_UNUSED_RESULT const BMVert * v
#define A
SIMD_FORCE_INLINE const btScalar & z() const
Return the z value.
Definition btQuadWord.h:117
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition btQuadWord.h:119
static unsigned long seed
Definition btSoftBody.h:39
#define M
#define N
int resolution_x
Definition BKE_ocean.h:51
int resolution_y
Definition BKE_ocean.h:52
const char * bakepath
Definition BKE_ocean.h:36
float * time
Definition BKE_ocean.h:40
struct ImBuf ** ibufs_disp
Definition BKE_ocean.h:28
int duration
Definition BKE_ocean.h:50
float wave_scale
Definition BKE_ocean.h:43
float foam_fade
Definition BKE_ocean.h:46
struct ImBuf ** ibufs_spray
Definition BKE_ocean.h:32
struct ImBuf ** ibufs_norm
Definition BKE_ocean.h:30
struct ImBuf ** ibufs_foam
Definition BKE_ocean.h:29
const char * relbase
Definition BKE_ocean.h:37
struct ImBuf ** ibufs_spray_inverse
Definition BKE_ocean.h:34
float chop_amount
Definition BKE_ocean.h:44
float foam_coverage
Definition BKE_ocean.h:45
float Eplus[3]
Definition BKE_ocean.h:24
float Jplus
Definition BKE_ocean.h:22
float Eminus[3]
Definition BKE_ocean.h:23
float disp[3]
Definition BKE_ocean.h:16
float Jminus
Definition BKE_ocean.h:21
float normal[3]
Definition BKE_ocean.h:17
float foam
Definition BKE_ocean.h:18
i
Definition text_draw.cc:230
CCL_NAMESPACE_BEGIN struct Window V