<?xml version="1.0"?>
<implementation render="Generic">
  <language name="Protein" version="2.0"/>
  <api name="Protein" version="2.0"/>
  <root_bindings name="root"/>

  <constants>
    <float   name="concrete_diffuse_image_fade"             val="1."/>
    <boolean name="concrete_is_metal"                       val="false"/>
    <float   name="concrete_transparency"                   val="0.0"/>
    <float   name="concrete_transparency_image_fade"        val="0.0"/>
    <float   name="concrete_refraction_index"               val="1.4"/>
    <float   name="concrete_refraction_translucency_weight" val=".5"/>
    <float   name="concrete_cutout_opacity"                 val="1.0"/>
    <boolean name="concrete_backface_cull"                  val="false"/>
    <float   name="concrete_self_illum_luminance"           val="0.0"/>
    <float   name="concrete_self_illum_color_temperature"   val="0.0"/>
    <String  name="concrete_glossiness_asset_name"          val="Noise"/>
    <String  name="concrete_glossiness_asset_bindings"      val="glossiness_asset_noise"/>
  </constants>

  <operator function="ConcreteBrdf0DegreeReflBOF" name="brdf_0_degree_refl">
    <map_interface source="concrete_finish"  destination="finish"/>
    <map_interface source="concrete_sealant" destination="application"/>
  </operator>

  <operator function="ConcreteBrdf90DegreeReflBOF" name="brdf_90_degree_refl">
    <map_interface source="concrete_finish"  destination="finish"/>
    <map_interface source="concrete_sealant" destination="application"/>
  </operator>

  <operator function="ConcreteBumpAmountBOF" name="bump_amount">
    <map_interface source="concrete_finish"  destination="finish"/>
    <map_interface source="concrete_sealant" destination="application"/>
  </operator>

  <operator function="RoundCornerRadiusSpiderBOF" name="round_corner_radius_BOF">
    <map_interface source="concrete_roundcorners_on"     destination="round_corners_on"/>
    <map_interface source="concrete_roundcorners_radius" destination="round_corners_radius"/>
  </operator>

  <bindings target="shader" name="root">
    <map_interface source="concrete_color_by_object"                destination="color_by_object"/>
    <map_interface source="concrete_color"                          destination="generic_diffuse"/>
    <map_constant  source="concrete_diffuse_image_fade"             destination="generic_diffuse_image_fade"/>
    <map_operator  source="brdf_0_degree_refl"                      destination="generic_reflectivity_at_0deg"/>
    <map_operator  source="brdf_90_degree_refl"                     destination="generic_reflectivity_at_90deg"/>      
    <map_bindings  source="glossiness_asset"                        destination="generic_glossiness"/>      
    <map_constant  source="concrete_is_metal"                       destination="generic_is_metal"/>
    <map_constant  source="concrete_transparency"                   destination="generic_transparency"/>
    <map_constant  source="concrete_transparency_image_fade"        destination="generic_transparency_image_fade"/>
    <map_constant  source="concrete_refraction_index"               destination="generic_refraction_index"/>
    <map_constant  source="concrete_refraction_translucency_weight" destination="generic_refraction_translucency_weight"/>
    <map_constant  source="concrete_cutout_opacity"                 destination="generic_cutout_opacity"/>
    <map_constant  source="concrete_backface_cull"                  destination="generic_backface_cull"/>
    <map_constant  source="concrete_self_illum_luminance"           destination="generic_self_illum_luminance"/>
    <map_constant  source="concrete_self_illum_color_temperature"   destination="generic_self_illum_color_temperature"/>
    <map_operator  source="bump_amount"                             destination="generic_bump_amount"/>      
    <map_bindings  source="bump_map_asset"                          destination="generic_bump_map"/>
    <map_interface source="concrete_ao_on"                          destination="generic_ao_on"/>
    <map_interface source="concrete_ao_samples"                     destination="generic_ao_samples"/>
    <map_interface source="concrete_ao_distance"                    destination="generic_ao_distance"/>
    <map_interface source="concrete_ao_details"                     destination="generic_ao_details"/>
    <map_bindings  source="round_corner_radius_map"                 destination="generic_roundcorners_radius"/>
    <map_operator  source="round_corner_radius_BOF"                 destination="generic_roundcorners_radius"/>
    <map_interface source="concrete_roundcorners_allow_different_materials" destination="generic_roundcorners_allow_different_materials"/>
    <map_interface source="concrete_refl_depth"                     destination="generic_refl_depth"/> 
    <map_interface source="reflection_glossy_samples"               destination="generic_reflection_glossy_samples"/>
    <map_interface source="common_Tint_toggle"                      destination="common_Tint_toggle"/>
    <map_interface source="common_Tint_color"                       destination="common_Tint_color"/> 
  </bindings>

  <!-- Connected Asset for Glossiness --> 
  <operator function="ConcreteGlossinessAssetNameBOF" name="glossiness_asset_name">
    <map_constant source="concrete_glossiness_asset_name" destination="asset_name"/>
  </operator>

  <operator function="ConcreteGlossinessAssetBindingsBOF" name="glossiness_asset_bindings">
    <map_constant source="concrete_glossiness_asset_bindings" destination="bindings_name"/>
  </operator>
    
  <bindings target="glossiness_asset_instance" name="glossiness_asset">
    <map_operator  source="glossiness_asset_name"     destination="asset_name"/>
    <map_operator  source="glossiness_asset_bindings" destination="bindings_name"/>
  </bindings>
    
  <!-- Noise Asset Binding Operators for Glossiness -->
  <operator function="ConcreteReflGlossNoiseSizeBOF" name="refl_gloss_noiseSize">
    <map_interface source="concrete_finish"  destination="finish"/>
    <map_interface source="concrete_sealant" destination="application"/>
  </operator>

  <operator function="ConcreteReflGlossNoiseCol1BOF" name="refl_gloss_noiseCol1">
    <map_interface source="concrete_finish"  destination="finish"/>
    <map_interface source="concrete_sealant" destination="application"/>
  </operator>

  <operator function="ConcreteReflGlossNoiseCol2BOF" name="refl_gloss_noiseCol2">
    <map_interface source="concrete_finish"  destination="finish"/>
    <map_interface source="concrete_sealant" destination="application"/>
  </operator>

  <operator function="ConcreteNoiseGlossyTilingBOF" name="noiseglossy_tiling"/>

  <bindings target="glossiness_asset_noise_instance" name="glossiness_asset_noise">
    <map_operator  source="refl_gloss_noiseSize" destination="noise_Size"/>
    <map_operator  source="refl_gloss_noiseCol1" destination="noise_Color1"/>
    <map_operator  source="refl_gloss_noiseCol2" destination="noise_Color2"/>
    <map_operator  source="noiseglossy_tiling"   destination="noise_Tiling"/>
  </bindings>
    
  <!-- Connected Asset for Bump_map -->
  <operator function="ConcreteBumpMapAssetNameBOF" name="bump_map_asset_name">
    <map_interface source="concrete_finish"  destination="finish"/>
  </operator>

  <operator function="ConcreteBumpMapAssetBindingsBOF" name="bump_map_asset_bindings">
    <map_interface source="concrete_finish"  destination="finish"/>
  </operator>

  <bindings target="bump_map_asset_instance" name="bump_map_asset">
    <map_operator  source="bump_map_asset_name"     destination="asset_name"/>
    <map_operator  source="bump_map_asset_bindings" destination="bindings_name"/>
  </bindings>

  <!-- UnifiedBitmap Asset Binding Operators for Bump_map -->
  <operator function="ConcreteBumpMapAssetUnifiedbitmapBitmapBOF" name="bump_map_asset_unifiedbitmap_Bitmap">
    <map_interface source="concrete_finish"  destination="finish"/>
  </operator>

  <operator function="ConcreteBumpMapAssetUnifiedbitmapRealWorldScaleXBOF" name="bump_map_asset_unifiedbitmap_RealWorldScaleX">
    <map_interface source="concrete_finish"  destination="finish"/>
  </operator>

  <operator function="ConcreteBumpMapAssetUnifiedbitmapRealWorldScaleYBOF" name="bump_map_asset_unifiedbitmap_RealWorldScaleY">
    <map_interface source="concrete_finish"  destination="finish"/>
  </operator>
  
  <bindings target="bump_map_asset_unifiedbitmap_instance" name="bump_map_asset_unifiedbitmap">
    <map_operator  source="bump_map_asset_unifiedbitmap_Bitmap" destination="unifiedbitmap_Bitmap"/>
    <map_operator  source="bump_map_asset_unifiedbitmap_RealWorldScaleX" destination="unifiedbitmap_RealWorldScaleX"/>
    <map_operator  source="bump_map_asset_unifiedbitmap_RealWorldScaleY" destination="unifiedbitmap_RealWorldScaleY"/>
  </bindings>

  <!-- Noise Asset Binding Operators for Bump_map -->
  <operator function="ConcreteBumpMapAssetNoiseSizeBOF" name="bump_map_asset_noise_Size">
    <map_interface source="concrete_finish"  destination="finish"/>
  </operator>

  <operator function="ConcreteBumpMapAssetNoiseColor1BOF" name="bump_map_asset_noise_Color1">
    <map_interface source="concrete_finish"  destination="finish"/>
  </operator>

  <operator function="ConcreteBumpMapAssetNoiseColor2BOF" name="bump_map_asset_noise_Color2">
    <map_interface source="concrete_finish"  destination="finish"/>
  </operator>
    
  <bindings target="bump_map_asset_noise_instance" name="bump_map_asset_noise">
    <map_operator  source="bump_map_asset_noise_Size"   destination="noise_Size"/>
    <map_operator  source="bump_map_asset_noise_Color1" destination="noise_Color1"/>
    <map_operator  source="bump_map_asset_noise_Color2" destination="noise_Color2"/>
  </bindings>


  <!-- Basically, when the XXX_roundcorners_on is true, we should map the value or connected asset of xxxx_rouncornders_radius to generic_roundcorners_radius. Or set generic_roundcorners_radius to 0.0 -->
  <operator function="RoundCornersRadiusMapSpiderBOF" name="round_corner_radius_map_property_name">
    <map_interface source="concrete_roundcorners_on"     destination="round_corners_on"/>
    <map_interface source="concrete_roundcorners_radius" destination="round_corners_radius"/>
  </operator>

  <bindings target="round_corner_radius_map" name="round_corner_radius_map">
    <map_operator source="round_corner_radius_map_property_name" destination="property_name" />
  </bindings>
  
</implementation>
