Probe: Small UI improvments

-Better falloff default.
-Add clip distance visualisation.
-Reformat UI and add a display panel.
This commit is contained in:
Clément Foucault 2017-06-10 00:36:33 +02:00
parent b35f562e18
commit 0a5e9e2f56
5 changed files with 76 additions and 23 deletions

@ -62,23 +62,23 @@ class DATA_PT_probe(DataButtonsPanel, Panel):
layout.prop(probe, "type", expand=True)
layout.label("Influence:")
layout.prop(probe, "influence_type", expand=True)
split = layout.split()
col = split.column(align=True)
col.label("Influence:")
col.prop(probe, "influence_type", text="")
if probe.influence_type == 'ELIPSOID':
layout.prop(probe, "influence_distance", "Radius")
layout.prop(probe, "falloff")
col.prop(probe, "influence_distance", "Radius")
else:
layout.prop(probe, "influence_distance", "Size")
layout.prop(probe, "falloff")
col.prop(probe, "influence_distance", "Size")
layout.prop(probe, "show_influence")
layout.separator()
col.prop(probe, "falloff")
layout.label("Clipping:")
row = layout.row(align=True)
row.prop(probe, "clip_start", text="Start")
row.prop(probe, "clip_end", text="End")
col = split.column(align=True)
col.label("Clipping:")
col.prop(probe, "clip_start", text="Start")
col.prop(probe, "clip_end", text="End")
class DATA_PT_parallax(DataButtonsPanel, Panel):
@ -104,13 +104,34 @@ class DATA_PT_parallax(DataButtonsPanel, Panel):
else:
col.prop(probe, "parallax_distance", "Size")
class DATA_PT_display(DataButtonsPanel, Panel):
bl_label = "Display"
COMPAT_ENGINES = {'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
ob = context.object
probe = context.probe
split = layout.split()
col = split.column()
col.prop(probe, "show_influence")
col = split.column()
col.prop(probe, "show_parallax")
col = split.column()
col.prop(probe, "show_clip")
classes = (
DATA_PT_context_probe,
DATA_PT_probe,
DATA_PT_parallax,
DATA_PT_display,
)
if __name__ == "__main__": # only for live edit.

@ -46,7 +46,7 @@ void BKE_probe_init(Probe *probe)
probe->distinf = 5.0f;
probe->distpar = 5.0f;
probe->falloff = 0.75f;
probe->falloff = 0.2f;
probe->clipsta = 1.0f;
probe->clipend = 40.0f;
}

