[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46442] trunk/blender: Cycles: fix issues with texture coordinates and object scale.

Brecht Van Lommel brechtvanlommel at pandora.be
Wed May 9 01:39:31 CEST 2012


Revision: 46442
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46442
Author:   blendix
Date:     2012-05-08 23:39:31 +0000 (Tue, 08 May 2012)
Log Message:
-----------
Cycles: fix issues with texture coordinates and object scale. Auto texture
space size and location were outdated often, and already computed on demand
by blender internal, now do that through RNA as well.

Modified Paths:
--------------
    trunk/blender/intern/cycles/kernel/kernel_light.h
    trunk/blender/intern/cycles/kernel/kernel_object.h
    trunk/blender/intern/cycles/kernel/svm/svm_tex_coord.h
    trunk/blender/source/blender/blenkernel/intern/mesh.c
    trunk/blender/source/blender/editors/space_view3d/drawobject.c
    trunk/blender/source/blender/makesrna/intern/rna_mesh.c

Modified: trunk/blender/intern/cycles/kernel/kernel_light.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_light.h	2012-05-08 23:13:53 UTC (rev 46441)
+++ trunk/blender/intern/cycles/kernel/kernel_light.h	2012-05-08 23:39:31 UTC (rev 46442)
@@ -268,7 +268,7 @@
 		Transform itfm = object_fetch_transform(kg, ls->object, time, OBJECT_INVERSE_TRANSFORM);
 
 		ls->P = transform_point(&tfm, ls->P);
-		ls->Ng = transform_direction_transposed(&itfm, ls->Ng);
+		ls->Ng = normalize(transform_direction_transposed(&itfm, ls->Ng));
 	}
 #endif
 }

Modified: trunk/blender/intern/cycles/kernel/kernel_object.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_object.h	2012-05-08 23:13:53 UTC (rev 46441)
+++ trunk/blender/intern/cycles/kernel/kernel_object.h	2012-05-08 23:39:31 UTC (rev 46442)
@@ -77,6 +77,16 @@
 #endif
 }
 
