Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    Parameter MATERIAL_USE_REFLECTANCE [SOLVED]

    SDK Help
    0
    7
    690
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      Helper
      last edited by

      On 11/11/2016 at 04:46, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   R17.055 
      Platform:   Windows  ;   
      Language(s) :     C++  ;

      ---------
      The bool parameter I want set is highlighted in red:

      The list of parameter IDs that controls the checkboxes in this section are:

      MATERIAL_USE_COLOR
      MATERIAL_USE_DIFFUSION
      MATERIAL_USE_LUMINANCE
      MATERIAL_USE_TRANSPARENCY
      MATERIAL_USE_REFLECTION
      MATERIAL_USE_ENVIRONMENT
      MATERIAL_USE_FOG
      MATERIAL_USE_BUMP
      MATERIAL_USE_ALPHA
      MATERIAL_USE_SPECULAR
      MATERIAL_USE_SPECULARCOLOR
      MATERIAL_USE_GLOW
      MATERIAL_USE_DISPLACEMENT
      MATERIAL_USE_NORMAL
      

      This works without a problem:

      material->SetParameter(DescID(MATERIAL_USE_COLOR), false, DESCFLAGS_SET_0);
      

      This does not (i.e. the checkbox remains checked) :

      material->SetParameter(DescID(MATERIAL_USE_REFLECTION), false, DESCFLAGS_SET_0);
      

      Is this a bug or am I missing something?

      Judging by the naming of the parameter IDs, it seems like this just wasn't updated once "Reflection", "Specular" and "Specular Color" was merged into "Reflectance".

      1 Reply Last reply Reply Quote 0
      • H
        Helper
        last edited by

        On 14/11/2016 at 01:35, xxxxxxxx wrote:

        Hello,

        I could not reproduce any issues with MATERIAL_USE_REFLECTION under R18. This is the code I use to switch the parameter:

          
        GeData data;  
        material->GetParameter(MATERIAL_USE_REFLECTION, data, DESCFLAGS_GET_0);  
          
        const Bool status = data.GetBool();  
          
        material->SetParameter(MATERIAL_USE_REFLECTION, !status, DESCFLAGS_SET_0);  
          
        EventAdd();  
        

        best wishes,
        Sebastian

        1 Reply Last reply Reply Quote 0
        • H
          Helper
          last edited by

          On 14/11/2016 at 03:18, xxxxxxxx wrote:

          I guess this must be a bug in 17.055 then, your code does not affect the reflectance checkbox. SetParameter() does return true but nothing actually changes.

          I can control every other material checkbox by using the same code.

          Edit: Can confirm that the problem persists under R18. I truly do not get it.

          If I'm unclear in what I'm trying to do, I want to change this:

          to this:

          The following parameter IDs:

          MATERIAL_USE_REFLECTION
          MATERIAL_USE_SPECULAR
          MATERIAL_USE_SPECULARCOLOR
          

          doesn't make sense post R16 and I don't think they actually do anything. It would make sense for them all to be replaced by:

          MATERIAL_USE_REFLECTANCE
          

          which doesn't exist.

          1 Reply Last reply Reply Quote 0
          • H
            Helper
            last edited by

            On 14/11/2016 at 09:10, xxxxxxxx wrote:

            Hello,

            sorry but I also can't reproduce any problems with the above code and R17.055. What kind of plugin are you writing, in what context are you calling your code?

            best wishes,
            Sebastian

            1 Reply Last reply Reply Quote 0
            • H
              Helper
              last edited by

              On 14/11/2016 at 09:28, xxxxxxxx wrote:

              I edited my above post further.

              I'm creating a plugin that is based on the STL loader example. I'm essentially calling the code from what was STLLoaderData::Load().

              Edit: This is the WIP static function I wrote to create materials. Once called from Load() it is inserted into the base document and assigned to corresponding polygon object.

              static BaseMaterial* importMaterial(BaseDocument* doc, FileSystem* fs, Texture texture)
              {
              	static const std::vector<std::string> IMG_EXTS = { ".jpg", ".jpeg", ".png", ".tga" };
                
              	std::string path;
              	for (const auto &ext : IMG_EXTS)
              	{
              		if (fs->contents.find(reinterpret_cast<char*>(&texture.name) + ext) != fs->contents.end())
              		{
              			try
              			{
              				path = fs->writeFile((reinterpret_cast<char*>(&texture.name) + ext), c4dToStdStr(doc->GetDocumentPath().GetString()), "tex");
              			}
              			catch (const std::exception& ex)
              			{
              				GePrint(ex.what()); return nullptr;
              			}
              			break;
              		}
              	}
              	
              	BaseMaterial* material = BaseMaterial::Alloc(Mmaterial);
              	if (!material)
              	{
              		return nullptr;
              	}
              	
              	if (!path.empty())
              	{
              		BaseShader* bitmap_shader = BaseShader::Alloc(Xbitmap);
              		if (!bitmap_shader)
              		{
              			BaseMaterial::Free(material);
              			return nullptr;
              		}
              		bitmap_shader->SetParameter(DescID(BITMAPSHADER_FILENAME), Filename(path.c_str()), DESCFLAGS_SET_0);
              		material->SetParameter(DescID(MATERIAL_COLOR_SHADER), bitmap_shader, DESCFLAGS_SET_0);
              		material->InsertShader(bitmap_shader);
              	}
                
              	material->SetParameter(DescID(MATERIAL_USE_REFLECTION), false, DESCFLAGS_SET_0);
              	material->SetName(reinterpret_cast<char*>(&texture.name));
              	material->Message(MSG_UPDATE);
               
              	return material;
              }
              
              1 Reply Last reply Reply Quote 0
              • H
                Helper
                last edited by

                On 15/11/2016 at 01:23, xxxxxxxx wrote:

                Hello,

                when one loads a scene with a SceneLoader, Cinema will do some clean-up after that scene is created. This includes handling the reflection layers. By default this will turn on the reflectance channel.

                To avoid this one has to inform Cinema that the reflection settings are imported. This is done by setting the REFLECTION_LAYER_IMPORTED parameter.

                  
                // disable reflection channel  
                material->SetParameter(MATERIAL_USE_REFLECTION, false, DESCFLAGS_SET_0);  
                // inform Cinema that the reflection data is imported  
                material->SetParameter(REFLECTION_LAYER_IMPORTED, true, DESCFLAGS_SET_0);  
                

                best wishes,
                Sebastian

                1 Reply Last reply Reply Quote 0
                • H
                  Helper
                  last edited by

                  On 15/11/2016 at 02:14, xxxxxxxx wrote:

                  Ah, I see. It works correctly now, thank you!

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post