Blender V4.3
particle.cc File Reference
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <optional>
#include "MEM_guardedalloc.h"
#include "DNA_defaults.h"
#include "DNA_cloth_types.h"
#include "DNA_collection_types.h"
#include "DNA_curve_types.h"
#include "DNA_dynamicpaint_types.h"
#include "DNA_fluid_types.h"
#include "DNA_key_types.h"
#include "DNA_material_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_force_types.h"
#include "DNA_particle_types.h"
#include "DNA_scene_types.h"
#include "BLI_blenlib.h"
#include "BLI_kdopbvh.h"
#include "BLI_kdtree.h"
#include "BLI_linklist.h"
#include "BLI_math_base_safe.h"
#include "BLI_math_geom.h"
#include "BLI_math_matrix.h"
#include "BLI_math_rotation.h"
#include "BLI_math_vector.h"
#include "BLI_rand.h"
#include "BLI_task.h"
#include "BLI_threads.h"
#include "BLI_utildefines.h"
#include "BLT_translation.hh"
#include "BKE_anim_path.h"
#include "BKE_boids.h"
#include "BKE_cloth.hh"
#include "BKE_collection.hh"
#include "BKE_colortools.hh"
#include "BKE_customdata.hh"
#include "BKE_deform.hh"
#include "BKE_displist.h"
#include "BKE_effect.h"
#include "BKE_idtype.hh"
#include "BKE_key.hh"
#include "BKE_lattice.hh"
#include "BKE_layer.hh"
#include "BKE_lib_id.hh"
#include "BKE_lib_query.hh"
#include "BKE_material.h"
#include "BKE_mesh.hh"
#include "BKE_mesh_legacy_convert.hh"
#include "BKE_modifier.hh"
#include "BKE_object.hh"
#include "BKE_particle.h"
#include "BKE_pointcache.h"
#include "BKE_scene.hh"
#include "BKE_texture.h"
#include "DEG_depsgraph.hh"
#include "DEG_depsgraph_build.hh"
#include "DEG_depsgraph_query.hh"
#include "RE_texture.h"
#include "BLO_read_write.hh"
#include "particle_private.h"

Go to the source code of this file.

Classes

struct  ParticleInterpolationData
 
struct  CacheEditrPathsIterData
 

Macros

#define DNA_DEPRECATED_ALLOW
 
#define PATH_CACHE_BUF_SIZE   1024
 
#define SET_PARTICLE_TEXTURE(type, pvalue, texfac)
 
#define CLAMP_PARTICLE_TEXTURE_POS(type, pvalue)
 
#define CLAMP_WARP_PARTICLE_TEXTURE_POS(type, pvalue)
 
#define CLAMP_PARTICLE_TEXTURE_POSNEG(type, pvalue)
 

Functions

static void fluid_free_settings (SPHFluidSettings *fluid)
 
static void particle_settings_init (ID *id)
 
static void particle_settings_copy_data (Main *, std::optional< Library * >, ID *id_dst, const ID *id_src, const int)
 
static void particle_settings_free_data (ID *id)
 
static void particle_settings_foreach_id (ID *id, LibraryForeachIDData *data)
 
static void write_boid_state (BlendWriter *writer, BoidState *state)
 
static void particle_settings_blend_write (BlendWriter *writer, ID *id, const void *id_address)
 
void BKE_particle_partdeflect_blend_read_data (BlendDataReader *, PartDeflect *)
 
static void particle_settings_blend_read_data (BlendDataReader *reader, ID *id)
 
static void particle_settings_blend_read_after_liblink (BlendLibReader *, ID *id)
 
void BKE_particle_init_rng ()
 
static void get_child_modifier_parameters (ParticleSettings *part, ParticleThreadContext *ctx, ChildParticle *cpa, short cpa_from, int cpa_num, float *cpa_fuv, float *orco, ParticleTexture *ptex)
 
static void get_cpa_texture (Mesh *mesh, ParticleSystem *psys, ParticleSettings *part, ParticleData *par, int child_index, int face_index, const float fw[4], float *orco, ParticleTexture *ptex, int event, float cfra)
 
int count_particles (ParticleSystem *psys)
 
int count_particles_mod (ParticleSystem *psys, int totgr, int cur)
 
static ParticleCacheKeypcache_key_segment_endpoint_safe (ParticleCacheKey *key)
 
static ParticleCacheKey ** psys_alloc_path_cache_buffers (ListBase *bufs, int tot, int totkeys)
 
static void psys_free_path_cache_buffers (ParticleCacheKey **cache, ListBase *bufs)
 
ParticleSystempsys_get_current (Object *ob)
 
short psys_get_current_num (Object *ob)
 
void psys_set_current_num (Object *ob, int index)
 
void psys_sim_data_init (ParticleSimulationData *sim)
 
void psys_sim_data_free (ParticleSimulationData *sim)
 
void psys_disable_all (Object *ob)
 
void psys_enable_all (Object *ob)
 
ParticleSystempsys_orig_get (ParticleSystem *psys)
 
ParticleSystempsys_eval_get (Depsgraph *depsgraph, Object *object, ParticleSystem *psys)
 
static PTCacheEditpsys_orig_edit_get (ParticleSystem *psys)
 
bool psys_in_edit_mode (Depsgraph *depsgraph, const ParticleSystem *psys)
 
bool psys_check_enabled (Object *ob, ParticleSystem *psys, const bool use_render_params)
 
bool psys_check_edited (ParticleSystem *psys)
 
void psys_find_group_weights (ParticleSettings *part)
 
void psys_check_group_weights (ParticleSettings *part)
 
int psys_uses_gravity (ParticleSimulationData *sim)
 
void free_hair (Object *object, ParticleSystem *psys, int dynamics)
 
void free_keyed_keys (ParticleSystem *psys)
 
static void free_child_path_cache (ParticleSystem *psys)
 
void psys_free_path_cache (ParticleSystem *psys, PTCacheEdit *edit)
 
void psys_free_children (ParticleSystem *psys)
 
void psys_free_particles (ParticleSystem *psys)
 
void psys_free_pdd (ParticleSystem *psys)
 
void psys_free (Object *ob, ParticleSystem *psys)
 
void psys_copy_particles (ParticleSystem *psys_dst, ParticleSystem *psys_src)
 
static float interpolate_particle_value (float v1, float v2, float v3, float v4, const float w[4], int four)
 
void psys_interpolate_particle (short type, ParticleKey keys[4], float dt, ParticleKey *result, bool velocity)
 
