Blender V4.3
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
13#ifdef __cplusplus
14extern "C" {
15#endif
16
18
19typedef struct OceanResult {
20 float disp[3];
21 float normal[3];
22 float foam;
23
24 /* raw eigenvalues/vectors */
25 float Jminus;
26 float Jplus;
27 float Eminus[3];
28 float Eplus[3];
30
31typedef struct OceanCache {
32 struct ImBuf **ibufs_disp;
33 struct ImBuf **ibufs_foam;
34 struct ImBuf **ibufs_norm;
35 /* spray is Eplus */
37 /* spray_inverse is Eminus */
39
40 const char *bakepath;
41 const char *relbase;
42
43 /* precalculated for time range */
44 float *time;
45
46 /* constant for time range */
50 float foam_fade;
51
52 int start;
53 int end;
57
58 int baked;
60
61struct Ocean *BKE_ocean_add(void);
62void BKE_ocean_free_data(struct Ocean *oc);
63void BKE_ocean_free(struct Ocean *oc);
64bool BKE_ocean_ensure(struct OceanModifierData *omd, int resolution);
69 struct OceanModifierData const *omd,
70 int resolution);
71
75bool BKE_ocean_is_valid(const struct Ocean *o);
76
80bool BKE_ocean_init(struct Ocean *o,
81 int M,
82 int N,
83 float Lx,
84 float Lz,
85 float V,
86 float l,
87 float A,
88 float w,
89 float damp,
90 float alignment,
91 float depth,
92 float time,
93 int spectrum,
94 float fetch_jonswap,
95 float sharpen_peak_jonswap,
96 short do_height_field,
97 short do_chop,
98 short do_spray,
99 short do_normals,
100 short do_jacobian,
101 int seed);
102void BKE_ocean_simulate(struct Ocean *o, float t, float scale, float chop_amount);
103
104float BKE_ocean_jminus_to_foam(float jminus, float coverage);
108void BKE_ocean_eval_uv(struct Ocean *oc, struct OceanResult *ocr, float u, float v);
112void BKE_ocean_eval_uv_catrom(struct Ocean *oc, struct OceanResult *ocr, float u, float v);
113void BKE_ocean_eval_xz(struct Ocean *oc, struct OceanResult *ocr, float x, float z);
114void BKE_ocean_eval_xz_catrom(struct Ocean *oc, struct OceanResult *ocr, float x, float z);
119void BKE_ocean_eval_ij(struct Ocean *oc, struct OceanResult *ocr, int i, int j);
120
124struct OceanCache *BKE_ocean_init_cache(const char *bakepath,
125 const char *relbase,
126 int start,
127 int end,
128 float wave_scale,
129 float chop_amount,
130 float foam_coverage,
131 float foam_fade,
132 int resolution);
133void BKE_ocean_simulate_cache(struct OceanCache *och, int frame);
134
135void BKE_ocean_bake(struct Ocean *o,
136 struct OceanCache *och,
137 void (*update_cb)(void *, float progress, int *cancel),
138 void *update_cb_data);
140 struct OceanCache *och, struct OceanResult *ocr, int f, float u, float v);
141void BKE_ocean_cache_eval_ij(struct OceanCache *och, struct OceanResult *ocr, int f, int i, int j);
142
143void BKE_ocean_free_cache(struct OceanCache *och);
145
146/* `ocean_spectrum.cc` */
147
153float BLI_ocean_spectrum_piersonmoskowitz(const struct Ocean *oc, float kx, float kz);
158float BLI_ocean_spectrum_texelmarsenarsloe(const struct Ocean *oc, float kx, float kz);
167float BLI_ocean_spectrum_jonswap(const struct Ocean *oc, float kx, float kz);
168
169#ifdef __cplusplus
170}
171#endif
struct Ocean * BKE_ocean_add(void)
Definition ocean.cc:1577
void BKE_ocean_cache_eval_uv(struct OceanCache *och, struct OceanResult *ocr, int f, float u, float v)
Definition ocean.cc:1631
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:1658
void BKE_ocean_eval_xz(struct Ocean *oc, struct OceanResult *ocr, float x, float z)
Definition ocean.cc:1569
void BKE_ocean_simulate(struct Ocean *o, float t, float scale, float chop_amount)
Definition ocean.cc:1575
float BKE_ocean_jminus_to_foam(float jminus, float coverage)
Definition ocean.cc:1559
void BKE_ocean_cache_eval_ij(struct OceanCache *och, struct OceanResult *ocr, int f, int i, int j)
Definition ocean.cc:1636
void BKE_ocean_free_modifier_cache(struct OceanModifierData *omd)
Definition ocean.cc:1676
bool BKE_ocean_ensure(struct OceanModifierData *omd, int resolution)
void BKE_ocean_free_data(struct Ocean *oc)
Definition ocean.cc:1610
void BKE_ocean_free_cache(struct OceanCache *och)
Definition ocean.cc:1622
void BKE_ocean_eval_xz_catrom(struct Ocean *oc, struct OceanResult *ocr, float x, float z)
Definition ocean.cc:1571
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:1573
void BKE_ocean_simulate_cache(struct OceanCache *och, int frame)
Definition ocean.cc:1656
void BKE_ocean_eval_uv(struct Ocean *oc, struct OceanResult *ocr, float u, float v)
Definition ocean.cc:1564
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:1584
struct OceanCache OceanCache
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:1612
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:1567
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:1641
struct OceanResult OceanResult
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
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:55
int resolution_y
Definition BKE_ocean.h:56
const char * bakepath
Definition BKE_ocean.h:40
float * time
Definition BKE_ocean.h:44
struct ImBuf ** ibufs_disp
Definition BKE_ocean.h:32
int duration
Definition BKE_ocean.h:54
float wave_scale
Definition BKE_ocean.h:47
float foam_fade
Definition BKE_ocean.h:50
struct ImBuf ** ibufs_spray
Definition BKE_ocean.h:36
struct ImBuf ** ibufs_norm
Definition BKE_ocean.h:34
struct ImBuf ** ibufs_foam
Definition BKE_ocean.h:33
const char * relbase
Definition BKE_ocean.h:41
struct ImBuf ** ibufs_spray_inverse
Definition BKE_ocean.h:38
float chop_amount
Definition BKE_ocean.h:48
float foam_coverage
Definition BKE_ocean.h:49
float Eplus[3]
Definition BKE_ocean.h:28
float Jplus
Definition BKE_ocean.h:26
float Eminus[3]
Definition BKE_ocean.h:27
float disp[3]
Definition BKE_ocean.h:20
float Jminus
Definition BKE_ocean.h:25
float foam
Definition BKE_ocean.h:22
CCL_NAMESPACE_BEGIN struct Window V