Blender V5.0
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 "DNA_texture_types.h"
#include "BLI_kdopbvh.hh"
#include "BLI_kdtree.h"
#include "BLI_linklist.h"
#include "BLI_listbase.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_string_utf8.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.hh"
#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)

Typedefs

using float3

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 r_uv[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], const 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 4215 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 4230 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 4221 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 488 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
static int blend(const Tex *tex, const float texvec[3], TexResult *texres)
float texture_value_blend(float tex, float out, float fact, float facg, int blendtype)

Definition at line 4209 of file particle.cc.

Referenced by get_cpa_texture(), and psys_get_texture().

Typedef Documentation

◆ float3

Definition at line 619 of file BLI_math_vector_types.hh.

Function Documentation

◆ BKE_particle_batch_cache_dirty_tag()

◆ BKE_particle_batch_cache_free()

void BKE_particle_batch_cache_free ( ParticleSystem * psys)

Definition at line 5294 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 318 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()

◆ count_particles_mod()

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

◆ do_guides()

◆ do_particle_interpolation()

◆ do_path_effectors()

◆ edit_to_particle()

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

◆ exec_child_path_cache()

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

◆ fluid_free_settings()

void fluid_free_settings ( SPHFluidSettings * fluid)
static

Definition at line 839 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()

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()

◆ get_pointcache_keys_for_time()

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 1196 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()

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

◆ hair_to_particle()

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

◆ init_particle_interpolation()

◆ interpolate_particle_value()

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

Definition at line 1125 of file particle.cc.

References CLAMP, v2, and w().

Referenced by psys_interpolate_value_from_verts().

◆ interpolate_pathcache()

◆ mvert_to_particle()

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

Definition at line 1352 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 3968 of file particle.cc.

References name, and 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 3976 of file particle.cc.

References object_add_or_copy_particle_system().

◆ object_remove_particle_system()

◆ offset_child()

◆ particle_settings_blend_read_after_liblink()

void particle_settings_blend_read_after_liblink ( BlendLibReader * ,
ID * id )
static

◆ particle_settings_blend_read_data()

◆ particle_settings_blend_write()

◆ particle_settings_copy_data()

◆ particle_settings_foreach_id()

◆ particle_settings_free_data()

◆ particle_settings_init()

◆ pcache_key_segment_endpoint_safe()

ParticleCacheKey * pcache_key_segment_endpoint_safe ( ParticleCacheKey * key)
static

Definition at line 490 of file particle.cc.

References ParticleCacheKey::segments.

Referenced by psys_thread_create_path().

◆ precalc_guides()

◆ psys_alloc_path_cache_buffers()

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()

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 3249 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, ParticleSettings::draw_col, ParticleSettings::draw_step, ParticleSystem::edit, ParticleSystem::effectors, ParticleInterpolationData::epoint, ListBase::first, ParticleEditSettings::flag, ParticleSettings::flag, ParticleSystem::flag, float, ParticleSettings::from, ParticleSystem::hair_out_mesh, init_particle_interpolation(), 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, ParticleSettings::path_end, ParticleSettings::path_start, 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, ParticleSettings::randlength, ParticleSettings::ren_step, 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 668 of file particle.cc.

References DEG_get_evaluated(), 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()

◆ 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()

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

Definition at line 522 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 4592 of file particle.cc.

References BKE_lattice_deform_data_eval_co(), BKE_object_material_get(), ParticleInterpolationData::bspline, ParticleInterpolationData::cache, ParticleSystem::child, ParticleSystem::childcache, ParticleSettings::childflat, ParticleSettings::childrad, ParticleSettings::childtype, 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(), length(), ParticleThreadContext::ma, ParticleInterpolationData::mesh, ParticleThreadContext::mesh, ParticleSystemModifierData::mesh_final, mul_m4_v3(), mul_mat3_m4_v3(), mul_v3_fl(), normalize_v3(), nullptr, ChildParticle::num, ParticleData::num, ParticleData::num_dmcache, ParticleSimulationData::ob, offset_child(), ParticleSettings::omat, 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, ParticleSettings::phystype, 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, ParticleKey::time, ParticleSystem::totchild, ParticleSystem::totpart, ParticleSettings::type, 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 4879 of file particle.cc.

References ParticleKey::ave, BKE_lattice_deform_data_eval_co(), ParticleSystem::child, ParticleSystem::childcache, ParticleSettings::childflat, ParticleSettings::childrad, ParticleSettings::childtype, CLAMP, ParticleKey::co, copy_particle_key(), ParticleChildModifierContext::cpa, DEG_get_ctime(), ParticleSimulationData::depsgraph, ParticleData::dietime, do_child_modifiers(), ELEM, ParticleSettings::end, ParticleSettings::flag, ParticleSystem::flag, RenderData::frs_sec, ChildParticle::fuv, interp_qt_qtqt(), interp_v3_v3v3(), ParticleSystem::lattice_deform_data, ParticleSystem::lattice_strength, ParticleData::lifetime, ParticleSettings::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, ParticleSettings::phystype, 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, ParticleSettings::sta, 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(), and set_keyed_keys().

◆ psys_get_texture()

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

