[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35470] trunk/blender:

ervin weber ervin.weber at gmail.com
Fri Mar 11 09:17:21 CET 2011


Sorry, I missed to include Log Message.
I paste it here:

Transparency patch: makes sure that materials are not rendered
transparent if the use_transparency check is disabled. Adds a new
transparency option 'MASK' for enabling the old behaviour.

* rationale
   The use_transparency check in the transparency panel header may lead
   the User to expect that, by unchecking it, every transparency effect
   will be disabled.
   That’s confusing, since alpha, fresnel and blend parameters are
   still used to perform background masking.

* usage
   With transparency check ON: the material will render as before.
   The new option MASK is analogous for an old material with
   transparency check off.

   With transparency check OFF:
   Every transparency effect in the material will be disabled.
   The material will render solid.
   - disable alpha, fresnel transp, specular transparency
   - disable texture mapped to alpha and transparent facetexture
   - disable transparent object color
   - will not project transparent shadows
   - shadow-only materials will have alpha=1.0
   - if reflected or refracted will appear solid


On 11/03/2011 8.59, Ervin Weber wrote:
> Revision: 35470
>            http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35470
> Author:   lusque
> Date:     2011-03-11 07:59:43 +0000 (Fri, 11 Mar 2011)
> Log Message:
> -----------
>
>
> Modified Paths:
> --------------
>      trunk/blender/release/scripts/ui/properties_material.py
>      trunk/blender/source/blender/blenkernel/BKE_blender.h
>      trunk/blender/source/blender/blenloader/intern/readfile.c
>      trunk/blender/source/blender/makesrna/intern/rna_material.c
>      trunk/blender/source/blender/render/intern/source/convertblender.c
>      trunk/blender/source/blender/render/intern/source/rayshade.c
>      trunk/blender/source/blender/render/intern/source/shadeoutput.c
>
> Modified: trunk/blender/release/scripts/ui/properties_material.py
> ===================================================================
> --- trunk/blender/release/scripts/ui/properties_material.py	2011-03-11 05:23:56 UTC (rev 35469)
> +++ trunk/blender/release/scripts/ui/properties_material.py	2011-03-11 07:59:43 UTC (rev 35470)
> @@ -373,11 +373,12 @@
>               row.prop(mat, "transparency_method", expand=True)
>
>           split = layout.split()
> +        split.active = base_mat.use_transparency
>
>           col = split.column()
>           col.prop(mat, "alpha")
>           row = col.row()
> -        row.active = base_mat.use_transparency and (not mat.use_shadeless)
> +        row.active = (base_mat.transparency_method != 'MASK') and (not mat.use_shadeless)
>           row.prop(mat, "specular_alpha", text="Specular")
>
>           col = split.column()
>
> Modified: trunk/blender/source/blender/blenkernel/BKE_blender.h
> ===================================================================
> --- trunk/blender/source/blender/blenkernel/BKE_blender.h	2011-03-11 05:23:56 UTC (rev 35469)
> +++ trunk/blender/source/blender/blenkernel/BKE_blender.h	2011-03-11 07:59:43 UTC (rev 35470)
> @@ -44,7 +44,7 @@
>    * and keep comment above the defines.
>    * Use STRINGIFY() rather then defining with quotes */
>   #define BLENDER_VERSION			256
> -#define BLENDER_SUBVERSION		2
> +#define BLENDER_SUBVERSION		3
>
>   #define BLENDER_MINVERSION		250
>   #define BLENDER_MINSUBVERSION	0
>
> Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
> ===================================================================
> --- trunk/blender/source/blender/blenloader/intern/readfile.c	2011-03-11 05:23:56 UTC (rev 35469)
> +++ trunk/blender/source/blender/blenloader/intern/readfile.c	2011-03-11 07:59:43 UTC (rev 35470)
> @@ -11488,6 +11488,29 @@
>   		}
>   	}
>
> +	if (main->versionfile<  256 || (main->versionfile == 256&&  main->subversionfile<3)){
> +
> +		Material *mat;
> +		int tex_nr, transp_tex;
> +		
> +		for(mat = main->mat.first; mat; mat = mat->id.next){
> +			if(!(mat->mode&  MA_TRANSP)&&  !(mat->material_type&  MA_TYPE_VOLUME)){
> +				
> +				transp_tex= 0;
> +				
> +				for(tex_nr=0; tex_nr<MAX_MTEX; tex_nr++){
> +					if(!mat->mtex[tex_nr]) continue;
> +					if(mat->mtex[tex_nr]->mapto&  MAP_ALPHA) transp_tex= 1;
> +				}
> +				
> +				if(mat->alpha<  1.0f || mat->fresnel_tra>  0.0f || transp_tex){
> +					mat->mode |= MA_TRANSP;
> +					mat->mode&= ~(MA_ZTRANSP|MA_RAYTRANSP);
> +				}
> +			}
> +		}
> +	}
> +
>   	/* put compatibility code here until next subversion bump */
>
>   	{
>
> Modified: trunk/blender/source/blender/makesrna/intern/rna_material.c
> ===================================================================
> --- trunk/blender/source/blender/makesrna/intern/rna_material.c	2011-03-11 05:23:56 UTC (rev 35469)
> +++ trunk/blender/source/blender/makesrna/intern/rna_material.c	2011-03-11 07:59:43 UTC (rev 35470)
> @@ -1569,6 +1569,7 @@
>   		{MA_TYPE_HALO, "HALO", 0, "Halo", "Render object as halo particles"},
>   		{0, NULL, 0, NULL, NULL}};
>   	static EnumPropertyItem transparency_items[] = {
> +		{0, "MASK", 0, "Mask", "Mask the background"},
>   		{MA_ZTRANSP, "Z_TRANSPARENCY", 0, "Z Transparency", "Use alpha buffer for transparent faces"},
>   		{MA_RAYTRANSP, "RAYTRACE", 0, "Raytrace", "Use raytracing for transparent refraction rendering"},
>   		{0, NULL, 0, NULL, NULL}};
>
> Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
> ===================================================================
> --- trunk/blender/source/blender/render/intern/source/convertblender.c	2011-03-11 05:23:56 UTC (rev 35469)
> +++ trunk/blender/source/blender/render/intern/source/convertblender.c	2011-03-11 07:59:43 UTC (rev 35470)
> @@ -3350,7 +3350,7 @@
>   				
>   				/* test for 100% transparant */
>   				ok= 1;
> -				if(ma->alpha==0.0f&&  ma->spectra==0.0f&&  ma->filter==0.0f) {
> +				if(ma->alpha==0.0f&&  ma->spectra==0.0f&&  ma->filter==0.0f&&  (ma->mode&  MA_TRANSP)) {
>   					ok= 0;
>   					/* texture on transparency? */
>   					for(a=0; a<MAX_MTEX; a++) {
>
> Modified: trunk/blender/source/blender/render/intern/source/rayshade.c
> ===================================================================
> --- trunk/blender/source/blender/render/intern/source/rayshade.c	2011-03-11 05:23:56 UTC (rev 35469)
> +++ trunk/blender/source/blender/render/intern/source/rayshade.c	2011-03-11 07:59:43 UTC (rev 35470)
> @@ -762,7 +762,7 @@
>   		if(depth>0) {
>   			float fr, fg, fb, f, f1;
>
> -			if((shi.mat->mode_l&  MA_TRANSP)&&  shr.alpha<  1.0f) {
> +			if((shi.mat->mode_l&  MA_TRANSP)&&  shr.alpha<  1.0f&&  (shi.mat->mode_l&  (MA_ZTRANSP | MA_RAYTRANSP))) {
>   				float nf, f, refract[3], tracol[4];
>   				
>   				tracol[0]= shi.r;
>
> Modified: trunk/blender/source/blender/render/intern/source/shadeoutput.c
> ===================================================================
> --- trunk/blender/source/blender/render/intern/source/shadeoutput.c	2011-03-11 05:23:56 UTC (rev 35469)
> +++ trunk/blender/source/blender/render/intern/source/shadeoutput.c	2011-03-11 07:59:43 UTC (rev 35470)
> @@ -878,7 +878,9 @@
>
>   	if(ma->fresnel_tra!=0.0f)
>   		shi->alpha*= fresnel_fac(shi->view, shi->vn, ma->fresnel_tra_i, ma->fresnel_tra);
> -
> +	
> +	if (!(shi->mode&  MA_TRANSP)) shi->alpha= 1.0f;
> +	
>   	shr->diff[0]= shi->r;
>   	shr->diff[1]= shi->g;
>   	shr->diff[2]= shi->b;
> @@ -1578,7 +1580,7 @@
>   					accum = 1.0f - shaded;
>   			}}
>
> -			shr->alpha= (shi->mat->alpha)*(accum);
> +			shr->alpha= (shi->alpha)*(accum);
>   		}
>   		else {
>   			/* If "fully shaded", use full alpha even on areas that have no lights */
> @@ -1638,6 +1640,8 @@
>   	
>   	memset(shr, 0, sizeof(ShadeResult));
>   	
> +	if(!(shi->mode&  MA_TRANSP)) shi->alpha = 1.0f;
> +	
>   	/* separate loop */
>   	if(ma->mode&  MA_ONLYSHADOW) {
>   		shade_lamp_loop_only_shadow(shi, shr);
> @@ -1654,10 +1658,12 @@
>   			shi->g= shi->vcol[1];
>   			shi->b= shi->vcol[2];
>   			if(ma->mode&  (MA_FACETEXTURE_ALPHA))
> -				shi->alpha= shi->vcol[3];
> +				shi->alpha= (shi->mode&  MA_TRANSP) ? shi->vcol[3] : 1.0f;
>   		}
> -		if(ma->texco)
> +		if(ma->texco){
>   			do_material_tex(shi);
> +			if (!(shi->mode&  MA_TRANSP)) shi->alpha = 1.0f;
> +		}
>   		
>   		shr->col[0]= shi->r*shi->alpha;
>   		shr->col[1]= shi->g*shi->alpha;
> @@ -1812,11 +1818,11 @@
>   	
>   	/* alpha in end, spec can influence it */
>   	if(passflag&  (SCE_PASS_COMBINED)) {
> -		if(ma->fresnel_tra!=0.0f)
> +		if((ma->fresnel_tra!=0.0f)&&  (shi->mode&  MA_TRANSP))
>   			shi->alpha*= fresnel_fac(shi->view, shi->vn, ma->fresnel_tra_i, ma->fresnel_tra);
>   			
>   		/* note: shi->mode! */
> -		if(shi->mode&  MA_TRANSP) {
> +		if(shi->mode&  MA_TRANSP&&  (shi->mode&  (MA_ZTRANSP|MA_RAYTRANSP))) {
>   			if(shi->spectra!=0.0f) {
>   				float t = MAX3(shr->spec[0], shr->spec[1], shr->spec[2]);
>   				t *= shi->spectra;
> @@ -1886,7 +1892,7 @@
>   			shr->combined[0] *= obcol[0];
>   			shr->combined[1] *= obcol[1];
>   			shr->combined[2] *= obcol[2];
> -			shr->alpha *= obcol[3];
> +			if (shi->mode&  MA_TRANSP) shr->alpha *= obcol[3];
>   		}
>   	}
>
>
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>


More information about the Bf-committers mailing list