svn merge -r 22450:22627 https://svn.blender.org/svnroot/bf-blender/branches/blender2...
[blender-staging.git] / source / blender / makesrna / intern / rna_material.c
index 3f2253210249dedb6908b7bbead0b5e26db55c9e..0c5fc70fabddcda0b937aa45be2b753e3761962c 100644 (file)
@@ -41,6 +41,8 @@
 
 #include "BKE_texture.h"
 
+#include "ED_node.h"
+
 static PointerRNA rna_Material_mirror_get(PointerRNA *ptr)
 {
        return rna_pointer_inherit_refine(ptr, &RNA_MaterialRaytraceMirror, ptr->id.data);
@@ -196,6 +198,15 @@ static void rna_Material_use_specular_ramp_set(PointerRNA *ptr, int value)
                ma->ramp_spec= add_colorband(0);
 }
 
+void rna_Material_use_nodes_set(PointerRNA *ptr, int value)
+{
+       Material *ma= (Material*)ptr->data;
+
+       ma->use_nodes= value;
+       if(ma->use_nodes && ma->nodetree==NULL)
+               ED_node_shader_default(ma);
+}
+
 #else
 
 static void rna_def_material_mtex(BlenderRNA *brna)
@@ -596,10 +607,16 @@ static void rna_def_material_colors(StructRNA *srna)
        RNA_def_property_ui_text(prop, "Mirror Color", "Mirror color of the material.");
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
        
-       prop= RNA_def_property(srna, "alpha", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "alpha", PROP_FLOAT, PROP_PERCENTAGE);
        RNA_def_property_range(prop, 0.0f, 1.0f);
        RNA_def_property_ui_text(prop, "Alpha", "Alpha transparency of the material.");
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING_DRAW, NULL);
+
+       prop= RNA_def_property(srna, "specular_alpha", PROP_FLOAT, PROP_PERCENTAGE);
+       RNA_def_property_float_sdna(prop, NULL, "spectra");
+       RNA_def_property_range(prop, 0.0f, 1.0f);
+       RNA_def_property_ui_text(prop, "Specular Alpha", "Alpha transparency for specular areas.");
+       RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
        
        /* Color bands */
        prop= RNA_def_property(srna, "use_diffuse_ramp", PROP_BOOLEAN, PROP_NONE);
@@ -668,7 +685,7 @@ static void rna_def_material_diffuse(StructRNA *srna)
        RNA_def_property_ui_text(prop, "Diffuse Shader Model", "");
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
        
-       prop= RNA_def_property(srna, "diffuse_reflection", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "diffuse_reflection", PROP_FLOAT, PROP_PERCENTAGE);
        RNA_def_property_float_sdna(prop, NULL, "ref");
        RNA_def_property_range(prop, 0.0f, 1.0f);
        RNA_def_property_ui_text(prop, "Diffuse Reflection", "Amount of diffuse reflection.");
@@ -685,7 +702,7 @@ static void rna_def_material_diffuse(StructRNA *srna)
        RNA_def_property_ui_text(prop, "Diffuse Toon Size", "Size of diffuse toon area.");
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
 
-       prop= RNA_def_property(srna, "diffuse_toon_smooth", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "diffuse_toon_smooth", PROP_FLOAT, PROP_PERCENTAGE);
        RNA_def_property_float_sdna(prop, NULL, "param[1]");
        RNA_def_property_range(prop, 0.0f, 1.0f);
        RNA_def_property_ui_text(prop, "Diffuse Toon Smooth", "Smoothness of diffuse toon area.");