static void get_pointcache_keys_for_time (Object *, PointCache *cache, PTCacheMem **cur, int index, float t, ParticleKey *key1, ParticleKey *key2)
 
static int get_pointcache_times_for_particle (PointCache *cache, int index, float *r_start, float *r_dietime)
 
float psys_get_dietime_from_cache (PointCache *cache, int index)
 
static void init_particle_interpolation (Object *ob, ParticleSystem *psys, ParticleData *pa, ParticleInterpolationData *pind)
 
static void edit_to_particle (ParticleKey *key, PTCacheEditKey *ekey)
 
static void hair_to_particle (ParticleKey *key, HairKey *hkey)
 
static void mvert_to_particle (ParticleKey *key, float3 *position, HairKey *hkey)
 
static void do_particle_interpolation (ParticleSystem *psys, int p, ParticleData *pa, float t, ParticleInterpolationData *pind, ParticleKey *result)
 
static void interpolate_pathcache (ParticleCacheKey *first, float t, ParticleCacheKey *result)
 
void psys_interpolate_face (Mesh *mesh, const float(*vert_positions)[3], const float(*vert_normals)[3], const MFace *mface, MTFace *tface, const float(*orcodata)[3], float w[4], float vec[3], float nor[3], float utan[3], float vtan[3], float orco[3])
 
void psys_interpolate_uvs (const MTFace *tface, int quad, const float w[4], float uvco[2])
 
void psys_interpolate_mcol (const MCol *mcol, int quad, const float w[4], MCol *mc)
 
static float psys_interpolate_value_from_verts (Mesh *mesh, short from, int index, const float fw[4], const float *values)
 
static void psys_w_to_origspace (const float w[4], float uv[2])
 
static void psys_origspace_to_w (OrigSpaceFace *osface, int quad, const float w[4], float neww[4])
 
int psys_particle_dm_face_lookup (Mesh *mesh_final, Mesh *mesh_original, int findex_orig, const float fw[4], LinkNode **poly_nodes)
 
static int psys_map_index_on_dm (Mesh *mesh, int from, int index, int index_dmcache, const float fw[4], float, int *mapindex, float mapfw[4])
 
void psys_particle_on_dm (Mesh *mesh_final, int from, int index, int index_dmcache, const float fw[4], float foffset, float vec[3], float nor[3], float utan[3], float vtan[3], float orco[3])
 
float psys_particle_value_from_verts (Mesh *mesh, short from, ParticleData *pa, float *values)
 
ParticleSystemModifierDatapsys_get_modifier (Object *ob, ParticleSystem *psys)
 
static void psys_particle_on_shape (int, int, float *, float vec[3], float nor[3], float utan[3], float vtan[3], float orco[3])
 
void psys_emitter_customdata_mask (ParticleSystem *psys, CustomData_MeshMasks *r_cddata_masks)
 
void psys_particle_on_emitter (ParticleSystemModifierData *psmd, int from, int index, int index_dmcache, float fuv[4], float foffset, float vec[3], float nor[3], float utan[3], float vtan[3], float orco[3])
 
void precalc_guides (ParticleSimulationData *sim, ListBase *effectors)
 
bool do_guides (Depsgraph *depsgraph, ParticleSettings *part, ListBase *effectors, ParticleKey *state, int index, float time)
 
static void do_path_effectors (ParticleSimulationData *sim, int i, ParticleCacheKey *ca, int k, int steps, float *, float effector, float, float, float *length, float *vec)
 
static void offset_child (ChildParticle *cpa, ParticleKey *par, float *par_rot, ParticleKey *child, float flat, float radius)
 
floatpsys_cache_vgroup (Mesh *mesh, ParticleSystem *psys, int vgroup)
 
void psys_find_parents (ParticleSimulationData *sim, const bool use_render_params)
 
static bool psys_thread_context_init_path (ParticleThreadContext *ctx, ParticleSimulationData *sim, Scene *scene, float cfra, const bool editupdate, const bool use_render_params)
 
static void psys_task_init_path (ParticleTask *task, ParticleSimulationData *sim)
 
static void psys_thread_create_path (ParticleTask *task, ChildParticle *cpa, ParticleCacheKey *child_keys, int i)
 
static void exec_child_path_cache (TaskPool *__restrict, void *taskdata)
 
void psys_cache_child_paths (ParticleSimulationData *sim, float cfra, const bool editupdate, const bool use_render_params)
 
static void cache_key_incremental_rotation (ParticleCacheKey *key0, ParticleCacheKey *key1, ParticleCacheKey *key2, float *prev_tangent, int i)
 
void psys_cache_paths (ParticleSimulationData *sim, float cfra, const bool use_render_params)
 
static void psys_cache_edit_paths_iter (void *__restrict iter_data_v, const int iter, const TaskParallelTLS *__restrict)
 
void psys_cache_edit_paths (Depsgraph *depsgraph, Scene *scene, Object *ob, PTCacheEdit *edit, float cfra, const bool use_render_params)
 
void copy_particle_key (ParticleKey *to, ParticleKey *from, int time)
 
void psys_get_from_key (ParticleKey *key, float loc[3], float vel[3], float rot[4], float *time)
 
static void triatomat (float *v1, float *v2, float *v3, const float(*uv)[2], float mat[4][4])
 
static void psys_face_mat (Object *ob, Mesh *mesh, ParticleData *pa, float mat[4][4], int orco)
 
void psys_mat_hair_to_object (Object *, Mesh *mesh, short from, ParticleData *pa, float hairmat[4][4])
 
void psys_mat_hair_to_orco (Object *ob, Mesh *mesh, short from, ParticleData *pa, float hairmat[4][4])
 
void psys_vec_rot_to_face (Mesh *mesh, ParticleData *pa, float vec[3])
 
void psys_mat_hair_to_global (Object *ob, Mesh *mesh, short from, ParticleData *pa, float hairmat[4][4])
 
static ModifierDataobject_add_or_copy_particle_system (Main *bmain, const Scene *scene, Object *ob, const char *name, const ParticleSystem *psys_orig)
 
ModifierDataobject_add_particle_system (Main *bmain, const Scene *scene, Object *ob, const char *name)
 
ModifierDataobject_copy_particle_system (Main *bmain, const Scene *scene, Object *ob, const ParticleSystem *psys_orig)
 
void object_remove_particle_system (Main *bmain, Scene *, Object *ob, ParticleSystem *psys)
 
ParticleSettingsBKE_particlesettings_add (Main *bmain, const char *name)
 
