[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20983] trunk/blender/source/blender/nodes /intern/CMP_nodes/CMP_mapUV.c: Bufix #18942

Ton Roosendaal ton at blender.org
Thu Jun 18 19:00:48 CEST 2009


Revision: 20983
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20983
Author:   ton
Date:     2009-06-18 19:00:47 +0200 (Thu, 18 Jun 2009)

Log Message:
-----------
Bufix #18942

Composite "Map UV" node was using false UVs (0,0) from neighbouring 
pixels when those pixels were not rendered (or have no UV).

This commit checks for each neighbour sample it takes if the UV was
correctly set. Solves bad errors on edges of UV maps. With FSA even
totally smooth. :)

Modified Paths:
--------------
    trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_mapUV.c

Modified: trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_mapUV.c
===================================================================
--- trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_mapUV.c	2009-06-18 16:01:47 UTC (rev 20982)
+++ trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_mapUV.c	2009-06-18 17:00:47 UTC (rev 20983)
@@ -65,19 +65,49 @@
 		for(x=0; x<sx; x++, out+=4, uv+=3, uvnext+=3, uvprev+=3) {
 			if(x>0 && x<sx-1 && y>0 && y<sy-1) {
 				if(uv[2]!=0.0f) {
+					float uv_l, uv_r;
 					
 					/* adaptive sampling, red (U) channel */
-					dx= 0.5f*(fabs(uv[0]-uv[-3]) + fabs(uv[0]-uv[3]));
 					
-					dx+= 0.25f*(fabs(uv[0]-uvprev[-3]) + fabs(uv[0]-uvnext[-3]));
-					dx+= 0.25f*(fabs(uv[0]-uvprev[+3]) + fabs(uv[0]-uvnext[+3]));
+					/* prevent alpha zero UVs to be used */
+					uv_l= uv[-1]!=0.0f? fabs(uv[0]-uv[-3]) : 0.0f;
+					uv_r= uv[ 5]!=0.0f? fabs(uv[0]-uv[ 3]) : 0.0f;
 					
+					//dx= 0.5f*(fabs(uv[0]-uv[-3]) + fabs(uv[0]-uv[3]));
+					dx= 0.5f*(uv_l + uv_r);
+					
+					uv_l= uvprev[-1]!=0.0f? fabs(uv[0]-uvprev[-3]) : 0.0f;
+					uv_r= uvnext[-1]!=0.0f? fabs(uv[0]-uvnext[-3]) : 0.0f;
+					
+					//dx+= 0.25f*(fabs(uv[0]-uvprev[-3]) + fabs(uv[0]-uvnext[-3]));
+					dx+= 0.25f*(uv_l + uv_r);
+						
+					uv_l= uvprev[ 5]!=0.0f? fabs(uv[0]-uvprev[+3]) : 0.0f;
+					uv_r= uvnext[ 5]!=0.0f? fabs(uv[0]-uvnext[+3]) : 0.0f;
+					
+					//dx+= 0.25f*(fabs(uv[0]-uvprev[+3]) + fabs(uv[0]-uvnext[+3]));
+					dx+= 0.25f*(uv_l + uv_r);
+					
 					/* adaptive sampling, green (V) channel */
-					dy= 0.5f*(fabs(uv[1]-uv[-row+1]) + fabs(uv[1]-uv[row+1]));
-							 
-					dy+= 0.25f*(fabs(uv[1]-uvprev[+1-3]) + fabs(uv[1]-uvnext[+1-3]));
-					dy+= 0.25f*(fabs(uv[1]-uvprev[+1+3]) + fabs(uv[1]-uvnext[+1+3]));
 					
+					uv_l= uv[-row+2]!=0.0f? fabs(uv[1]-uv[-row+1]) : 0.0f;
+					uv_r= uv[ row+2]!=0.0f? fabs(uv[1]-uv[ row+1]) : 0.0f;
+					
+					//dy= 0.5f*(fabs(uv[1]-uv[-row+1]) + fabs(uv[1]-uv[row+1]));
+					dy= 0.5f*(uv_l + uv_r);
+					
+					uv_l= uvprev[-1]!=0.0f? fabs(uv[1]-uvprev[+1-3]) : 0.0f;
+					uv_r= uvnext[-1]!=0.0f? fabs(uv[1]-uvnext[+1-3]) : 0.0f;
+					
+					//dy+= 0.25f*(fabs(uv[1]-uvprev[+1-3]) + fabs(uv[1]-uvnext[+1-3]));
+					dy+= 0.25f*(uv_l + uv_r);
+					
+					uv_l= uvprev[ 5]!=0.0f? fabs(uv[1]-uvprev[+1+3]) : 0.0f;
+					uv_r= uvnext[ 5]!=0.0f? fabs(uv[1]-uvnext[+1+3]) : 0.0f;
+					
+					//dy+= 0.25f*(fabs(uv[1]-uvprev[+1+3]) + fabs(uv[1]-uvnext[+1+3]));
+					dy+= 0.25f*(uv_l + uv_r);
+					
 					/* UV to alpha threshold */
 					alpha= 1.0f - threshold*(dx+dy);
 					if(alpha<0.0f) alpha= 0.0f;





More information about the Bf-blender-cvs mailing list