Code comments regarding last commit (forgotten to add before)
authorLuca Rood <dev@lucarood.com>
Wed, 5 Jul 2017 14:16:57 +0000 (16:16 +0200)
committerLuca Rood <dev@lucarood.com>
Wed, 5 Jul 2017 14:19:41 +0000 (16:19 +0200)
Using an arbitrary face as the source of the UV data is mostly fine, as
vertices on seams will generally map to different parts of the texture
that have the same color.

This is regarding fed853ea782211298c902759ec8cd8e455d8b41d

source/blender/blenkernel/intern/particle.c
source/blender/blenkernel/intern/particle_distribute.c
source/blender/makesrna/intern/rna_particle.c

index e101bd649317475f411eee0bd6db84ef16fe8947..416d63cfefb7aeaf448c711a9fc1a73df57e5caf 100644 (file)
@@ -3410,6 +3410,9 @@ static int get_particle_uv(DerivedMesh *dm, ParticleData *pa, int index, const f
                if (from_vert) {
                        mf = dm->getTessFaceDataArray(dm, CD_MFACE);
 
+                       /* This finds the first face to contain the emitting vertex,
+                        * this is not ideal, but is mostly fine as UV seams generally
+                        * map to equal-colored parts of a texture */
                        for (int j = 0; j < dm->getNumTessFaces(dm); j++, mf++) {
                                if (ELEM(i, mf->v1, mf->v2, mf->v3, mf->v4)) {
                                        i = j;
index 09da5fe72456bfb6e845e0137434062cdeb93e54..4f758bde7f9d5dfc55159b7d12a6762990407670 100644 (file)
@@ -440,6 +440,10 @@ static void distribute_from_verts_exec(ParticleTask *thread, ParticleData *pa, i
        zero_v4(pa->fuv);
 
        if (pa->num != DMCACHE_NOTFOUND && pa->num < ctx->dm->getNumVerts(ctx->dm)) {
+
+               /* This finds the first face to contain the emitting vertex,
+                * this is not ideal, but is mostly fine as UV seams generally
+                * map to equal-colored parts of a texture */
                for (int i = 0; i < ctx->dm->getNumTessFaces(ctx->dm); i++, mface++) {
                        if (ELEM(pa->num, mface->v1, mface->v2, mface->v3, mface->v4)) {
                                unsigned int *vert = &mface->v1;
index 0dac797824d35b3fedbcc6a37791d40651ec12b0..00104b8667da98fcb722128e2bd3ce7409f9508b 100644 (file)
@@ -492,6 +492,9 @@ static int rna_ParticleSystem_tessfaceidx_on_emitter(ParticleSystem *particlesys
 
                                *r_fuv = &particle->fuv;
 
+                               /* This finds the first face to contain the emitting vertex,
+                                * this is not ideal, but is mostly fine as UV seams generally
+                                * map to equal-colored parts of a texture */
                                for (int i = 0; i < totface; i++, mface++) {
                                        if (ELEM(num, mface->v1, mface->v2, mface->v3, mface->v4)) {
                                                return i;
@@ -531,6 +534,9 @@ static int rna_ParticleSystem_tessfaceidx_on_emitter(ParticleSystem *particlesys
 
                                        *r_fuv = &parent->fuv;
 
+                                       /* This finds the first face to contain the emitting vertex,
+                                        * this is not ideal, but is mostly fine as UV seams generally
+                                        * map to equal-colored parts of a texture */
                                        for (int i = 0; i < totface; i++, mface++) {
                                                if (ELEM(num, mface->v1, mface->v2, mface->v3, mface->v4)) {
                                                        return i;