void BKE_particlesettings_clump_curve_init (ParticleSettings *part)
 
void BKE_particlesettings_rough_curve_init (ParticleSettings *part)
 
void BKE_particlesettings_twist_curve_init (ParticleSettings *part)
 
static int get_particle_uv (Mesh *mesh, ParticleData *pa, int index, const float fuv[4], char *name, float *texco, bool from_vert)
 
void psys_get_texture (ParticleSimulationData *sim, ParticleData *pa, ParticleTexture *ptex, int event, float cfra)
 
float psys_get_timestep (ParticleSimulationData *sim)
 
float psys_get_child_time (ParticleSystem *psys, ChildParticle *cpa, float cfra, float *birthtime, float *dietime)
 
float psys_get_child_size (ParticleSystem *psys, ChildParticle *cpa, float, float *)
 
void psys_get_particle_on_path (ParticleSimulationData *sim, int p, ParticleKey *state, const bool vel)
 
bool psys_get_particle_state (ParticleSimulationData *sim, int p, ParticleKey *state, const bool always)
 
void psys_get_dupli_texture (ParticleSystem *psys, ParticleSettings *part, ParticleSystemModifierData *psmd, ParticleData *pa, ChildParticle *cpa, float uv[2], float orco[3])
 
void psys_get_dupli_path_transform (ParticleSimulationData *sim, ParticleData *pa, ChildParticle *cpa, ParticleCacheKey *cache, float mat[4][4], float *scale)
 
void psys_apply_hair_lattice (Depsgraph *depsgraph, Scene *scene, Object *ob, ParticleSystem *psys)
 
void BKE_particle_batch_cache_dirty_tag (ParticleSystem *psys, int mode)
 
void BKE_particle_batch_cache_free (ParticleSystem *psys)
 
void BKE_particle_system_blend_write (BlendWriter *writer, ListBase *particles)
 
void BKE_particle_system_blend_read_data (BlendDataReader *reader, ListBase *particles)
 
void BKE_particle_system_blend_read_after_liblink (BlendLibReader *, Object *ob, ID *, ListBase *particles)
 

Variables

IDTypeInfo IDType_ID_PA
 
uint PSYS_FRAND_SEED_OFFSET [PSYS_FRAND_COUNT]
 
uint PSYS_FRAND_SEED_MULTIPLIER [PSYS_FRAND_COUNT]
 
float PSYS_FRAND_BASE [PSYS_FRAND_COUNT]
 
void(* BKE_particle_batch_cache_dirty_tag_cb )(ParticleSystem *psys, int mode) = nullptr
 
void(* BKE_particle_batch_cache_free_cb )(ParticleSystem *psys) = nullptr
 

Macro Definition Documentation

◆ CLAMP_PARTICLE_TEXTURE_POS

#define CLAMP_PARTICLE_TEXTURE_POS ( type,
pvalue )
Value:
if (event & type) { \
CLAMP(pvalue, 0.0f, 1.0f); \
} \
(void)0

Definition at line 4222 of file particle.cc.

Referenced by get_cpa_texture(), and psys_get_texture().

◆ CLAMP_PARTICLE_TEXTURE_POSNEG

#define CLAMP_PARTICLE_TEXTURE_POSNEG ( type,
pvalue )
Value:
if (event & type) { \
CLAMP(pvalue, -1.0f, 1.0f); \
} \
(void)0

Definition at line 4237 of file particle.cc.

Referenced by psys_get_texture().

◆ CLAMP_WARP_PARTICLE_TEXTURE_POS

#define CLAMP_WARP_PARTICLE_TEXTURE_POS ( type,
pvalue )
Value:
if (event & type) { \
if (pvalue < 0.0f) { \
pvalue = 1.0f + pvalue; \
} \
CLAMP(pvalue, 0.0f, 1.0f); \
} \
(void)0

Definition at line 4228 of file particle.cc.

Referenced by get_cpa_texture(), and psys_get_texture().

◆ DNA_DEPRECATED_ALLOW

#define DNA_DEPRECATED_ALLOW

Definition at line 10 of file particle.cc.

◆ PATH_CACHE_BUF_SIZE

#define PATH_CACHE_BUF_SIZE   1024

Definition at line 485 of file particle.cc.

Referenced by psys_alloc_path_cache_buffers().

◆ SET_PARTICLE_TEXTURE

#define SET_PARTICLE_TEXTURE ( type,
pvalue,
texfac )
Value:
if ((event & mtex->mapto) & type) { \
pvalue = texture_value_blend(def, pvalue, value, texfac, blend); \
} \
(void)0
float texture_value_blend(float tex, float out, float fact, float facg, int blendtype)

Definition at line 4216 of file particle.cc.

Referenced by get_cpa_texture(), and psys_get_texture().

Function Documentation

◆ BKE_particle_batch_cache_dirty_tag()

◆ BKE_particle_batch_cache_free()

void BKE_particle_batch_cache_free ( ParticleSystem * psys)

Definition at line 5301 of file particle.cc.

References ParticleSystem::batch_cache, and BKE_particle_batch_cache_free_cb.

Referenced by psys_free().

◆ BKE_particle_init_rng()

void BKE_particle_init_rng ( void )

◆ BKE_particle_partdeflect_blend_read_data()

void BKE_particle_partdeflect_blend_read_data ( BlendDataReader * reader,
PartDeflect * pd )

Definition at line 316 of file particle.cc.

Referenced by object_blend_read_data(), and particle_settings_blend_read_data().

◆ BKE_particle_system_blend_read_after_liblink()

◆ BKE_particle_system_blend_read_data()

◆ BKE_particle_system_blend_write()

◆ BKE_particlesettings_add()

ParticleSettings * BKE_particlesettings_add ( Main * bmain,
const char * name )

◆ BKE_particlesettings_clump_curve_init()

void BKE_particlesettings_clump_curve_init ( ParticleSettings * part)

◆ BKE_particlesettings_rough_curve_init()

void BKE_particlesettings_rough_curve_init ( ParticleSettings * part)

◆ BKE_particlesettings_twist_curve_init()

void BKE_particlesettings_twist_curve_init ( ParticleSettings * part)

◆ cache_key_incremental_rotation()

◆ copy_particle_key()

◆ count_particles()

int count_particles ( ParticleSystem * psys)

◆ count_particles_mod()

int count_particles_mod ( ParticleSystem * psys,
int totgr,
int cur )

◆ do_guides()

◆ do_particle_interpolation()

◆ do_path_effectors()

