Particle: Remove Billboard Particle code
authorClément Foucault <foucault.clem@gmail.com>
Fri, 15 Mar 2019 19:56:29 +0000 (20:56 +0100)
committerClément Foucault <foucault.clem@gmail.com>
Fri, 15 Mar 2019 21:33:02 +0000 (22:33 +0100)
The billboard particles were only used by Blender Internal. So until it is
supported by Cycles of Eevee there is no reason to keep it in the code and
UI.

Fix T61695 Billboard particles not displaying in Eevee viewport, render

release/scripts/startup/bl_ui/properties_particle.py
source/blender/blenkernel/BKE_particle.h
source/blender/blenkernel/intern/particle.c
source/blender/blenloader/intern/versioning_280.c
source/blender/makesdna/DNA_particle_types.h
source/blender/makesrna/intern/rna_particle.c

index c85b800..3d25829 100644 (file)
@@ -1480,98 +1480,6 @@ class PARTICLE_PT_render_collection_use_count(ParticleButtonsPanel, Panel):
             row.prop(weight, "count")
 
 
-class PARTICLE_PT_render_billboards_alignment(ParticleButtonsPanel, Panel):
-    bl_label = "Billboard Alignment"
-    bl_parent_id = "PARTICLE_PT_render"
-    bl_options = {'DEFAULT_CLOSED'}
-    COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
-
-    @classmethod
-    def poll(cls, context):
-        part = particle_get_settings(context)
-        return part.render_type == 'BILLBOARD'
-
-    def draw(self, context):
-        layout = self.layout
-        layout.use_property_split = True
-
-        part = particle_get_settings(context)
-
-        col = layout.column()
-
-        col.prop(part, "billboard_align", text="Align To")
-        col.prop(part, "lock_billboard", text="Lock Axis")
-        col.prop(part, "billboard_object")
-
-
-class PARTICLE_PT_render_billboards_tilt(ParticleButtonsPanel, Panel):
-    bl_label = "Billboard Tilt"
-    bl_parent_id = "PARTICLE_PT_render"
-    bl_options = {'DEFAULT_CLOSED'}
-    COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
-
-    @classmethod
-    def poll(cls, context):
-        part = particle_get_settings(context)
-        return part.render_type == 'BILLBOARD'
-
-    def draw(self, context):
-        layout = self.layout
-        layout.use_property_split = True
-
-        part = particle_get_settings(context)
-
-        col = layout.column()
-
-        sub = col.column(align=True)
-        sub.prop(part, "billboard_tilt", text="Angle", slider=True)
-        sub.prop(part, "billboard_tilt_random", text="Random", slider=True)
-
-        sub = col.column(align=True)
-        sub.prop(part, "billboard_offset")
-        col.prop(part, "billboard_size", text="Scale")
-        if part.billboard_align == 'VEL':
-            col = col.column(align=True)
-            col.prop(part, "billboard_velocity_head", text="Velocity ScaleHead")
-            col.prop(part, "billboard_velocity_tail", text="Tail")
-
-
-class PARTICLE_PT_render_billboards_uv(ParticleButtonsPanel, Panel):
-    bl_label = "Billboard UVs"
-    bl_parent_id = "PARTICLE_PT_render"
-    bl_options = {'DEFAULT_CLOSED'}
-    COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
-
-    @classmethod
-    def poll(cls, context):
-        part = particle_get_settings(context)
-        return part.render_type == 'BILLBOARD'
-
-    def draw(self, context):
-        layout = self.layout
-        layout.use_property_split = True
-
-        psys = context.particle_system
-        ob = context.object
-        part = particle_get_settings(context)
-
-        col = layout.column()
-
-        if psys:
-            col.prop_search(psys, "billboard_normal_uv", ob.data, "uv_layers")
-            col.prop_search(psys, "billboard_time_index_uv", ob.data, "uv_layers")
-
-        col.prop(part, "billboard_uv_split", text="Split UVs")
-
-        if psys:
-            sub = col.column()
-            sub.active = part.billboard_uv_split > 1
-            sub.prop_search(psys, "billboard_split_uv", ob.data, "uv_layers")
-
-        sub.prop(part, "billboard_animation")
-        sub.prop(part, "billboard_offset_split")
-
-
 class PARTICLE_PT_render_trails(ParticleButtonsPanel, Panel):
     bl_label = "Trails"
     bl_parent_id = "PARTICLE_PT_render"
