[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [60631] trunk/blender: Derivative map baker
Sergey Sharybin
sergey.vfx at gmail.com
Wed Oct 9 17:51:15 CEST 2013
Revision: 60631
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60631
Author: nazgul
Date: 2013-10-09 15:51:14 +0000 (Wed, 09 Oct 2013)
Log Message:
-----------
Derivative map baker
Added support for derivative map baking, which
is accessable as a dedicated baker type. Works
pretty much the same as displacement map baker,
but gives you derivative map.
In fact, inernally this baker is just a filter
which applies on the result of displacement map.
Both regular and multires baking are supported.
Patch by Morten Mikkelsen and self.
Modified Paths:
--------------
trunk/blender/release/scripts/startup/bl_ui/properties_render.py
trunk/blender/source/blender/editors/object/object_bake.c
trunk/blender/source/blender/makesdna/DNA_scene_types.h
trunk/blender/source/blender/makesrna/intern/rna_scene.c
trunk/blender/source/blender/render/extern/include/RE_multires_bake.h
trunk/blender/source/blender/render/extern/include/RE_pipeline.h
trunk/blender/source/blender/render/extern/include/RE_shader_ext.h
trunk/blender/source/blender/render/intern/source/bake.c
trunk/blender/source/blender/render/intern/source/convertblender.c
trunk/blender/source/blender/render/intern/source/multires_bake.c
Modified: trunk/blender/release/scripts/startup/bl_ui/properties_render.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/properties_render.py 2013-10-09 15:36:04 UTC (rev 60630)
+++ trunk/blender/release/scripts/startup/bl_ui/properties_render.py 2013-10-09 15:51:14 UTC (rev 60631)
@@ -501,7 +501,7 @@
layout.prop(rd, "bake_type")
multires_bake = False
- if rd.bake_type in ['NORMALS', 'DISPLACEMENT', 'AO']:
+ if rd.bake_type in ['NORMALS', 'DISPLACEMENT', 'DERIVATIVE', 'AO']:
layout.prop(rd, "use_bake_multires")
multires_bake = rd.use_bake_multires
@@ -542,11 +542,20 @@
if rd.bake_type == 'DISPLACEMENT':
col = split.column()
col.prop(rd, "use_bake_lores_mesh")
+
if rd.bake_type == 'AO':
col = split.column()
col.prop(rd, "bake_bias")
col.prop(rd, "bake_samples")
+ if rd.bake_type == 'DERIVATIVE':
+ row = layout.row()
+ row.prop(rd, "use_bake_user_scale", text="")
+ sub = row.column()
+ sub.active = rd.use_bake_user_scale
+ sub.prop(rd, "bake_user_scale", text="User Scale")
+
+
if __name__ == "__main__": # only for live edit.
bpy.utils.register_module(__name__)
Modified: trunk/blender/source/blender/editors/object/object_bake.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_bake.c 2013-10-09 15:36:04 UTC (rev 60630)
+++ trunk/blender/source/blender/editors/object/object_bake.c 2013-10-09 15:51:14 UTC (rev 60631)
@@ -91,20 +91,24 @@
typedef struct MultiresBakerJobData {
struct MultiresBakerJobData *next, *prev;
DerivedMesh *lores_dm, *hires_dm;
- int simple, lvl, tot_lvl;
+ bool simple;
+ int lvl, tot_lvl;
ListBase images;
} MultiresBakerJobData;
/* data passing to multires-baker job */
typedef struct {
ListBase data;
- int bake_clear, bake_filter;
- short mode, use_lores_mesh;
- int number_of_rays;
- float bias;
- int raytrace_structure;
- int octree_resolution;
- int threads;
+ bool bake_clear; /* Clear the images before baking */
+ int bake_filter; /* Bake-filter, aka margin */
+ short mode; /* mode of baking (displacement, normals, AO) */
+ bool use_lores_mesh; /* Use low-resolution mesh when baking displacement maps */
+ int number_of_rays; /* Number of rays to be cast when doing AO baking */
+ float bias; /* Bias between object and start ray point when doing AO baking */
+ int raytrace_structure; /* Optimization structure to be used for AO baking */
+ int octree_resolution; /* Reslution of octotree when using octotree optimization structure */
+ int threads; /* Number of threads to be used for baking */
+ float user_scale; /* User scale used to scale displacement when baking derivative map. */
} MultiresBakeJob;
static bool multiresbake_check(bContext *C, wmOperator *op)
@@ -236,7 +240,7 @@
return dm;
}
-static DerivedMesh *multiresbake_create_hiresdm(Scene *scene, Object *ob, int *lvl, int *simple)
+static DerivedMesh *multiresbake_create_hiresdm(Scene *scene, Object *ob, int *lvl, bool *simple)
{
Mesh *me = (Mesh *)ob->data;
MultiresModifierData *mmd = get_multires_modifier(scene, ob, 0);
@@ -253,7 +257,7 @@
CustomData_set_only_copy(&cddm->polyData, CD_MASK_BAREMESH);
*lvl = mmd->totlvl;
- *simple = mmd->simple;
+ *simple = mmd->simple != 0;
tmp_mmd.lvl = mmd->totlvl;
tmp_mmd.sculptlvl = mmd->totlvl;
@@ -349,7 +353,7 @@
if (scene->r.bake_mode == RE_BAKE_NORMALS) {
clear_flag = CLEAR_TANGENT_NORMAL;
}
- else if (scene->r.bake_mode == RE_BAKE_DISPLACEMENT) {
+ else if (ELEM(scene->r.bake_mode, RE_BAKE_DISPLACEMENT, RE_BAKE_DERIVATIVE)) {
clear_flag = CLEAR_DISPLACEMENT;
}
@@ -376,6 +380,8 @@
bkr.raytrace_structure = scene->r.raytrace_structure;
bkr.octree_resolution = scene->r.ocres;
bkr.threads = BKE_scene_num_threads(scene);
+ bkr.user_scale = (scene->r.bake_flag & R_BAKE_USERSCALE) ? scene->r.bake_user_scale : -1.0f;
+ //bkr.reports= op->reports;
/* create low-resolution DM (to bake to) and hi-resolution DM (to bake from) */
bkr.hires_dm = multiresbake_create_hiresdm(scene, ob, &bkr.tot_lvl, &bkr.simple);
@@ -414,6 +420,8 @@
bkj->raytrace_structure = scene->r.raytrace_structure;
bkj->octree_resolution = scene->r.ocres;
bkj->threads = BKE_scene_num_threads(scene);
+ bkj->user_scale = (scene->r.bake_flag & R_BAKE_USERSCALE) ? scene->r.bake_user_scale : -1.0f;
+ //bkj->reports = op->reports;
CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases)
{
@@ -453,7 +461,7 @@
if (bkj->mode == RE_BAKE_NORMALS) {
clear_flag = CLEAR_TANGENT_NORMAL;
}
- else if (bkj->mode == RE_BAKE_DISPLACEMENT) {
+ else if (ELEM(bkj->mode, RE_BAKE_DISPLACEMENT, RE_BAKE_DERIVATIVE)) {
clear_flag = CLEAR_DISPLACEMENT;
}
@@ -468,6 +476,8 @@
bkr.bake_filter = bkj->bake_filter;
bkr.mode = bkj->mode;
bkr.use_lores_mesh = bkj->use_lores_mesh;
+ bkr.user_scale = bkj->user_scale;
+ //bkr.reports = bkj->reports;
/* create low-resolution DM (to bake to) and hi-resolution DM (to bake from) */
bkr.lores_dm = data->lores_dm;
@@ -773,7 +783,7 @@
static int is_multires_bake(Scene *scene)
{
- if (ELEM3(scene->r.bake_mode, RE_BAKE_NORMALS, RE_BAKE_DISPLACEMENT, RE_BAKE_AO))
+ if (ELEM4(scene->r.bake_mode, RE_BAKE_NORMALS, RE_BAKE_DISPLACEMENT, RE_BAKE_DERIVATIVE, RE_BAKE_AO))
return scene->r.bake_flag & R_BAKE_MULTIRES;
return 0;
Modified: trunk/blender/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_scene_types.h 2013-10-09 15:36:04 UTC (rev 60630)
+++ trunk/blender/source/blender/makesdna/DNA_scene_types.h 2013-10-09 15:51:14 UTC (rev 60631)
@@ -511,6 +511,7 @@
short bake_normal_space, bake_quad_split;
float bake_maxdist, bake_biasdist;
short bake_samples, bake_pad;
+ float bake_user_scale, bake_pad1;
/* path to render output */
char pic[1024]; /* 1024 = FILE_MAX */
@@ -1353,6 +1354,7 @@
#define R_BAKE_MULTIRES 16
#define R_BAKE_LORES_MESH 32
#define R_BAKE_VCOL 64
+#define R_BAKE_USERSCALE 128
/* bake_normal_space */
#define R_BAKE_SPACE_CAMERA 0
Modified: trunk/blender/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_scene.c 2013-10-09 15:36:04 UTC (rev 60630)
+++ trunk/blender/source/blender/makesrna/intern/rna_scene.c 2013-10-09 15:51:14 UTC (rev 60631)
@@ -4088,6 +4088,7 @@
{RE_BAKE_NORMALS, "NORMALS", 0, "Normals", "Bake normals"},
{RE_BAKE_TEXTURE, "TEXTURE", 0, "Textures", "Bake textures"},
{RE_BAKE_DISPLACEMENT, "DISPLACEMENT", 0, "Displacement", "Bake displacement"},
+ {RE_BAKE_DERIVATIVE, "DERIVATIVE", 0, "Derivative", "Bake derivative map"},
{RE_BAKE_EMIT, "EMIT", 0, "Emission", "Bake Emit values (glow)"},
{RE_BAKE_ALPHA, "ALPHA", 0, "Alpha", "Bake Alpha values (transparency)"},
{RE_BAKE_MIRROR_INTENSITY, "MIRROR_INTENSITY", 0, "Mirror Intensity", "Bake Mirror values"},
@@ -4674,6 +4675,17 @@
"Bake to vertex colors instead of to a UV-mapped image");
RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+ prop = RNA_def_property(srna, "use_bake_user_scale", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "bake_flag", R_BAKE_USERSCALE);
+ RNA_def_property_ui_text(prop, "User scale", "Use a user scale for the derivative map");
+
+ prop = RNA_def_property(srna, "bake_user_scale", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "bake_user_scale");
+ RNA_def_property_range(prop, 0.0, 1000.0);
+ RNA_def_property_ui_text(prop, "Scale",
+ "Instead of automatically normalizing to 0..1, "
+ "apply a user scale to the derivative map.");
+
/* stamp */
prop = RNA_def_property(srna, "use_stamp_time", PROP_BOOLEAN, PROP_NONE);
Modified: trunk/blender/source/blender/render/extern/include/RE_multires_bake.h
===================================================================
--- trunk/blender/source/blender/render/extern/include/RE_multires_bake.h 2013-10-09 15:36:04 UTC (rev 60630)
+++ trunk/blender/source/blender/render/extern/include/RE_multires_bake.h 2013-10-09 15:51:14 UTC (rev 60631)
@@ -37,21 +37,26 @@
typedef struct MultiresBakeRender {
DerivedMesh *lores_dm, *hires_dm;
- int simple, lvl, tot_lvl, bake_filter;
- short mode, use_lores_mesh;
+ bool simple;
+ int bake_filter; /* Bake-filter, aka margin */
+ int lvl, tot_lvl;
+ short mode;
+ bool use_lores_mesh; /* Use low-resolution mesh when baking displacement maps */
- int number_of_rays;
- float bias;
+ int number_of_rays; /* Number of rays to be cast when doing AO baking */
+ float bias; /* Bias between object and start ray point when doing AO baking */
int tot_obj, tot_image;
ListBase image;
int baked_objects, baked_faces;
- int raytrace_structure;
- int octree_resolution;
- int threads;
-
+ int raytrace_structure; /* Optimization structure to be used for AO baking */
+ int octree_resolution; /* Reslution of octotree when using octotree optimization structure */
+ int threads; /* Number of threads to be used for baking */
+
+ float user_scale; /* User scale used to scale displacement when baking derivative map. */
+
short *stop;
short *do_update;
float *progress;
Modified: trunk/blender/source/blender/render/extern/include/RE_pipeline.h
===================================================================
--- trunk/blender/source/blender/render/extern/include/RE_pipeline.h 2013-10-09 15:36:04 UTC (rev 60630)
+++ trunk/blender/source/blender/render/extern/include/RE_pipeline.h 2013-10-09 15:51:14 UTC (rev 60631)
@@ -281,6 +281,7 @@
#define RE_BAKE_MIRROR_INTENSITY 10
#define RE_BAKE_ALPHA 11
#define RE_BAKE_EMIT 12
+#define RE_BAKE_DERIVATIVE 13
void RE_Database_Baking(struct Render *re, struct Main *bmain, struct Scene *scene, unsigned int lay, const int type, struct Object *actob);
Modified: trunk/blender/source/blender/render/extern/include/RE_shader_ext.h
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list