@ -1430,21 +1430,46 @@ static void DRW_shgroup_probe(OBJECT_StorageList *stl, Object *ob, SceneLayer *s
}
if ((prb->flag & PRB_SHOW_PARALLAX) != 0) {
if ((prb->flag & PRB_CUSTOM_PARALLAX) != 0) {
float (*obmat)[4];
float (*obmat)[4], *dist;
if ((prb->flag & PRB_CUSTOM_PARALLAX) != 0) {
dist = &prb->distpar;
/* TODO object parallax */
obmat = ob->obmat;
if (prb->parallax_type == PROBE_BOX) {
DRW_shgroup_call_dynamic_add(stl->g_data->cube, color, &prb->distpar, obmat);
}
else {
DRW_shgroup_call_dynamic_add(stl->g_data->sphere, color, &prb->distpar, obmat);
dist = &prb->distinf;
obmat = ob->obmat;
}
if (prb->parallax_type == PROBE_BOX) {
DRW_shgroup_call_dynamic_add(stl->g_data->cube, color, &dist, obmat);
}
else {
DRW_shgroup_call_dynamic_add(stl->g_data->sphere, color, &dist, obmat);
}
}
if ((prb->flag & PRB_SHOW_CLIP_DIST) != 0) {
static const float cubefacemat[6][4][4] = {
{{0.0, 0.0, -1.0, 0.0}, {0.0, -1.0, 0.0, 0.0}, {-1.0, 0.0, 0.0, 0.0}, {0.0, 0.0, 0.0, 1.0}},
{{0.0, 0.0, 1.0, 0.0}, {0.0, -1.0, 0.0, 0.0}, {1.0, 0.0, 0.0, 0.0}, {0.0, 0.0, 0.0, 1.0}},
{{1.0, 0.0, 0.0, 0.0}, {0.0, 0.0, -1.0, 0.0}, {0.0, 1.0, 0.0, 0.0}, {0.0, 0.0, 0.0, 1.0}},
{{1.0, 0.0, 0.0, 0.0}, {0.0, 0.0, 1.0, 0.0}, {0.0, -1.0, 0.0, 0.0}, {0.0, 0.0, 0.0, 1.0}},
{{1.0, 0.0, 0.0, 0.0}, {0.0, -1.0, 0.0, 0.0}, {0.0, 0.0, -1.0, 0.0}, {0.0, 0.0, 0.0, 1.0}},
{{-1.0, 0.0, 0.0, 0.0}, {0.0, -1.0, 0.0, 0.0}, {0.0, 0.0, 1.0, 0.0}, {0.0, 0.0, 0.0, 1.0}},
};
for (int i = 0; i < 6; ++i) {
normalize_m4_m4(prb->clipmat[i], ob->obmat);
// invert_m4(prb->clipmat[i]);
mul_m4_m4m4(prb->clipmat[i], prb->clipmat[i], cubefacemat[i]);
DRW_shgroup_call_dynamic_add(stl->g_data->lamp_buflimit, color, &prb->clipsta, &prb->clipend, prb->clipmat[i]);
DRW_shgroup_call_dynamic_add(stl->g_data->lamp_buflimit_points, color, &prb->clipsta, &prb->clipend, prb->clipmat[i]);
}
}
DRW_shgroup_call_dynamic_add(stl->g_data->lamp_center_group, ob->obmat[3]);
/* Line and point going to the ground */

@ -59,6 +59,7 @@ typedef struct Probe {
/* Runtime display data */
float distfalloff, pad;
float clipmat[6][4][4];
} Probe;
/* Probe->type */
@ -73,6 +74,7 @@ enum {
PRB_CUSTOM_PARALLAX = (1 << 0),
PRB_SHOW_INFLUENCE = (1 << 1),
PRB_SHOW_PARALLAX = (1 << 2),
PRB_SHOW_CLIP_DIST = (1 << 3),
};
/* Probe->display */

@ -97,6 +97,11 @@ static void rna_def_probe(BlenderRNA *brna)
"Probe clip end, beyond which objects will not appear in reflections");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_Probe_recalc");
prop = RNA_def_property(srna, "show_clip", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PRB_SHOW_CLIP_DIST);
RNA_def_property_ui_text(prop, "Clipping", "Show the clipping distances in the 3D view");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, NULL);
prop = RNA_def_property(srna, "influence_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "attenuation_type");
RNA_def_property_enum_items(prop, parallax_type_items);
@ -105,7 +110,7 @@ static void rna_def_probe(BlenderRNA *brna)
prop = RNA_def_property(srna, "show_influence", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PRB_SHOW_INFLUENCE);
RNA_def_property_ui_text(prop, "Show Influence Volume", "Show the influence volume in the 3D view");
RNA_def_property_ui_text(prop, "Influence", "Show the influence volume in the 3D view");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, NULL);
prop = RNA_def_property(srna, "influence_distance", PROP_FLOAT, PROP_DISTANCE);
@ -126,7 +131,7 @@ static void rna_def_probe(BlenderRNA *brna)
prop = RNA_def_property(srna, "show_parallax", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PRB_SHOW_PARALLAX);
RNA_def_property_ui_text(prop, "Show Parallax Volume", "Show the parallax correction volume in the 3D view");
RNA_def_property_ui_text(prop, "Parallax", "Show the parallax correction volume in the 3D view");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, NULL);
prop = RNA_def_property(srna, "parallax_type", PROP_ENUM, PROP_NONE);