@@ -729,7 +746,7 @@ static void rna_def_material_raymirror(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Enabled", "Enable raytraced reflections.");
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
                
-       prop= RNA_def_property(srna, "reflect", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "reflect", PROP_FLOAT, PROP_PERCENTAGE);
        RNA_def_property_float_sdna(prop, NULL, "ray_mirror");
        RNA_def_property_range(prop, 0.0f, 1.0f);
        RNA_def_property_ui_text(prop, "Reflect", "Sets the amount mirror reflection for raytrace.");
@@ -741,19 +758,19 @@ static void rna_def_material_raymirror(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Fresnel", "Power of Fresnel for mirror reflection.");
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
        
-       prop= RNA_def_property(srna, "fresnel_fac", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "fresnel_factor", PROP_FLOAT, PROP_PERCENTAGE);
        RNA_def_property_float_sdna(prop, NULL, "fresnel_mir_i");
        RNA_def_property_range(prop, 0.0f, 5.0f);
        RNA_def_property_ui_text(prop, "Fresnel Factor", "Blending factor for Fresnel.");
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
        
-       prop= RNA_def_property(srna, "gloss", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "gloss", PROP_FLOAT, PROP_PERCENTAGE);
        RNA_def_property_float_sdna(prop, NULL, "gloss_mir");
        RNA_def_property_range(prop, 0.0f, 1.0f);
        RNA_def_property_ui_text(prop, "Gloss", "The shininess of the reflection. Values < 1.0 give diffuse, blurry reflections.");
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
        
-       prop= RNA_def_property(srna, "gloss_anisotropic", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "gloss_anisotropic", PROP_FLOAT, PROP_PERCENTAGE);
        RNA_def_property_float_sdna(prop, NULL, "aniso_gloss_mir");
        RNA_def_property_range(prop, 0.0f, 1.0f);
        RNA_def_property_ui_text(prop, "Gloss Anisotropy", "The shape of the reflection, from 0.0 (circular) to 1.0 (fully stretched along the tangent.");
@@ -765,7 +782,7 @@ static void rna_def_material_raymirror(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Gloss Samples", "Number of cone samples averaged for blurry reflections.");
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
        
-       prop= RNA_def_property(srna, "gloss_threshold", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "gloss_threshold", PROP_FLOAT, PROP_PERCENTAGE);
        RNA_def_property_float_sdna(prop, NULL, "adapt_thresh_mir");
        RNA_def_property_range(prop, 0.0f, 1.0f);
        RNA_def_property_ui_text(prop, "Gloss Threshold", "Threshold for adaptive sampling. If a sample contributes less than this amount (as a percentage), sampling is stopped.");
@@ -800,11 +817,6 @@ static void rna_def_material_raytra(BlenderRNA *brna)
        RNA_def_struct_nested(brna, srna, "Material");
        RNA_def_struct_ui_text(srna, "Material Raytrace Transparency", "Raytraced refraction settings for a Material datablock.");
 
-       prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_RAYTRANSP); /* use bitflags */
-       RNA_def_property_ui_text(prop, "Enabled", "Enables raytracing for transparent refraction rendering.");
-       RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
-       
        prop= RNA_def_property(srna, "ior", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "ang");
        RNA_def_property_range(prop, 1.0f, 3.0f);
@@ -817,13 +829,13 @@ static void rna_def_material_raytra(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Fresnel", "Power of Fresnel for transparency (Ray or ZTransp).");
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
        
-       prop= RNA_def_property(srna, "fresnel_fac", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "fresnel_factor", PROP_FLOAT, PROP_PERCENTAGE);
        RNA_def_property_float_sdna(prop, NULL, "fresnel_tra_i");
        RNA_def_property_range(prop, 1.0f, 5.0f);
        RNA_def_property_ui_text(prop, "Fresnel Factor", "Blending factor for Fresnel.");
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
        
-       prop= RNA_def_property(srna, "gloss", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "gloss", PROP_FLOAT, PROP_PERCENTAGE);
        RNA_def_property_float_sdna(prop, NULL, "gloss_tra");
        RNA_def_property_range(prop, 0.0f, 1.0f);
        RNA_def_property_ui_text(prop, "Gloss", "The clarity of the refraction. Values < 1.0 give diffuse, blurry refractions.");
@@ -835,7 +847,7 @@ static void rna_def_material_raytra(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Gloss Samples", "Number of cone samples averaged for blurry refractions.");
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
        
-       prop= RNA_def_property(srna, "gloss_threshold", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "gloss_threshold", PROP_FLOAT, PROP_PERCENTAGE);
        RNA_def_property_float_sdna(prop, NULL, "adapt_thresh_tra");
        RNA_def_property_range(prop, 0.0f, 1.0f);
        RNA_def_property_ui_text(prop, "Gloss Threshold", "Threshold for adaptive sampling. If a sample contributes less than this amount (as a percentage), sampling is stopped.");
@@ -847,7 +859,7 @@ static void rna_def_material_raytra(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Depth", "Maximum allowed number of light inter-refractions.");
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
        
-       prop= RNA_def_property(srna, "filter", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "filter", PROP_FLOAT, PROP_PERCENTAGE);
        RNA_def_property_float_sdna(prop, NULL, "filter");
        RNA_def_property_range(prop, 0.0f, 1.0f);
        RNA_def_property_ui_text(prop, "Filter", "Amount to blend in the material's diffuse color in raytraced transparency (simulating absorption).");
@@ -864,12 +876,6 @@ static void rna_def_material_raytra(BlenderRNA *brna)
        RNA_def_property_range(prop, 0.1f, 10.0f);
        RNA_def_property_ui_text(prop, "Falloff", "Falloff power for transmissivity filter effect (1.0 is linear).");
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
-       
-       prop= RNA_def_property(srna, "specular_opacity", PROP_FLOAT, PROP_NONE);
-       RNA_def_property_float_sdna(prop, NULL, "spectra");
-       RNA_def_property_range(prop, 0.0f, 1.0f);
-       RNA_def_property_ui_text(prop, "Specular Opacity", "Makes specular areas opaque on transparent materials.");
-       RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
 }
 
 static void rna_def_material_volume(BlenderRNA *brna)
@@ -1052,7 +1058,7 @@ static void rna_def_material_halo(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Hardness", "Sets the hardness of the halo.");
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
        
-       prop= RNA_def_property(srna, "add", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "add", PROP_FLOAT, PROP_PERCENTAGE);
        RNA_def_property_float_sdna(prop, NULL, "add");
        RNA_def_property_range(prop, 0.0f, 1.0f);
        RNA_def_property_ui_text(prop, "Add", "Sets the strength of the add effect.");
@@ -1198,13 +1204,13 @@ static void rna_def_material_sss(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "IOR", "Index of refraction (higher values are denser).");
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
 
-       prop= RNA_def_property(srna, "color_factor", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "color_factor", PROP_FLOAT, PROP_PERCENTAGE);
        RNA_def_property_float_sdna(prop, NULL, "sss_colfac");
        RNA_def_property_ui_range(prop, 0, 1, 10, 3);
        RNA_def_property_ui_text(prop, "Color Factor", "Blend factor for SSS colors.");
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
 
-       prop= RNA_def_property(srna, "texture_factor", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "texture_factor", PROP_FLOAT, PROP_PERCENTAGE);
        RNA_def_property_float_sdna(prop, NULL, "sss_texfac");
        RNA_def_property_ui_range(prop, 0, 1, 10, 3);
        RNA_def_property_ui_text(prop, "Texture Factor", "Texture scatting blend factor.");
@@ -1246,7 +1252,7 @@ void rna_def_material_specularity(StructRNA *srna)
        RNA_def_property_ui_text(prop, "Specular Shader Model", "");
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
        
-       prop= RNA_def_property(srna, "specular_reflection", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "specular_reflection", PROP_FLOAT, PROP_PERCENTAGE);
        RNA_def_property_float_sdna(prop, NULL, "spec");
        RNA_def_property_range(prop, 0, 1);
        RNA_def_property_ui_text(prop, "Specularity Intensity", "");
@@ -1275,7 +1281,7 @@ void rna_def_material_specularity(StructRNA *srna)
        RNA_def_property_ui_text(prop, "Specular Toon Size", "Size of specular toon area.");
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
 
-       prop= RNA_def_property(srna, "specular_toon_smooth", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "specular_toon_smooth", PROP_FLOAT, PROP_PERCENTAGE);
        RNA_def_property_float_sdna(prop, NULL, "param[3]");
        RNA_def_property_range(prop, 0.0f, 1.0f);
        RNA_def_property_ui_text(prop, "Specular Toon Smooth", "Ssmoothness of specular toon area.");
@@ -1406,6 +1412,10 @@ void RNA_def_material(BlenderRNA *brna)
                {MA_TYPE_VOLUME, "VOLUME", 0, "Volume", "Render object as a volume."},
                {MA_TYPE_HALO, "HALO", 0, "Halo", "Render object as halo particles."},
                {0, NULL, 0, NULL, NULL}};
+       static EnumPropertyItem transparency_items[] = {
+               {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}};
 
        srna= RNA_def_struct(brna, "Material", "ID");
        RNA_def_struct_ui_text(srna, "Material", "Material datablock to defined the appearance of geometric objects for rendering.");
@@ -1417,19 +1427,31 @@ void RNA_def_material(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Type", "Material type defining how the object is rendered.");
        RNA_def_property_enum_funcs(prop, NULL, "rna_Material_type_set", NULL);
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING_DRAW, NULL);
+
+       prop= RNA_def_property(srna, "transparency", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_TRANSP);
+       RNA_def_property_ui_text(prop, "Transparency", "Render material as transparent.");
+       RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
+
+       prop= RNA_def_property(srna, "transparency_method", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_bitflag_sdna(prop, NULL, "mode");
+       RNA_def_property_enum_items(prop, transparency_items);
+       RNA_def_property_ui_text(prop, "Transparency Method", "Method to use for rendering transparency.");
+       RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
        
-       prop= RNA_def_property(srna, "ambient", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "ambient", PROP_FLOAT, PROP_PERCENTAGE);
        RNA_def_property_float_sdna(prop, NULL, "amb");
        RNA_def_property_range(prop, 0, 1);
        RNA_def_property_ui_text(prop, "Ambient", "Amount of global ambient color the material receives.");
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
 
        prop= RNA_def_property(srna, "emit", PROP_FLOAT, PROP_NONE);
-       RNA_def_property_range(prop, 0, 2);
+       RNA_def_property_range(prop, 0, FLT_MAX);
+       RNA_def_property_ui_range(prop, 0, 2.0f, 10, 2);
        RNA_def_property_ui_text(prop, "Emit", "Amount of light to emit.");
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
 
-       prop= RNA_def_property(srna, "translucency", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "translucency", PROP_FLOAT, PROP_PERCENTAGE);
        RNA_def_property_range(prop, 0, 1);
        RNA_def_property_ui_text(prop, "Translucency", "Amount of diffuse shading on the back side.");
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
@@ -1454,7 +1476,7 @@ void RNA_def_material(BlenderRNA *brna)
        RNA_def_property_range(prop, 0, 10);
        RNA_def_property_ui_text(prop, "Shadow Buffer Bias", "Factor to multiply shadow buffer bias with (0 is ignore.)");
 
-       prop= RNA_def_property(srna, "shadow_casting_alpha", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "shadow_casting_alpha", PROP_FLOAT, PROP_PERCENTAGE);
        RNA_def_property_float_sdna(prop, NULL, "shad_alpha");
        RNA_def_property_range(prop, 0.001, 1);
        RNA_def_property_ui_text(prop, "Shadow Casting Alpha", "Shadow casting alpha, only in use for Irregular Shadowbuffer.");
@@ -1489,11 +1511,6 @@ void RNA_def_material(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Shadeless", "Makes this material insensitive to light or shadow.");
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
        
-       prop= RNA_def_property(srna, "z_transparency", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_ZTRA);
-       RNA_def_property_ui_text(prop, "Z Transparency", "Enable alpha buffer for transparent faces.");
-       RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
-       
        prop= RNA_def_property(srna, "vertex_color_light", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_VERTEXCOL);
        RNA_def_property_ui_text(prop, "Vertex Color Light", "Add vertex colors as additional lighting.");
@@ -1539,11 +1556,6 @@ void RNA_def_material(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Exclude Mist", "Excludes this material from mist effects (in world settings)");
        RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
        
-       prop= RNA_def_property(srna, "radiosity", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_RADIO);
-       RNA_def_property_ui_text(prop, "Radiosity", "Include this material in radiosity calculations");
-       RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
-       
        prop= RNA_def_property(srna, "transparent_shadows", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_SHADOW_TRA);
        RNA_def_property_ui_text(prop, "Transparent Shadows", "Allow this object to receive transparent shadows casted through other objects");
@@ -1610,6 +1622,12 @@ void RNA_def_material(BlenderRNA *brna)
        RNA_def_property_pointer_sdna(prop, NULL, "nodetree");
        RNA_def_property_ui_text(prop, "Node Tree", "Node tree for node based materials.");
 
+       prop= RNA_def_property(srna, "use_nodes", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "use_nodes", 1);
+       RNA_def_property_boolean_funcs(prop, NULL, "rna_Material_use_nodes_set");
+       RNA_def_property_ui_text(prop, "Use Nodes", "Use shader nodes to render the material.");
+       RNA_def_property_update(prop, NC_MATERIAL, NULL);
+
        /* common */
        rna_def_animdata_common(srna);
        rna_def_mtex_common(srna, "rna_Material_mtex_begin", "rna_Material_active_texture_get",