@@ -2186,8 +2094,6 @@ classes = (
     PARTICLE_PT_render_object,
     PARTICLE_PT_render_collection,
     PARTICLE_PT_render_collection_use_count,
-    PARTICLE_PT_render_billboards_tilt,
-    PARTICLE_PT_render_billboards_uv,
     PARTICLE_PT_render_trails,
     PARTICLE_PT_render_extra,
     PARTICLE_PT_draw,
index 19036e6..56f6482 100644 (file)
@@ -172,19 +172,6 @@ typedef struct ParticleTask {
        int begin, end;
 } ParticleTask;
 
-typedef struct ParticleBillboardData {
-       struct Object *ob;
-       float vec[3], vel[3];
-       float offset[2];
-       float size[2];
-       float tilt, random, time;
-       int uv[3];
-       int lock, num;
-       int totnum;
-       int lifetime;
-       short align, uv_split, anim, split_offset;
-} ParticleBillboardData;
-
 typedef struct ParticleCollisionElement {
        /* pointers to original data */
        float *x[3], *v[3];
@@ -391,7 +378,6 @@ void psys_thread_context_free(struct ParticleThreadContext *ctx);
 void psys_tasks_create(struct ParticleThreadContext *ctx, int startpart, int endpart, struct ParticleTask **r_tasks, int *r_numtasks);
 void psys_tasks_free(struct ParticleTask *tasks, int numtasks);
 
-void psys_make_billboard(ParticleBillboardData *bb, float xvec[3], float yvec[3], float zvec[3], float center[3]);
 void psys_apply_hair_lattice(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, struct ParticleSystem *psys);
 
 /* particle_system.c */
index da2975d..bdf0b23 100644 (file)
@@ -3150,8 +3150,6 @@ static void default_particle_settings(ParticleSettings *part)
        part->draw_as = PART_DRAW_REND;
        part->ren_as = PART_DRAW_HALO;
        part->bb_uv_split = 1;
-       part->bb_align = PART_BB_VIEW;
-       part->bb_split_offset = PART_BB_OFF_LINEAR;
        part->flag = PART_EDISTR | PART_TRAND | PART_HIDE_ADVANCED_HAIR;
 
        part->sta = 1.0;
@@ -4207,88 +4205,6 @@ void psys_get_dupli_path_transform(ParticleSimulationData *sim, ParticleData *pa
        *scale = len;
 }
 
-void psys_make_billboard(ParticleBillboardData *bb, float xvec[3], float yvec[3], float zvec[3], float center[3])
-{
-       float onevec[3] = {0.0f, 0.0f, 0.0f}, tvec[3], tvec2[3];
-
-       xvec[0] = 1.0f; xvec[1] = 0.0f; xvec[2] = 0.0f;
-       yvec[0] = 0.0f; yvec[1] = 1.0f; yvec[2] = 0.0f;
-
-       /* can happen with bad pointcache or physics calculation
-        * since this becomes geometry, nan's and inf's crash raytrace code.
-        * better not allow this. */
-       if (!is_finite_v3(bb->vec) || !is_finite_v3(bb->vec)) {
-               zero_v3(bb->vec);
-               zero_v3(bb->vel);
-
-               zero_v3(xvec);
-               zero_v3(yvec);
-               zero_v3(zvec);
-               zero_v3(center);
-
-               return;
-       }
-
-       if (bb->align < PART_BB_VIEW)
-               onevec[bb->align] = 1.0f;
-
-       if (bb->lock && (bb->align == PART_BB_VIEW)) {
-               normalize_v3_v3(xvec, bb->ob->obmat[0]);
-               normalize_v3_v3(yvec, bb->ob->obmat[1]);
-               normalize_v3_v3(zvec, bb->ob->obmat[2]);
-       }
-       else if (bb->align == PART_BB_VEL) {
-               float temp[3];
-
-               normalize_v3_v3(temp, bb->vel);
-
-               sub_v3_v3v3(zvec, bb->ob->obmat[3], bb->vec);
-
-               if (bb->lock) {
-                       float fac = -dot_v3v3(zvec, temp);
-
-                       madd_v3_v3fl(zvec, temp, fac);
-               }
-               normalize_v3(zvec);
-
-               cross_v3_v3v3(xvec, temp, zvec);
-               normalize_v3(xvec);
-
-               cross_v3_v3v3(yvec, zvec, xvec);
-       }
-       else {
-               sub_v3_v3v3(zvec, bb->ob->obmat[3], bb->vec);
-               if (bb->lock)
-                       zvec[bb->align] = 0.0f;
-               normalize_v3(zvec);
-
-               if (bb->align < PART_BB_VIEW)
-                       cross_v3_v3v3(xvec, onevec, zvec);
-               else
-                       cross_v3_v3v3(xvec, bb->ob->obmat[1], zvec);
-               normalize_v3(xvec);
-
-               cross_v3_v3v3(yvec, zvec, xvec);
-       }
-
-       copy_v3_v3(tvec, xvec);
-       copy_v3_v3(tvec2, yvec);
-
-       mul_v3_fl(xvec, cosf(bb->tilt * (float)M_PI));
-       mul_v3_fl(tvec2, sinf(bb->tilt * (float)M_PI));
-       add_v3_v3(xvec, tvec2);
-
-       mul_v3_fl(yvec, cosf(bb->tilt * (float)M_PI));
-       mul_v3_fl(tvec, -sinf(bb->tilt * (float)M_PI));
-       add_v3_v3(yvec, tvec);
-
-       mul_v3_fl(xvec, bb->size[0]);
-       mul_v3_fl(yvec, bb->size[1]);
-
-       madd_v3_v3v3fl(center, bb->vec, xvec, bb->offset[0]);
-       madd_v3_v3fl(center, yvec, bb->offset[1]);
-}
-
 void psys_apply_hair_lattice(Depsgraph *depsgraph, Scene *scene, Object *ob, ParticleSystem *psys)
 {
        ParticleSimulationData sim = {0};
index b0b389c..71341b4 100644 (file)
@@ -2910,5 +2910,15 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
 
        {
                /* Versioning code until next subversion bump goes here. */
+
+               LISTBASE_FOREACH (ParticleSettings *, part, &bmain->particles) {
+                       /* Replace deprecated PART_DRAW_BB by PART_DRAW_NOT */
+                       if (part->ren_as == PART_DRAW_BB) {
+                               part->ren_as = PART_DRAW_NOT;
+                       }
+                       if (part->draw_as == PART_DRAW_BB) {
+                               part->draw_as = PART_DRAW_NOT;
+                       }
+               }
        }
 }
index dc6e9dd..68bc79d 100644 (file)
@@ -206,8 +206,8 @@ typedef struct ParticleSettings {
        short kink, kink_axis;
 
        /* billboards */
-       short bb_align, bb_uv_split, bb_anim, bb_split_offset;
-       float bb_tilt, bb_rand_tilt, bb_offset[2], bb_size[2], bb_vel_head, bb_vel_tail;
+       short bb_align, bb_uv_split, bb_anim, bb_split_offset DNA_DEPRECATED;
+       float bb_tilt, bb_rand_tilt, bb_offset[2], bb_size[2], bb_vel_head, bb_vel_tail DNA_DEPRECATED;
 
        /* draw color */
        float color_vec_max;
@@ -362,7 +362,7 @@ typedef struct ParticleSystem {
        char _pad1[6];
 
        /** Billboard uv name, MAX_CUSTOMDATA_LAYER_NAME. */
-       char bb_uvname[3][64];
+       char bb_uvname[3][64] DNA_DEPRECATED;
 
        /* if you change these remember to update array lengths to PSYS_TOT_VG! */
        /** Vertex groups, 0==disable, 1==starting index. */
@@ -412,7 +412,7 @@ typedef enum eParticleDrawFlag {
        PART_DRAW_HEALTH        = (1 << 4),
        PART_ABS_PATH_TIME      = (1 << 5),
        PART_DRAW_COUNT_GR      = (1 << 6),
-       PART_DRAW_BB_LOCK       = (1 << 7), /* used with billboards */
+       PART_DRAW_BB_LOCK       = (1 << 7), /* used with billboards */ /* DEPRECATED */
        PART_DRAW_ROTATE_OB     = (1 << 7), /* used with instance object/collection */
        PART_DRAW_PARENT        = (1 << 8),
        PART_DRAW_NUM           = (1 << 9),
@@ -530,24 +530,6 @@ typedef enum eParticleShapeFlag {
 /* part->time_flag */
 #define PART_TIME_AUTOSF       1 /* Automatic subframes */
 
-/* part->bb_align */
-#define PART_BB_X              0
-#define PART_BB_Y              1
-#define PART_BB_Z              2
-#define PART_BB_VIEW   3
-#define PART_BB_VEL            4
-
-/* part->bb_anim */
-#define PART_BB_ANIM_NONE      0
-#define PART_BB_ANIM_AGE       1
-#define PART_BB_ANIM_ANGLE     2
-#define PART_BB_ANIM_FRAME     3
-
-/* part->bb_split_offset */
-#define PART_BB_OFF_NONE       0
-#define PART_BB_OFF_LINEAR     1
-#define PART_BB_OFF_RANDOM     2
-
 /* part->draw_as */
 /* part->ren_as*/
 #define PART_DRAW_NOT          0
@@ -560,7 +542,7 @@ typedef enum eParticleShapeFlag {
 #define PART_DRAW_PATH         6
 #define PART_DRAW_OB           7
 #define PART_DRAW_GR           8
-#define PART_DRAW_BB           9
+#define PART_DRAW_BB           9 /* deprecated */
 #define PART_DRAW_REND         10
 
 /* part->integrator */
index 4e1a539..5753386 100644 (file)
@@ -108,7 +108,6 @@ static const EnumPropertyItem part_ren_as_items[] = {
        {PART_DRAW_PATH, "PATH", 0, "Path", ""},
        {PART_DRAW_OB, "OBJECT", 0, "Object", ""},
        {PART_DRAW_GR, "COLLECTION", 0, "Collection", ""},
-       {PART_DRAW_BB, "BILLBOARD", 0, "Billboard", ""},
        {0, NULL, 0, NULL, NULL},
 };
 
@@ -2062,30 +2061,6 @@ static void rna_def_particle_settings(BlenderRNA *brna)
                {0, NULL, 0, NULL, NULL},
        };
 
-       static const EnumPropertyItem bb_align_items[] = {
-               {PART_BB_X, "X", 0, "X", ""},
-               {PART_BB_Y, "Y", 0, "Y", ""},
-               {PART_BB_Z, "Z", 0, "Z", ""},
-               {PART_BB_VIEW, "VIEW", 0, "View", ""},
-               {PART_BB_VEL, "VEL", 0, "Velocity", ""},
-               {0, NULL, 0, NULL, NULL},
-       };
-
-       static const EnumPropertyItem bb_anim_items[] = {
-               {PART_BB_ANIM_NONE, "NONE", 0, "None", ""},
-               {PART_BB_ANIM_AGE, "AGE", 0, "Age", ""},
-               {PART_BB_ANIM_FRAME, "FRAME", 0, "Frame", ""},
-               {PART_BB_ANIM_ANGLE, "ANGLE", 0, "Angle", ""},
-               {0, NULL, 0, NULL, NULL},
-       };
-
-       static const EnumPropertyItem bb_split_offset_items[] = {
-               {PART_BB_OFF_NONE, "NONE", 0, "None", ""},
-               {PART_BB_OFF_LINEAR, "LINEAR", 0, "Linear", ""},
-               {PART_BB_OFF_RANDOM, "RANDOM", 0, "Random", ""},
-               {0, NULL, 0, NULL, NULL},
-       };
-
        static const EnumPropertyItem draw_col_items[] = {
                {PART_DRAW_COL_NONE, "NONE", 0, "None", ""},
                {PART_DRAW_COL_MAT, "MATERIAL", 0, "Material", ""},
@@ -2481,79 +2456,12 @@ static void rna_def_particle_settings(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Axis", "Which axis to use for offset");
        RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
 
-       /* billboards */
-       prop = RNA_def_property(srna, "lock_billboard", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_BB_LOCK);
-       RNA_def_property_ui_text(prop, "Lock Billboard", "Lock the billboards align axis");
-       RNA_def_property_update(prop, 0, "rna_Particle_redo");
-
-       prop = RNA_def_property(srna, "billboard_align", PROP_ENUM, PROP_NONE);
-       RNA_def_property_enum_sdna(prop, NULL, "bb_align");
-       RNA_def_property_enum_items(prop, bb_align_items);
-       RNA_def_property_ui_text(prop, "Align to", "In respect to what the billboards are aligned");
-       RNA_def_property_update(prop, 0, "rna_Particle_redo");
-
-       prop = RNA_def_property(srna, "billboard_uv_split", PROP_INT, PROP_NONE);
-       RNA_def_property_int_sdna(prop, NULL, "bb_uv_split");
-       RNA_def_property_range(prop, 1, 100);
-       RNA_def_property_ui_range(prop, 1, 10, 1, -1);
-       RNA_def_property_ui_text(prop, "UV Split", "Number of rows/columns to split UV coordinates for billboards");
-
-       prop = RNA_def_property(srna, "billboard_animation", PROP_ENUM, PROP_NONE);
-       RNA_def_property_enum_sdna(prop, NULL, "bb_anim");
-       RNA_def_property_enum_items(prop, bb_anim_items);
-       RNA_def_property_ui_text(prop, "Animate", "How to animate billboard textures");
-
-       prop = RNA_def_property(srna, "billboard_offset_split", PROP_ENUM, PROP_NONE);
-       RNA_def_property_enum_sdna(prop, NULL, "bb_split_offset");
-       RNA_def_property_enum_items(prop, bb_split_offset_items);
-       RNA_def_property_ui_text(prop, "Offset", "How to offset billboard textures");
-
-       prop = RNA_def_property(srna, "billboard_tilt", PROP_FLOAT, PROP_NONE);
-       RNA_def_property_float_sdna(prop, NULL, "bb_tilt");
-       RNA_def_property_range(prop, -1.0f, 1.0f);
-       RNA_def_property_ui_text(prop, "Tilt", "Tilt of the billboards");
-       RNA_def_property_update(prop, 0, "rna_Particle_redo");
-
        prop = RNA_def_property(srna, "color_maximum", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "color_vec_max");
        RNA_def_property_range(prop, 0.01f, 100.0f);
        RNA_def_property_ui_text(prop, "Color Maximum", "Maximum length of the particle color vector");
        RNA_def_property_update(prop, 0, "rna_Particle_redo");
 
-       prop = RNA_def_property(srna, "billboard_tilt_random", PROP_FLOAT, PROP_FACTOR);
-       RNA_def_property_float_sdna(prop, NULL, "bb_rand_tilt");
-       RNA_def_property_range(prop, 0.0f, 1.0f);
-       RNA_def_property_ui_text(prop, "Random Tilt", "Random tilt of the billboards");
-       RNA_def_property_update(prop, 0, "rna_Particle_redo");
-
-       prop = RNA_def_property(srna, "billboard_offset", PROP_FLOAT, PROP_TRANSLATION);
-       RNA_def_property_float_sdna(prop, NULL, "bb_offset");
-       RNA_def_property_array(prop, 2);
-       RNA_def_property_range(prop, -100.0f, 100.0f);
-       RNA_def_property_ui_range(prop, -1.0, 1.0, 0.1, 3);
-       RNA_def_property_ui_text(prop, "Billboard Offset", "");
-       RNA_def_property_update(prop, 0, "rna_Particle_redo");
-
-       prop = RNA_def_property(srna, "billboard_size", PROP_FLOAT, PROP_FACTOR);
-       RNA_def_property_float_sdna(prop, NULL, "bb_size");
-       RNA_def_property_array(prop, 2);
-       RNA_def_property_range(prop, 0.001f, 10.0f);
-       RNA_def_property_ui_text(prop, "Billboard Scale", "Scale billboards relative to particle size");
-       RNA_def_property_update(prop, 0, "rna_Particle_redo");
-
-       prop = RNA_def_property(srna, "billboard_velocity_head", PROP_FLOAT, PROP_FACTOR);
-       RNA_def_property_float_sdna(prop, NULL, "bb_vel_head");
-       RNA_def_property_range(prop, 0.0f, 10.0f);
-       RNA_def_property_ui_text(prop, "Billboard Velocity Head", "Scale billboards by velocity");
-       RNA_def_property_update(prop, 0, "rna_Particle_redo");
-
-       prop = RNA_def_property(srna, "billboard_velocity_tail", PROP_FLOAT, PROP_FACTOR);
-       RNA_def_property_float_sdna(prop, NULL, "bb_vel_tail");
-       RNA_def_property_range(prop, 0.0f, 10.0f);
-       RNA_def_property_ui_text(prop, "Billboard Velocity Tail", "Scale billboards by velocity");
-       RNA_def_property_update(prop, 0, "rna_Particle_redo");
-
        /* general values */
        prop = RNA_def_property(srna, "frame_start", PROP_FLOAT, PROP_TIME);
        RNA_def_property_float_sdna(prop, NULL, "sta"); /*optional if prop names are the same */
@@ -3123,13 +3031,6 @@ static void rna_def_particle_settings(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Instance Object", "Show this Object in place of particles");
        RNA_def_property_update(prop, 0, "rna_Particle_redo_dependency");
 
-       prop = RNA_def_property(srna, "billboard_object", PROP_POINTER, PROP_NONE);
-       RNA_def_property_pointer_sdna(prop, NULL, "bb_ob");
-       RNA_def_property_struct_type(prop, "Object");
-       RNA_def_property_flag(prop, PROP_EDITABLE);
-       RNA_def_property_ui_text(prop, "Billboard Object", "Billboards face this object (default is active camera)");
-       RNA_def_property_update(prop, 0, "rna_Particle_redo");
-
        /* boids */
        prop = RNA_def_property(srna, "boids", PROP_POINTER, PROP_NONE);
        RNA_def_property_struct_type(prop, "BoidSettings");
@@ -3381,22 +3282,6 @@ static void rna_def_particle_system(BlenderRNA *brna)
                                   "rna_ParticleSystem_active_particle_target_index_range");
        RNA_def_property_ui_text(prop, "Active Particle Target Index", "");
 
-       /* billboard */
-       prop = RNA_def_property(srna, "billboard_normal_uv", PROP_STRING, PROP_NONE);
-       RNA_def_property_string_sdna(prop, NULL, "bb_uvname[0]");
-       RNA_def_property_string_maxlength(prop, 32);
-       RNA_def_property_ui_text(prop, "Billboard Normal UV", "UV map to control billboard normals");
-
-       prop = RNA_def_property(srna, "billboard_time_index_uv", PROP_STRING, PROP_NONE);
-       RNA_def_property_string_sdna(prop, NULL, "bb_uvname[1]");
-       RNA_def_property_string_maxlength(prop, 32);
-       RNA_def_property_ui_text(prop, "Billboard Time Index UV", "UV map to control billboard time index (X-Y)");
-
-       prop = RNA_def_property(srna, "billboard_split_uv", PROP_STRING, PROP_NONE);
-       RNA_def_property_string_sdna(prop, NULL, "bb_uvname[2]");
-       RNA_def_property_string_maxlength(prop, 32);
-       RNA_def_property_ui_text(prop, "Billboard Split UV", "UV map to control billboard splitting");
-
        /* vertex groups */
 
        /* note, internally store as ints, access as strings */