Definition at line 4331 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, ParticleSettings::distr, 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, ParticleSettings::mtex, 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, Mesh::texspace_location, Mesh::texspace_size, 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 1749 of file particle.cc.

References quad, and w().

◆ psys_interpolate_particle()

◆ psys_interpolate_uvs()

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

Definition at line 1726 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()

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()

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()

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 660 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()

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

Definition at line 1805 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 1834 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()

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 2175 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()

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

◆ psys_thread_context_init_path()

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 2678 of file particle.cc.

References ParticleThreadContext::between, BKE_curvemapping_changed_all(), BKE_curvemapping_copy(), ParticleThreadContext::cfra, ParticleSettings::child_flag, ParticleSettings::child_percent, ParticleSettings::child_render_percent, ParticleSettings::childtype, ParticleSettings::clumpcurve, ParticleThreadContext::clumpcurve, ParticleSimulationData::depsgraph, ParticleSettings::disp, ParticleEditSettings::draw_step, ParticleSettings::draw_step, ParticleThreadContext::editupdate, ELEM, ParticleThreadContext::extra_segments, ParticleEditSettings::flag, ParticleSettings::flag, float, ParticleSettings::kink, ParticleSettings::kink_extra_steps, max_ii(), ParticleThreadContext::mesh, ParticleThreadContext::parent_pass, ParticleSettings::parents, 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, ToolSettings::particle, 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, ParticleSettings::ren_step, ParticleSettings::roughcurve, ParticleThreadContext::roughcurve, ParticleThreadContext::segments, ParticleThreadContext::sim, Scene::toolsettings, ParticleSystem::totchild, ParticleThreadContext::totchild, ParticleThreadContext::totparent, ParticleSettings::twistcurve, 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()

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

Definition at line 2794 of file particle.cc.

References add_v3_v3(), ParticleThreadContext::between, BLI_assert, BLI_listbase_clear(), ParticleThreadContext::cfra, ParticleSystem::childcache, ParticleSettings::childflat, ParticleSettings::childrad, CLAMP, ParticleCacheKey::co, copy_qt_qt(), copy_v3_v3(), ParticleTask::ctx, ParticleSimulationData::depsgraph, DMCACHE_ISCHILD, DMCACHE_NOTFOUND, do_path_effectors(), dot_v3v3(), ParticleThreadContext::editupdate, ParticleTexture::effector, ELEM, ParticleTexture::exist, ParticleData::flag, ParticleSettings::flag, PTCacheEditPoint::flag, float, ChildParticle::foffset, ParticleData::foffset, ParticleSettings::from, ChildParticle::fuv, ParticleData::fuv, get_child_modifier_parameters(), i, 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, ParticleSettings::parents, PARS_UNEXIST, ParticleSystem::part, PART_CHILD_EFFECT, PART_CHILD_LONG_HAIR, PART_FROM_FACE, ParticleSystem::particles, ParticleSettings::parting_fac, ParticleSettings::parting_max, ParticleSettings::parting_min, 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 3891 of file particle.cc.

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

Referenced by save_hair().

◆ psys_w_to_origspace()

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

Definition at line 1798 of file particle.cc.

References w().

Referenced by psys_origspace_to_w(), and psys_particle_dm_face_lookup().

◆ triatomat()

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

Definition at line 3761 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 5285 of file particle.cc.

Referenced by BKE_particle_batch_cache_dirty_tag(), and DRW_module_init().

◆ BKE_particle_batch_cache_free_cb

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

Definition at line 5286 of file particle.cc.

Referenced by BKE_particle_batch_cache_free(), and DRW_module_init().

◆ IDType_ID_PA

IDTypeInfo IDType_ID_PA
Initial value:
= {
ParticleSettings::id_type,
"ParticleSettings",
N_("particles"),
0,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
}
#define BLT_I18NCONTEXT_ID_PARTICLESETTINGS
#define FILTER_ID_OB
Definition DNA_ID.h:1214
#define FILTER_ID_GR
Definition DNA_ID.h:1203
#define FILTER_ID_TE
Definition DNA_ID.h:1220
#define FILTER_ID_PA
Definition DNA_ID.h:1224
@ INDEX_ID_PA
Definition DNA_ID.h:1318
static void particle_settings_blend_read_after_liblink(BlendLibReader *, ID *id)
Definition particle.cc:374
static void particle_settings_blend_read_data(BlendDataReader *reader, ID *id)
Definition particle.cc:322
static void particle_settings_init(ID *id)
Definition particle.cc:92
static void particle_settings_copy_data(Main *, std::optional< Library * >, ID *id_dst, const ID *id_src, const int)
Definition particle.cc:104
static void particle_settings_free_data(ID *id)
Definition particle.cc:143
static void particle_settings_blend_write(BlendWriter *writer, ID *id, const void *id_address)
Definition particle.cc:261
static void particle_settings_foreach_id(ID *id, LibraryForeachIDData *data)
Definition particle.cc:172
#define N_(msgid)

Definition at line 383 of file particle.cc.

◆ PSYS_FRAND_BASE

float PSYS_FRAND_BASE[PSYS_FRAND_COUNT]

Definition at line 416 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 415 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 414 of file particle.cc.

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