◆ edit_to_particle()

static void edit_to_particle ( ParticleKey * key,
PTCacheEditKey * ekey )
static

◆ exec_child_path_cache()

static void exec_child_path_cache ( TaskPool * __restrict,
void * taskdata )
static

◆ fluid_free_settings()

static void fluid_free_settings ( SPHFluidSettings * fluid)
static

Definition at line 836 of file particle.cc.

References MEM_freeN().

Referenced by particle_settings_free_data().

◆ free_child_path_cache()

◆ free_hair()

◆ free_keyed_keys()

◆ get_child_modifier_parameters()

◆ get_cpa_texture()

static void get_cpa_texture ( Mesh * mesh,
ParticleSystem * psys,
ParticleSettings * part,
ParticleData * par,
int child_index,
int face_index,
const float fw[4],
float * orco,
ParticleTexture * ptex,
int event,
float cfra )
static

◆ get_particle_uv()

static int get_particle_uv ( Mesh * mesh,
ParticleData * pa,
int index,
const float fuv[4],
char * name,
float * texco,
bool from_vert )
static

◆ get_pointcache_keys_for_time()

static void get_pointcache_keys_for_time ( Object * ,
PointCache * cache,
PTCacheMem ** cur,
int index,
float t,
ParticleKey * key1,
ParticleKey * key2 )
static

Assumes pointcache->mem_cache exists, so for disk cached particles call psys_make_temp_pointcache() before use. It uses ParticleInterpolationData.pm to store the current memory cache frame so it's thread safe.

Definition at line 1193 of file particle.cc.

References BKE_ptcache_make_particle_key(), BKE_ptcache_mem_index_find(), copy_particle_key(), PTCacheMem::data, ListBase::first, PTCacheMem::frame, PointCache::mem_cache, PTCacheMem::next, and PTCacheMem::prev.

Referenced by do_particle_interpolation(), and init_particle_interpolation().

◆ get_pointcache_times_for_particle()

static int get_pointcache_times_for_particle ( PointCache * cache,
int index,
float * r_start,
float * r_dietime )
static

◆ hair_to_particle()

static void hair_to_particle ( ParticleKey * key,
HairKey * hkey )
static

◆ init_particle_interpolation()

◆ interpolate_particle_value()

static float interpolate_particle_value ( float v1,
float v2,
float v3,
float v4,
const float w[4],
int four )
static

Definition at line 1122 of file particle.cc.

References CLAMP, v2, and w().

Referenced by psys_interpolate_value_from_verts().

◆ interpolate_pathcache()

◆ mvert_to_particle()

static void mvert_to_particle ( ParticleKey * key,
float3 * position,
HairKey * hkey )
static

Definition at line 1349 of file particle.cc.

References ParticleKey::co, copy_v3_v3(), HairKey::time, and ParticleKey::time.

Referenced by do_particle_interpolation().

◆ object_add_or_copy_particle_system()

◆ object_add_particle_system()

ModifierData * object_add_particle_system ( Main * bmain,
const Scene * scene,
Object * ob,
const char * name )

Definition at line 3975 of file particle.cc.

References object_add_or_copy_particle_system().

◆ object_copy_particle_system()

ModifierData * object_copy_particle_system ( Main * bmain,
const Scene * scene,
Object * ob,
const ParticleSystem * psys_orig )

Definition at line 3983 of file particle.cc.

References object_add_or_copy_particle_system().

◆ object_remove_particle_system()

◆ offset_child()

◆ particle_settings_blend_read_after_liblink()

static void particle_settings_blend_read_after_liblink ( BlendLibReader * ,
ID * id )
static

Definition at line 372 of file particle.cc.

References BLI_freelistN().

◆ particle_settings_blend_read_data()

static void particle_settings_blend_read_data ( BlendDataReader * reader,
ID * id )
static

◆ particle_settings_blend_write()

◆ particle_settings_copy_data()

◆ particle_settings_foreach_id()

◆ particle_settings_free_data()

◆ particle_settings_init()

◆ pcache_key_segment_endpoint_safe()

static ParticleCacheKey * pcache_key_segment_endpoint_safe ( ParticleCacheKey * key)
static

Definition at line 487 of file particle.cc.

References ParticleCacheKey::segments.

Referenced by psys_thread_create_path().

◆ precalc_guides()

◆ psys_alloc_path_cache_buffers()

static ParticleCacheKey ** psys_alloc_path_cache_buffers ( ListBase * bufs,
int tot,
int totkeys )
static

◆ psys_apply_hair_lattice()

◆ psys_cache_child_paths()

◆ psys_cache_edit_paths()

◆ psys_cache_edit_paths_iter()

static void psys_cache_edit_paths_iter ( void *__restrict iter_data_v,
const int iter,
const TaskParallelTLS * __restrict )
static

◆ psys_cache_paths()

void psys_cache_paths ( struct ParticleSimulationData * sim,
float cfra,
bool use_render_params )

Calculates paths ready for drawing/rendering

  • Useful for making use of opengl vertex arrays for super fast strand drawing.
  • Makes child strands possible and creates them too into the cache.
  • Cached path data is also used to determine cut position for the edit-mode tool.

Definition at line 3256 of file particle.cc.