+__device_inline void object_inverse_position_transform(KernelGlobals *kg, ShaderData *sd, float3 *P)
+{
+#ifdef __MOTION__
+	*P = transform_point(&sd->ob_itfm, *P);
+#else
+	Transform tfm = object_fetch_transform(kg, sd->object, TIME_INVALID, OBJECT_INVERSE_TRANSFORM);
+	*P = transform_point(&tfm, *P);
+#endif
+}
+
 __device_inline void object_inverse_normal_transform(KernelGlobals *kg, ShaderData *sd, float3 *N)
 {
 #ifdef __MOTION__

Modified: trunk/blender/intern/cycles/kernel/svm/svm_tex_coord.h
===================================================================
--- trunk/blender/intern/cycles/kernel/svm/svm_tex_coord.h	2012-05-08 23:13:53 UTC (rev 46441)
+++ trunk/blender/intern/cycles/kernel/svm/svm_tex_coord.h	2012-05-08 23:39:31 UTC (rev 46442)
@@ -57,7 +57,7 @@
 		case NODE_TEXCO_OBJECT: {
 			if(sd->object != ~0) {
 				data = sd->P;
-				object_position_transform(kg, sd, &data);
+				object_inverse_position_transform(kg, sd, &data);
 			}
 			else
 				data = sd->P;
@@ -106,7 +106,7 @@
 		case NODE_TEXCO_OBJECT: {
 			if(sd->object != ~0) {
 				data = sd->P + sd->dP.dx;
-				object_position_transform(kg, sd, &data);
+				object_inverse_position_transform(kg, sd, &data);
 			}
 			else
 				data = sd->P + sd->dP.dx;
@@ -158,7 +158,7 @@
 		case NODE_TEXCO_OBJECT: {
 			if(sd->object != ~0) {
 				data = sd->P + sd->dP.dy;
-				object_position_transform(kg, sd, &data);
+				object_inverse_position_transform(kg, sd, &data);
 			}
 			else
 				data = sd->P + sd->dP.dy;

Modified: trunk/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mesh.c	2012-05-08 23:13:53 UTC (rev 46441)
+++ trunk/blender/source/blender/blenkernel/intern/mesh.c	2012-05-08 23:39:31 UTC (rev 46442)
@@ -494,7 +494,6 @@
 	me->smoothresh = 30;
 	me->texflag = ME_AUTOSPACE;
 	me->flag = ME_TWOSIDED;
-	me->bb = BKE_boundbox_alloc_unit();
 	me->drawflag = ME_DRAWEDGES | ME_DRAWFACES | ME_DRAWCREASES;
 	
 	return me;

Modified: trunk/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawobject.c	2012-05-08 23:13:53 UTC (rev 46441)
+++ trunk/blender/source/blender/editors/space_view3d/drawobject.c	2012-05-08 23:39:31 UTC (rev 46442)
@@ -3599,8 +3599,8 @@
 			finalDM->release(finalDM);
 	}
 	else {
-		/* don't create boundbox here with BKE_mesh_boundbox_get(), the derived system will make it, puts deformed bb's OK */
-		if (me->totpoly <= 4 || ED_view3d_boundbox_clip(rv3d, ob->obmat, (ob->bb) ? ob->bb : me->bb)) {
+		/* ob->bb was set by derived mesh system, do NULL check just to be sure */
+		if (me->totpoly <= 4 || (ob->bb && ED_view3d_boundbox_clip(rv3d, ob->obmat, ob->bb))) {
 			glsl = draw_glsl_material(scene, ob, v3d, dt);
 			check_alpha = check_alpha_pass(base);
 

Modified: trunk/blender/source/blender/makesrna/intern/rna_mesh.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_mesh.c	2012-05-08 23:13:53 UTC (rev 46441)
+++ trunk/blender/source/blender/makesrna/intern/rna_mesh.c	2012-05-08 23:39:31 UTC (rev 46442)
@@ -452,6 +452,26 @@
 	return (me->texflag & ME_AUTOSPACE)? 0: PROP_EDITABLE;
 }
 
+static void rna_Mesh_texspace_size_get(PointerRNA *ptr, float values[3])
+{
+	Mesh *me= (Mesh*)ptr->data;
+
+	if(!me->bb)
+		BKE_mesh_texspace_calc(me);
+
+	copy_v3_v3(values, me->size);
+}
+
+static void rna_Mesh_texspace_loc_get(PointerRNA *ptr, float values[3])
+{
+	Mesh *me= (Mesh*)ptr->data;
+
+	if(!me->bb)
+		BKE_mesh_texspace_calc(me);
+
+	copy_v3_v3(values, me->loc);
+}
+
 static void rna_MeshVertex_groups_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
 {
 	Mesh *me = rna_mesh(ptr);
@@ -2066,12 +2086,14 @@
 	prop = RNA_def_property(srna, "texspace_location", PROP_FLOAT, PROP_TRANSLATION);
 	RNA_def_property_float_sdna(prop, NULL, "loc");
 	RNA_def_property_ui_text(prop, "Texure Space Location", "Texture space location");
+	RNA_def_property_float_funcs(prop, "rna_Mesh_texspace_loc_get", NULL, NULL);
 	RNA_def_property_editable_func(prop, texspace_editable);
 	RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
 
 	prop = RNA_def_property(srna, "texspace_size", PROP_FLOAT, PROP_XYZ);
 	RNA_def_property_float_sdna(prop, NULL, "size");
 	RNA_def_property_ui_text(prop, "Texture Space Size", "Texture space size");
+	RNA_def_property_float_funcs(prop, "rna_Mesh_texspace_size_get", NULL, NULL);
 	RNA_def_property_editable_func(prop, texspace_editable);
 	RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
 




More information about the Bf-blender-cvs mailing list