Fix T47147: small particles incorrectly rendered as large particles (particle size influenced by texture).
In fact, code would behave strangely here with any negative value, applying a 'wrapped positive clamping' (comes from original 2.5 commit feature, rBfafbd9d71b95776d1c7583476de74fccefab7f10)... This commit is conservative - it keeps same behavior for all particle properties affected by textures, except for size and length, where we apply a real [0, 1] clamping. Easy to change in future in case new odd cases popup.
This commit is contained in:
parent
8d9ffa1a6f
commit
16f8444d9d
Notes:
blender-bot
2023-09-13 08:48:34 +02:00
Referenced by issue #47147, small particles incorrectly rendered as large particles (particle size influenced by texture)
|
@ -3426,6 +3426,11 @@ static int get_particle_uv(DerivedMesh *dm, ParticleData *pa, int face_index, co
|
|||
} (void)0
|
||||
|
||||
#define CLAMP_PARTICLE_TEXTURE_POS(type, pvalue) \
|
||||
if (event & type) { \
|
||||
CLAMP(pvalue, 0.0f, 1.0f); \
|
||||
} (void)0
|
||||
|
||||
#define CLAMP_WARP_PARTICLE_TEXTURE_POS(type, pvalue) \
|
||||
if (event & type) { \
|
||||
if (pvalue < 0.0f) \
|
||||
pvalue = 1.0f + pvalue; \
|
||||
|
@ -3498,11 +3503,11 @@ static void get_cpa_texture(DerivedMesh *dm, ParticleSystem *psys, ParticleSetti
|
|||
}
|
||||
|
||||
CLAMP_PARTICLE_TEXTURE_POS(PAMAP_LENGTH, ptex->length);
|
||||
CLAMP_PARTICLE_TEXTURE_POS(PAMAP_CLUMP, ptex->clump);
|
||||
CLAMP_PARTICLE_TEXTURE_POS(PAMAP_KINK_AMP, ptex->kink_amp);
|
||||
CLAMP_PARTICLE_TEXTURE_POS(PAMAP_KINK_FREQ, ptex->kink_freq);
|
||||
CLAMP_PARTICLE_TEXTURE_POS(PAMAP_ROUGH, ptex->rough1);
|
||||
CLAMP_PARTICLE_TEXTURE_POS(PAMAP_DENS, ptex->exist);
|
||||
CLAMP_WARP_PARTICLE_TEXTURE_POS(PAMAP_CLUMP, ptex->clump);
|
||||
CLAMP_WARP_PARTICLE_TEXTURE_POS(PAMAP_KINK_AMP, ptex->kink_amp);
|
||||
CLAMP_WARP_PARTICLE_TEXTURE_POS(PAMAP_KINK_FREQ, ptex->kink_freq);
|
||||
CLAMP_WARP_PARTICLE_TEXTURE_POS(PAMAP_ROUGH, ptex->rough1);
|
||||
CLAMP_WARP_PARTICLE_TEXTURE_POS(PAMAP_DENS, ptex->exist);
|
||||
}
|
||||
void psys_get_texture(ParticleSimulationData *sim, ParticleData *pa, ParticleTexture *ptex, int event, float cfra)
|
||||
{
|
||||
|
@ -3592,14 +3597,14 @@ void psys_get_texture(ParticleSimulationData *sim, ParticleData *pa, ParticleTex
|
|||
}
|
||||
}
|
||||
|
||||
CLAMP_PARTICLE_TEXTURE_POS(PAMAP_TIME, ptex->time);
|
||||
CLAMP_PARTICLE_TEXTURE_POS(PAMAP_LIFE, ptex->life);
|
||||
CLAMP_PARTICLE_TEXTURE_POS(PAMAP_DENS, ptex->exist);
|
||||
CLAMP_WARP_PARTICLE_TEXTURE_POS(PAMAP_TIME, ptex->time);
|
||||
CLAMP_WARP_PARTICLE_TEXTURE_POS(PAMAP_LIFE, ptex->life);
|
||||
CLAMP_WARP_PARTICLE_TEXTURE_POS(PAMAP_DENS, ptex->exist);
|
||||
CLAMP_PARTICLE_TEXTURE_POS(PAMAP_SIZE, ptex->size);
|
||||
CLAMP_PARTICLE_TEXTURE_POSNEG(PAMAP_IVEL, ptex->ivel);
|
||||
CLAMP_PARTICLE_TEXTURE_POSNEG(PAMAP_FIELD, ptex->field);
|
||||
CLAMP_PARTICLE_TEXTURE_POSNEG(PAMAP_GRAVITY, ptex->gravity);
|
||||
CLAMP_PARTICLE_TEXTURE_POS(PAMAP_DAMP, ptex->damp);
|
||||
CLAMP_WARP_PARTICLE_TEXTURE_POS(PAMAP_DAMP, ptex->damp);
|
||||
CLAMP_PARTICLE_TEXTURE_POS(PAMAP_LENGTH, ptex->length);
|
||||
}
|
||||
/************************************************/
|
||||
|
|
Loading…
Reference in New Issue