References ParticleInterpolationData::birthtime, BKE_lattice_deform_data_eval_co(), BKE_mesh_tessface_ensure(), BKE_object_material_get(), ParticleInterpolationData::bspline, ParticleInterpolationData::cache, cache_key_incremental_rotation(), HairKey::co, ParticleCacheKey::co, col, ParticleCacheKey::col, copy_qt_qt(), copy_v3_v3(), ParticleSimulationData::depsgraph, ParticleInterpolationData::dietime, do_guides(), do_particle_interpolation(), do_path_effectors(), ParticleSettings::draw_col, ParticleSystem::edit, ParticleSystem::effectors, ParticleInterpolationData::epoint, ListBase::first, ParticleEditSettings::flag, ParticleSettings::flag, ParticleSystem::flag, float, ParticleSettings::from, ParticleSystem::hair_out_mesh, init_particle_interpolation(), int, ParticleInterpolationData::keyed, ParticleSystem::lattice_deform_data, ParticleSystem::lattice_strength, len_v3(), length(), ParticleTexture::length, LOOP_PARTICLES, mat3_to_quat_legacy(), PointCache::mem_cache, MEM_freeN(), ParticleInterpolationData::mesh, mul_m4_v3(), mul_v3_m4v3(), ParticleSimulationData::ob, ParticleSettings::omat, PAMAP_LENGTH, ParticleSystem::part, PART_ABS_PATH_TIME, PART_CHILD_EFFECT, PART_DRAW_COL_MAT, PART_FROM_VERT, PART_HAIR, PART_HAIR_BSPLINE, ToolSettings::particle, PARTICLE_P, PARTICLE_PSMD, ParticleSystem::pathcache, ParticleSystem::pathcachebufs, PE_DRAW_PART, ParticleSystem::pointcache, pow(), ParticleSimulationData::psys, psys_alloc_path_cache_buffers(), psys_cache_vgroup(), psys_frand(), psys_free_path_cache(), psys_get_texture(), PSYS_GLOBAL_HAIR, PSYS_HAIR_DONE, PSYS_HAIR_DYNAMICS, psys_in_edit_mode(), PSYS_KEYED, psys_mat_hair_to_global(), psys_particle_value_from_verts(), psys_sim_data_free(), psys_sim_data_init(), PSYS_VG_EFFECTOR, PSYS_VG_LENGTH, Material::r, result, ParticleCacheKey::rot, rot, ParticleSimulationData::scene, ParticleSystem::seed, ParticleCacheKey::segments, sub_v3_v3v3(), ParticleCacheKey::time, Scene::toolsettings, ParticleSystem::totcached, ParticleSystem::totchild, ParticleSystem::totpart, ParticleSettings::type, ParticleCacheKey::vel, and HairKey::world_co.

Referenced by psys_update_path_cache().

◆ psys_cache_vgroup()

◆ psys_check_edited()

◆ psys_check_enabled()

◆ psys_check_group_weights()

◆ psys_copy_particles()

◆ psys_disable_all()

void psys_disable_all ( Object * ob)

◆ psys_emitter_customdata_mask()

◆ psys_enable_all()

void psys_enable_all ( Object * ob)

◆ psys_eval_get()

ParticleSystem * psys_eval_get ( struct Depsgraph * depsgraph,
struct Object * object,
struct ParticleSystem * psys )

For a given original object and its particle system, get evaluated particle system within a given dependency graph.

Definition at line 664 of file particle.cc.

References DEG_get_evaluated_object(), depsgraph, ListBase::first, ParticleSystem::next, ParticleSystem::orig_psys, and Object::particlesystem.

Referenced by BKE_ptcache_bake(), blender::ed::object::convert_psys_to_mesh(), disconnect_hair(), PE_create_particle_edit(), and remap_hair_emitter().

◆ psys_face_mat()

◆ psys_find_group_weights()

void psys_find_group_weights ( ParticleSettings * part)

◆ psys_find_parents()

◆ psys_free()

◆ psys_free_children()

void psys_free_children ( ParticleSystem * psys)

◆ psys_free_particles()

◆ psys_free_path_cache()

◆ psys_free_path_cache_buffers()

static void psys_free_path_cache_buffers ( ParticleCacheKey ** cache,
ListBase * bufs )
static

Definition at line 518 of file particle.cc.

References BLI_freelistN(), LISTBASE_FOREACH, and MEM_freeN().

Referenced by free_child_path_cache(), and psys_free_path_cache().

◆ psys_free_pdd()

◆ psys_get_child_size()

◆ psys_get_child_time()

◆ psys_get_current()

◆ psys_get_current_num()

short psys_get_current_num ( Object * ob)

◆ psys_get_dietime_from_cache()

float psys_get_dietime_from_cache ( PointCache * cache,
int index )

◆ psys_get_dupli_path_transform()

◆ psys_get_dupli_texture()

◆ psys_get_from_key()

void psys_get_from_key ( ParticleKey * key,
float loc[3],
float vel[3],
float rot[4],
float * time )

◆ psys_get_modifier()

◆ psys_get_particle_on_path()

void psys_get_particle_on_path ( struct ParticleSimulationData * sim,
int pa_num,
struct ParticleKey * state,
bool vel )

Gets hair (or keyed) particles state at the "path time" specified in state->time.

Definition at line 4599 of file particle.cc.

References BKE_lattice_deform_data_eval_co(), BKE_object_material_get(), ParticleInterpolationData::bspline, ParticleInterpolationData::cache, ParticleSystem::child, ParticleSystem::childcache, CLAMP, ParticleKey::co, copy_particle_key(), copy_qt_qt(), copy_v3_v3(), ParticleChildModifierContext::cpa, ParticleSimulationData::depsgraph, DMCACHE_ISCHILD, do_child_modifiers(), do_guides(), do_particle_interpolation(), ParticleSystem::effectors, ParticleInterpolationData::epoint, ParticleData::flag, ParticleSettings::flag, ParticleSystem::flag, ChildParticle::foffset, ParticleData::foffset, ParticleSettings::from, ChildParticle::fuv, ParticleData::fuv, get_child_modifier_parameters(), ParticleSystem::hair_out_mesh, init_particle_interpolation(), interpolate_pathcache(), ParticleInterpolationData::keyed, ParticleSystem::lattice_deform_data, ParticleSystem::lattice_strength, len_v3(), ParticleThreadContext::ma, ParticleInterpolationData::mesh, ParticleThreadContext::mesh, ParticleSystemModifierData::mesh_final, mul_m4_v3(), mul_mat3_m4_v3(), mul_v3_fl(), normalize_v3(), ChildParticle::num, ParticleData::num, ParticleData::num_dmcache, ParticleSimulationData::ob, offset_child(), ParticleChildModifierContext::orco, ChildParticle::pa, ParticleChildModifierContext::par_co, ParticleChildModifierContext::par_orco, ParticleChildModifierContext::par_rot, ParticleChildModifierContext::par_vel, ChildParticle::parent, ParticleChildModifierContext::parent_keys, PARS_REKEY, ParticleSystem::part, PART_CHILD_FACES, PART_CHILD_GUIDE, PART_FROM_FACE, PART_HAIR, PART_HAIR_BSPLINE, PART_PHYS_KEYED, PARTICLE_PSMD, ParticleSystem::particles, ParticleSystem::pathcache, ParticleSystem::pointcache, ParticleSimulationData::psmd, ParticleSimulationData::psys, psys_get_child_time(), psys_get_particle_on_path(), PSYS_GLOBAL_HAIR, psys_in_edit_mode(), PSYS_KEYED, psys_mat_hair_to_global(), psys_particle_on_emitter(), ParticleChildModifierContext::ptex, result, ParticleKey::rot, ParticleChildModifierContext::sim, ParticleThreadContext::sim, state, sub_v3_v3v3(), ParticleChildModifierContext::thread_ctx, ParticleData::time, ParticleKey::time, ParticleSystem::totchild, ParticleSystem::totpart, unit_m4(), ParticleKey::vel, ChildParticle::w, and w().

