[Bf-blender-cvs] [e44b3bf7b84] hair_guides_grooming: Cycles support for groom hair.
Lukas Tönne
noreply at git.blender.org
Mon Jun 4 18:02:50 CEST 2018
Commit: e44b3bf7b8480a51ad7a80e9e30e8396cd992f6f
Author: Lukas Tönne
Date: Mon Jun 4 17:02:37 2018 +0100
Branches: hair_guides_grooming
https://developer.blender.org/rBe44b3bf7b8480a51ad7a80e9e30e8396cd992f6f
Cycles support for groom hair.
===================================================================
M intern/cycles/blender/blender_curves.cpp
M intern/cycles/blender/blender_mesh.cpp
M intern/cycles/blender/blender_object.cpp
M source/blender/editors/object/object_edit.c
===================================================================
diff --git a/intern/cycles/blender/blender_curves.cpp b/intern/cycles/blender/blender_curves.cpp
index ce881258225..9ddb9b67844 100644
--- a/intern/cycles/blender/blender_curves.cpp
+++ b/intern/cycles/blender/blender_curves.cpp
@@ -300,6 +300,7 @@ static void ObtainCacheVColFromParticleSystem(BL::Mesh *b_mesh,
static void ObtainCacheDataFromHairSystem(BL::Object *b_ob,
BL::HairSystem *b_hsys,
+ BL::Mesh *b_scalp,
int shader,
bool /*background*/,
ParticleCurveData *CData,
@@ -309,9 +310,8 @@ static void ObtainCacheDataFromHairSystem(BL::Object *b_ob,
Transform tfm = get_transform(b_ob->matrix_world());
Transform itfm = transform_quick_inverse(tfm);
- BL::Mesh b_mesh(b_ob->data());
void *hair_cache = BKE_hair_export_cache_new();
- BKE_hair_export_cache_update(hair_cache, b_hsys->ptr.data, 0, b_mesh.ptr.data, 0xFFFFFFFF);
+ BKE_hair_export_cache_update(hair_cache, b_hsys->ptr.data, 0, b_scalp->ptr.data, 0xFFFFFFFF);
int totcurves, totverts;
BKE_hair_render_get_buffer_size(hair_cache, &totcurves, &totverts);
@@ -407,7 +407,6 @@ static void ObtainCacheDataFromHairSystem(BL::Object *b_ob,
}
static bool ObtainCacheDataFromObject(Mesh *mesh,
- BL::Mesh *b_mesh,
BL::Object *b_ob,
ParticleCurveData *CData,
bool background)
@@ -415,9 +414,28 @@ static bool ObtainCacheDataFromObject(Mesh *mesh,
int curvenum = 0;
int keyno = 0;
- if(!(mesh && b_mesh && b_ob && CData))
+ if(!(mesh && b_ob && CData))
return false;
+ if(b_ob->type() == BL::Object::type_GROOM) {
+ BL::Groom b_groom(b_ob->data());
+ BL::HairSystem b_hsys = b_groom.hair_system();
+
+ int shader = clamp(b_groom.material_index() - 1, 0, mesh->used_shaders.size()-1);
+
+ BL::Mesh b_scalp(b_groom.scalp_object().data());
+ if (b_scalp) {
+ ObtainCacheDataFromHairSystem(b_ob,
+ &b_hsys,
+ &b_scalp,
+ shader,
+ background,
+ CData,
+ &curvenum,
+ &keyno);
+ }
+ }
+
BL::Object::modifiers_iterator b_mod;
for(b_ob->modifiers.begin(b_mod); b_mod != b_ob->modifiers.end(); ++b_mod) {
if (background ? b_mod->show_render() : b_mod->show_viewport())
@@ -439,8 +457,11 @@ static bool ObtainCacheDataFromObject(Mesh *mesh,
const int material_index = 1; /* TODO */
int shader = clamp(material_index - 1, 0, mesh->used_shaders.size()-1);
+ BL::Mesh b_scalp(b_ob->data());
+
ObtainCacheDataFromHairSystem(b_ob,
&b_hsys,
+ &b_scalp,
shader,
background,
CData,
@@ -1087,7 +1108,7 @@ void BlenderSync::sync_curves(Mesh *mesh,
ParticleCurveData CData;
- ObtainCacheDataFromObject(mesh, &b_mesh, &b_ob, &CData, !preview);
+ ObtainCacheDataFromObject(mesh, &b_ob, &CData, !preview);
/* add hair geometry to mesh */
if(primitive == CURVE_TRIANGLES) {
@@ -1123,7 +1144,7 @@ void BlenderSync::sync_curves(Mesh *mesh,
/* generated coordinates from first key. we should ideally get this from
* blender to handle deforming objects */
- if(!motion) {
+ if(b_mesh && !motion) {
if(mesh->need_attribute(scene, ATTR_STD_GENERATED)) {
float3 loc, size;
mesh_texture_space(b_mesh, loc, size);
@@ -1148,7 +1169,7 @@ void BlenderSync::sync_curves(Mesh *mesh,
}
/* create vertex color attributes */
- if(!motion) {
+ if(b_mesh && !motion) {
BL::Mesh::tessface_vertex_colors_iterator l;
int vcol_num = 0;
@@ -1184,7 +1205,7 @@ void BlenderSync::sync_curves(Mesh *mesh,
}
/* create UV attributes */
- if(!motion) {
+ if(b_mesh && !motion) {
BL::Mesh::tessface_uv_textures_iterator l;
int uv_num = 0;
diff --git a/intern/cycles/blender/blender_mesh.cpp b/intern/cycles/blender/blender_mesh.cpp
index 03d24c04e2a..0553d9ccadf 100644
--- a/intern/cycles/blender/blender_mesh.cpp
+++ b/intern/cycles/blender/blender_mesh.cpp
@@ -1203,14 +1203,16 @@ Mesh *BlenderSync::sync_mesh(BL::Depsgraph& b_depsgraph,
create_mesh_volume_attributes(scene, b_ob, mesh, b_scene.frame_current());
}
+ }
- if(view_layer.use_hair && mesh->subdivision_type == Mesh::SUBDIVISION_NONE)
- sync_curves(mesh, b_mesh, b_ob, false);
+ if(view_layer.use_hair && mesh->subdivision_type == Mesh::SUBDIVISION_NONE)
+ sync_curves(mesh, b_mesh, b_ob, false);
- if(can_free_caches) {
- b_ob.cache_release();
- }
+ if(can_free_caches) {
+ b_ob.cache_release();
+ }
+ if(b_mesh) {
/* free derived mesh */
b_data.meshes.remove(b_mesh, false, true, false);
}
diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp
index 090682c8e14..31269ada268 100644
--- a/intern/cycles/blender/blender_object.cpp
+++ b/intern/cycles/blender/blender_object.cpp
@@ -81,7 +81,8 @@ bool BlenderSync::object_is_mesh(BL::Object& b_ob)
else {
return (b_ob_data.is_a(&RNA_Mesh) ||
b_ob_data.is_a(&RNA_Curve) ||
- b_ob_data.is_a(&RNA_MetaBall));
+ b_ob_data.is_a(&RNA_MetaBall) ||
+ b_ob_data.is_a(&RNA_Groom));
}
}
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c
index 11cce4ea994..06f0dc6112a 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -48,6 +48,7 @@
#include "DNA_armature_types.h"
#include "DNA_curve_types.h"
#include "DNA_gpencil_types.h"
+#include "DNA_groom_types.h"
#include "DNA_group_types.h"
#include "DNA_material_types.h"
#include "DNA_meta_types.h"
@@ -260,6 +261,10 @@ static bool ED_object_editmode_load_ex(Main *bmain, Object *obedit, const bool f
}
}
else if (obedit->type == OB_GROOM) {
+ const Groom *groom = obedit->data;
+ if (groom->editgroom == NULL) {
+ return false;
+ }
ED_groom_editgroom_load(obedit);
if (freedata) ED_groom_editgroom_free(obedit);
}
More information about the Bf-blender-cvs
mailing list