Referenced by brush_add(), modify_mesh(), psys_get_particle_on_path(), psys_get_particle_state(), rekey_particle(), rekey_particle_to_time(), and subdivide_particle().

◆ psys_get_particle_state()

bool psys_get_particle_state ( struct ParticleSimulationData * sim,
int p,
struct ParticleKey * state,
bool always )

Gets particle's state at a time. Must call psys_sim_data_init before this.

Returns
true if particle exists and can be seen and false if not.

Definition at line 4886 of file particle.cc.

References ParticleKey::ave, BKE_lattice_deform_data_eval_co(), ParticleSystem::child, ParticleSystem::childcache, CLAMP, ParticleKey::co, copy_particle_key(), ParticleChildModifierContext::cpa, DEG_get_ctime(), ParticleSimulationData::depsgraph, ParticleData::dietime, do_child_modifiers(), ELEM, ParticleSystem::flag, RenderData::frs_sec, ChildParticle::fuv, interp_qt_qtqt(), interp_v3_v3v3(), ParticleSystem::lattice_deform_data, ParticleSystem::lattice_strength, ParticleData::lifetime, madd_v3_v3v3fl(), mul_v3_fl(), offset_child(), ParticleChildModifierContext::orco, ParticleChildModifierContext::par_co, ParticleChildModifierContext::par_orco, ParticleChildModifierContext::par_rot, ParticleChildModifierContext::par_vel, ChildParticle::parent, ParticleChildModifierContext::parent_keys, ParticleSystem::part, PART_CHILD_FACES, PART_DIED, PART_PHYS_KEYED, PART_PHYS_NO, PART_UNBORN, ParticleSystem::particles, ParticleData::prev_state, ParticleSimulationData::psys, psys_frand(), psys_get_child_time(), psys_get_particle_on_path(), psys_get_timestep(), psys_interpolate_particle(), PSYS_KEYED, ParticleChildModifierContext::ptex, Scene::r, ParticleKey::rot, ParticleSimulationData::scene, ParticleChildModifierContext::sim, ParticleData::state, state, ParticleChildModifierContext::thread_ctx, ParticleData::time, ParticleKey::time, ParticleSystem::totchild, ParticleSystem::totpart, unit_m4(), and ParticleKey::vel.

Referenced by blender::io::alembic::ABCPointsWriter::do_write(), explodeMesh(), get_effector_data(), make_duplis_particle_system(), modify_mesh(), blender::draw::particle_batch_cache_ensure_pos(), particle_system_minmax(), pointdensity_cache_psys(), and set_keyed_keys().

◆ psys_get_texture()

void psys_get_texture ( ParticleSimulationData * sim,
ParticleData * pa,
ParticleTexture * ptex,
int event,
float cfra )

Definition at line 4338 of file particle.cc.

References ATTR_FALLTHROUGH, BKE_mesh_texspace_ensure(), blend, MTex::blendtype, CLAMP_PARTICLE_TEXTURE_POS, CLAMP_PARTICLE_TEXTURE_POSNEG, CLAMP_WARP_PARTICLE_TEXTURE_POS, ParticleTexture::clump, ParticleKey::co, copy_v3_v3(), ParticleTexture::damp, MTex::dampfac, Object::data, MTex::def_var, ParticleData::dietime, ParticleTexture::effector, ELEM, ParticleTexture::exist, fabsf, ParticleTexture::field, MTex::fieldfac, float, ParticleData::foffset, ParticleSettings::from, ParticleData::fuv, get_particle_uv(), ParticleTexture::gravity, MTex::gravityfac, ParticleTexture::ivel, MTex::ivelfac, ParticleTexture::kink_amp, ParticleTexture::kink_freq, ParticleTexture::length, MTex::lengthfac, ParticleTexture::life, MTex::lifefac, MTex::mapto, MAX_MTEX, ParticleSystemModifierData::mesh_final, mul_m4_v3(), ParticleData::num, ParticleData::num_dmcache, ParticleSimulationData::ob, MTex::object, MTex::padensfac, PAMAP_DAMP, PAMAP_DENS, PAMAP_FIELD, PAMAP_GRAVITY, PAMAP_IVEL, PAMAP_LENGTH, PAMAP_LIFE, PAMAP_SIZE, PAMAP_TIME, PAMAP_TWIST, ParticleSystem::part, PART_DISTR_GRID, PART_FROM_FACE, PART_FROM_VERT, PART_FROM_VOLUME, ParticleSystem::particles, ParticleSimulationData::psmd, ParticleSimulationData::psys, psys_particle_on_emitter(), RE_texture_evaluate(), ParticleTexture::rough1, ParticleTexture::rough2, ParticleTexture::roughe, SET_PARTICLE_TEXTURE, ParticleTexture::size, MTex::sizefac, ParticleData::state, sub_v3_v3(), MTex::tex, MTex::texco, TEXCO_GLOB, TEXCO_OBJECT, TEXCO_ORCO, TEXCO_PARTICLE, TEXCO_UV, texture_value_blend(), ParticleData::time, ParticleTexture::time, MTex::timefac, ParticleSystem::totpart, ParticleTexture::twist, MTex::twistfac, and MTex::uvname.

Referenced by basic_integrate(), cached_step(), dynamics_step(), init_particle_texture(), particle_system_update(), psys_cache_paths(), psys_get_birth_coords(), and reset_particle().

◆ psys_get_timestep()

◆ psys_in_edit_mode()

◆ psys_interpolate_face()

void psys_interpolate_face ( Mesh * mesh,
const float(*) vert_positions[3],
const float(*) vert_normals[3],
const MFace * mface,
MTFace * tface,
const float(*) orcodata[3],
float w[4],
float vec[3],
float nor[3],
float utan[3],
float vtan[3],
float orco[3] )

◆ psys_interpolate_mcol()

void psys_interpolate_mcol ( const MCol * mcol,
int quad,
const float w[4],
MCol * mc )

Definition at line 1745 of file particle.cc.

References int, quad, and w().

◆ psys_interpolate_particle()

◆ psys_interpolate_uvs()

void psys_interpolate_uvs ( const MTFace * tface,
int quad,
const float w[4],
float uvco[2] )

Definition at line 1722 of file particle.cc.

References quad, MTFace::uv, and w().

Referenced by get_particle_uv(), and psys_get_dupli_texture().

◆ psys_interpolate_value_from_verts()

static float psys_interpolate_value_from_verts ( Mesh * mesh,
short from,
int index,
const float fw[4],
const float * values )
static

◆ psys_map_index_on_dm()

static int psys_map_index_on_dm ( Mesh * mesh,
int from,
int index,
int index_dmcache,
const float fw[4],
float ,
int * mapindex,
float mapfw[4] )
static

◆ psys_mat_hair_to_global()

◆ psys_mat_hair_to_object()

◆ psys_mat_hair_to_orco()

void psys_mat_hair_to_orco ( Object * ob,
Mesh * mesh,
short from,
ParticleData * pa,
float hairmat[4][4] )

◆ psys_orig_edit_get()

static PTCacheEdit * psys_orig_edit_get ( ParticleSystem * psys)
static

◆ psys_orig_get()

ParticleSystem * psys_orig_get ( struct ParticleSystem * psys)

For a given evaluated particle system get its original.

If this input is an original particle system already, the return value is the same as the input.

Definition at line 656 of file particle.cc.

References ParticleSystem::orig_psys.

Referenced by blender::draw::drw_particle_get_hair_source(), particle_system_update(), and psys_in_edit_mode().

◆ psys_origspace_to_w()

static void psys_origspace_to_w ( OrigSpaceFace * osface,
int quad,
const float w[4],
float neww[4] )
static

Definition at line 1801 of file particle.cc.

References interp_weights_poly_v3(), psys_w_to_origspace(), quad, OrigSpaceFace::uv, v, and w().

Referenced by psys_map_index_on_dm().

◆ psys_particle_dm_face_lookup()

int psys_particle_dm_face_lookup ( struct Mesh * mesh_final,
struct Mesh * mesh_original,
int findex_orig,
const float fw[4],
struct LinkNode ** poly_nodes )

Find the final derived mesh tessface for a particle, from its original tessface index. This is slow and can be optimized but only for many lookups.

Parameters
mesh_finalFinal mesh, it may not have the same topology as original mesh.
mesh_originalOriginal mesh, use for accessing poly to MFace mapping.
findex_origThe input tessface index.
fwFace weights (position of the particle inside the findex_orig tessface).
poly_nodesMay be NULL, otherwise an array of linked list, one for each final mesh_final face, containing all its tessfaces indices.
Returns
The mesh_final tessface index.

Definition at line 1830 of file particle.cc.

References BKE_mesh_origindex_mface_mpoly(), BLI_assert, CD_MFACE, CD_ORIGINDEX, CD_ORIGSPACE, CustomData_get_layer(), CustomData_get_layer_for_write(), DMCACHE_NOTFOUND, ELEM, Mesh::face_data, Mesh::fdata_legacy, float, isect_point_quad_v2(), isect_point_tri_v2(), LinkNode::link, LinkNode::next, POINTER_AS_INT, printf, psys_w_to_origspace(), Mesh::runtime, Mesh::totface_legacy, and OrigSpaceFace::uv.

Referenced by brush_add_count_iter(), PE_mirror_x(), psys_calc_dmcache(), and remap_hair_emitter().

◆ psys_particle_on_dm()

◆ psys_particle_on_emitter()

◆ psys_particle_on_shape()

static void psys_particle_on_shape ( int ,
int ,
float * ,
float vec[3],
float nor[3],
float utan[3],
float vtan[3],
float orco[3] )
static

Definition at line 2170 of file particle.cc.

References copy_v3_v3(), and nor.

Referenced by psys_particle_on_emitter().

◆ psys_particle_value_from_verts()

float psys_particle_value_from_verts ( Mesh * mesh,
short from,
ParticleData * pa,
float * values )

◆ psys_set_current_num()

void psys_set_current_num ( Object * ob,
int index )

◆ psys_sim_data_free()

◆ psys_sim_data_init()

◆ psys_task_init_path()

static void psys_task_init_path ( ParticleTask * task,
ParticleSimulationData * sim )
static

Definition at line 2783 of file particle.cc.

References BLI_rng_new(), ParticleSimulationData::psys, ParticleSystem::seed, and seed.

Referenced by psys_cache_child_paths().

◆ psys_thread_context_init_path()

static bool psys_thread_context_init_path ( ParticleThreadContext * ctx,
ParticleSimulationData * sim,
Scene * scene,
float cfra,
const bool editupdate,
const bool use_render_params )
static

Definition at line 2676 of file particle.cc.

References ParticleThreadContext::between, BKE_curvemapping_changed_all(), BKE_curvemapping_copy(), ParticleThreadContext::cfra, ParticleThreadContext::clumpcurve, ParticleSimulationData::depsgraph, ParticleEditSettings::draw_step, ParticleSettings::draw_step, ParticleThreadContext::editupdate, ELEM, ParticleThreadContext::extra_segments, ParticleEditSettings::flag, ParticleSettings::flag, float, int, max_ii(), ParticleThreadContext::mesh, ParticleThreadContext::parent_pass, ParticleSystem::part, PART_CHILD_EFFECT, PART_CHILD_FACES, PART_CHILD_USE_CLUMP_CURVE, PART_CHILD_USE_ROUGH_CURVE, PART_CHILD_USE_TWIST_CURVE, PART_KINK_SPIRAL, PE_DRAW_PART, ParticleSimulationData::psys, psys_cache_vgroup(), psys_in_edit_mode(), psys_orig_edit_get(), psys_sim_data_init(), psys_thread_context_init(), PSYS_VG_CLUMP, PSYS_VG_EFFECTOR, PSYS_VG_KINK, PSYS_VG_LENGTH, PSYS_VG_ROUGH1, PSYS_VG_ROUGH2, PSYS_VG_ROUGHE, PSYS_VG_TWIST, ParticleThreadContext::roughcurve, ParticleThreadContext::segments, ParticleThreadContext::sim, ParticleSystem::totchild, ParticleThreadContext::totchild, ParticleThreadContext::totparent, ParticleThreadContext::twistcurve, ParticleThreadContext::vg_clump, ParticleThreadContext::vg_effector, ParticleThreadContext::vg_kink, ParticleThreadContext::vg_length, ParticleThreadContext::vg_rough1, ParticleThreadContext::vg_rough2, ParticleThreadContext::vg_roughe, and ParticleThreadContext::vg_twist.

Referenced by psys_cache_child_paths().

◆ psys_thread_create_path()

static void psys_thread_create_path ( ParticleTask * task,
ChildParticle * cpa,
ParticleCacheKey * child_keys,
int i )
static

Definition at line 2792 of file particle.cc.

References add_v3_v3(), ParticleThreadContext::between, BLI_assert, BLI_listbase_clear(), ParticleThreadContext::cfra, ParticleSystem::childcache, CLAMP, ParticleCacheKey::co, copy_qt_qt(), copy_v3_v3(), ParticleSimulationData::depsgraph, DMCACHE_ISCHILD, DMCACHE_NOTFOUND, do_path_effectors(), dot_v3v3(), ParticleThreadContext::editupdate, ParticleTexture::effector, ELEM, ParticleTexture::exist, ParticleData::flag, PTCacheEditPoint::flag, float, ChildParticle::foffset, ParticleData::foffset, ParticleSettings::from, ChildParticle::fuv, ParticleData::fuv, get_child_modifier_parameters(), interp_v3_v3v3v3v3(), interp_v4_v4v4(), len_v3(), len_v3v3(), madd_v3_v3fl(), ParticleSystemModifierData::mesh_final, mul_m4_v3(), mul_qt_qtqt(), mul_qt_v3(), normalize_v3(), ChildParticle::num, ParticleData::num, ParticleData::num_dmcache, ParticleSimulationData::ob, offset_child(), ChildParticle::pa, ChildParticle::parent, PARS_UNEXIST, ParticleSystem::part, PART_CHILD_EFFECT, PART_CHILD_LONG_HAIR, PART_FROM_FACE, ParticleSystem::particles, ParticleSystem::pathcache, PTCacheEdit::pathcache, pcache_key_segment_endpoint_safe(), PEP_EDIT_RECALC, PTCacheEdit::points, project_v3_v3v3(), ParticleSimulationData::psmd, ParticleSimulationData::psys, psys_apply_child_modifiers(), psys_frand(), psys_in_edit_mode(), psys_mat_hair_to_global(), psys_orig_edit_get(), psys_particle_on_emitter(), RAD2DEGF, ParticleCacheKey::rot, rot, safe_acosf(), ParticleCacheKey::segments, ParticleThreadContext::segments, ParticleThreadContext::sim, sub_v3_v3v3(), ParticleCacheKey::time, ParticleSystem::totchildcache, Mesh::totface_legacy, ParticleThreadContext::totparent, unit_qt(), v2, ParticleCacheKey::vel, ChildParticle::w, w(), and zero_v3().

Referenced by exec_child_path_cache().

◆ psys_uses_gravity()

◆ psys_vec_rot_to_face()

void psys_vec_rot_to_face ( Mesh * mesh,
ParticleData * pa,
float vec[3] )

Definition at line 3898 of file particle.cc.

References mul_mat3_m4_v3(), psys_face_mat(), and transpose_m4().

Referenced by save_hair().

◆ psys_w_to_origspace()

static void psys_w_to_origspace ( const float w[4],
float uv[2] )
static

Definition at line 1794 of file particle.cc.

References w().

Referenced by psys_origspace_to_w(), and psys_particle_dm_face_lookup().

◆ triatomat()

static void triatomat ( float * v1,
float * v2,
float * v3,
const float(*) uv[2],
float mat[4][4] )
static

Definition at line 3768 of file particle.cc.

References cross_v3_v3v3(), normal_tri_v3(), normalize_v3(), sub_v3_v3v3(), and v2.

Referenced by psys_face_mat().

◆ write_boid_state()

Variable Documentation

◆ BKE_particle_batch_cache_dirty_tag_cb

void(* BKE_particle_batch_cache_dirty_tag_cb) (ParticleSystem *psys, int mode) ( ParticleSystem * psys,
int mode ) = nullptr

Definition at line 5292 of file particle.cc.

Referenced by BKE_particle_batch_cache_dirty_tag(), and DRW_engines_register().

◆ BKE_particle_batch_cache_free_cb

void(* BKE_particle_batch_cache_free_cb) (ParticleSystem *psys) ( ParticleSystem * psys) = nullptr

Definition at line 5293 of file particle.cc.

Referenced by BKE_particle_batch_cache_free(), and DRW_engines_register().

◆ IDType_ID_PA

IDTypeInfo IDType_ID_PA
Initial value:
= {
"ParticleSettings",
N_("particles"),
0,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
}
#define BLT_I18NCONTEXT_ID_PARTICLESETTINGS
#define FILTER_ID_OB
Definition DNA_ID.h:1181
#define FILTER_ID_GR
Definition DNA_ID.h:1170
#define FILTER_ID_TE
Definition DNA_ID.h:1187
#define FILTER_ID_PA
Definition DNA_ID.h:1191
@ INDEX_ID_PA
Definition DNA_ID.h:1286
@ ID_PA
struct ParticleSettings ParticleSettings
static void particle_settings_blend_read_after_liblink(BlendLibReader *, ID *id)
Definition particle.cc:372
static void particle_settings_blend_read_data(BlendDataReader *reader, ID *id)
Definition particle.cc:320
static void particle_settings_init(ID *id)
Definition particle.cc:90
static void particle_settings_copy_data(Main *, std::optional< Library * >, ID *id_dst, const ID *id_src, const int)
Definition particle.cc:102
static void particle_settings_free_data(ID *id)
Definition particle.cc:141
static void particle_settings_blend_write(BlendWriter *writer, ID *id, const void *id_address)
Definition particle.cc:259
static void particle_settings_foreach_id(ID *id, LibraryForeachIDData *data)
Definition particle.cc:170
#define N_(msgid)

Definition at line 381 of file particle.cc.

◆ PSYS_FRAND_BASE

float PSYS_FRAND_BASE[PSYS_FRAND_COUNT]

Definition at line 413 of file particle.cc.

Referenced by BKE_particle_init_rng(), psys_frand(), and psys_frand_vec().

◆ PSYS_FRAND_SEED_MULTIPLIER

uint PSYS_FRAND_SEED_MULTIPLIER[PSYS_FRAND_COUNT]

Definition at line 412 of file particle.cc.

Referenced by BKE_particle_init_rng(), psys_frand(), and psys_frand_vec().

◆ PSYS_FRAND_SEED_OFFSET

uint PSYS_FRAND_SEED_OFFSET[PSYS_FRAND_COUNT]

Definition at line 411 of file particle.cc.

Referenced by BKE_particle_init_rng(), psys_frand(), and psys_frand_vec().