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

    [SOLVED]Can't get bake function to work

    Scheduled Pinned Locked Moved PYTHON Development
    5 Posts 0 Posters 737 Views
    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 Offline
      Helper
      last edited by

      On 15/05/2017 at 02:01, xxxxxxxx wrote:

      I can't get the bake functino to work. I always got a black output. And There is no informations / exemples in the python sdk.

      Moreover it would be nice to have in the sdk which option are needed in all cases(like BAKE_TEX_WIDTH,  BAKE_TEX_HEIGHT).

      illumBMP = c4d.bitmaps.BaseBitmap()
      tmp = illumBMP.Init(512, 512, 24, 0)
        
      #make sur to init a width/height
      bc = c4d.BaseContainer()
      bc[c4d.BAKE_TEX_COLOR] = True
      bc[c4d.BAKE_TEX_COLOR_ILLUM] = True
      bc[c4d.BAKE_TEX_NO_INIT_BITMAP] = True
      bc[c4d.BAKE_TEX_WIDTH] = True
      bc[c4d.BAKE_TEX_HEIGHT] = True
        
      thread = c4d.threading.GeGetCurrentThread()
      ibt = c4d.utils.InitBakeTexture(doc, targetTex, targetUVW, targetUVW, bc, thread)
        
      #Check if something went wrong
      if ibt[1] != c4d.BAKE_TEX_ERR_NONE:
      	print ibt
      	return
        
      #Assign the new render doc
      render_doc = ibt[0]
      bt = c4d.utils.BakeTexture(render_doc, bc, illumBMP, thread, None)
        
      #Check if something went wrong
      if bt != c4d.BAKE_TEX_ERR_NONE:
      	print bt
      	return
        
      #save our baked image to somewhere:
      f_path = os.path.join(tempfile.gettempdir(),"realTimeIllumBake_buffer_picture.jpg")
      illumBMP.Save(f_path, c4d.FILTER_JPG)
      

      Thanks in advance (it's not very important it's just for myself, so take your time support guys ;))

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

        On 16/05/2017 at 03:33, xxxxxxxx wrote:

        Hi,

        There's an example in the Python SDK for texture baking functions: https://github.com/PluginCafe/cinema4d_py_sdk/blob/master/plugins/Py-TextureBaker/Py-TextureBaker.pyp
        You can see in the example that quite some data has to been set into the baking settings for c4d.utils.InitBakeTexture().

        Also you can simply pass None for the custom thread 'th' for the baking operation initialized with c4d.utils.InitBakeTexture(). Note since R18.039 the parameter is optional.
        Passing None or nothing means the baking operation will run on the main thread and will block Cinema 4D's GUI.

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

          On 16/05/2017 at 04:07, xxxxxxxx wrote:

          Thanks you unfortually I still can't get it to work.

          Here is the scene.
          https://www.sendspace.com/file/4t0w5e

          Select light null and execute the script you saw a black result. While if you run the bake from the Bake tag it's work properly.

          import c4d
          import tempfile
          import os
            
          def main() :
              tag = doc.GetActiveObject()
              targetTex = None
              targetUVW = None
              targetDisp = None
              try:
                  targetTex = tag[c4d.ID_USERDATA,2]
                  targetUVW = tag[c4d.ID_USERDATA,4]
                  targetDisp = tag[c4d.ID_USERDATA,5]
              except:
                  return
                  
              illumBMP = c4d.bitmaps.MultipassBitmap(512, 512, c4d.COLORMODE_RGB)
              
              
              bc = c4d.BaseContainer()
              bc[c4d.BAKE_TEX_WIDTH] = True
              bc[c4d.BAKE_TEX_HEIGHT] = True
              bc[c4d.BAKE_TEX_CONTINUE_UV] = False
              bc[c4d.BAKE_TEX_SUPERSAMPLING] = 0
              bc[c4d.BAKE_TEX_FILL_COLOR] = c4d.Vector(1)
              bc[c4d.BAKE_TEX_USE_BUMP] = False
              bc[c4d.BAKE_TEX_USE_CAMERA_VECTOR] = False
              bc[c4d.BAKE_TEX_AUTO_SIZE] = False
              bc[c4d.BAKE_TEX_NO_GI] = False
              bc[c4d.BAKE_TEX_GENERATE_UNDO] = False
              bc[c4d.BAKE_TEX_PREVIEW] = False
              bc[c4d.BAKE_TEX_SURFACECOLOR] = True
              bc[c4d.BAKE_TEX_UV_LEFT] = 0.0
              bc[c4d.BAKE_TEX_UV_RIGHT] = 1.0
              bc[c4d.BAKE_TEX_UV_TOP] = 0.0
              bc[c4d.BAKE_TEX_UV_BOTTOM] = 1.0
              bc[c4d.BAKE_TEX_NORMAL_METHOD] = c4d.BAKE_TEX_NORMAL_METHOD_OBJECT 
              
            
              thread = c4d.threading.GeGetCurrentThread()
              ibt = c4d.utils.InitBakeTexture(doc, targetTex, targetUVW, targetUVW, bc, thread)
              
              #Check if something went wrong
              if ibt[1] != c4d.BAKE_TEX_ERR_NONE:
                  print ibt
                  return
              
              #Assign the new render doc
              render_doc = ibt[0]
              bt = c4d.utils.BakeTexture(render_doc, bc, illumBMP, thread, None)
              
              #Check if something went wrong
              if bt != c4d.BAKE_TEX_ERR_NONE:
                  print bt
                  return
              
              #save our baked image to somewhere:
              f_path = os.path.join(tempfile.gettempdir(),"realTimeIllumBake_buffer_picture.jpg")
              illumBMP.Save(f_path, c4d.FILTER_JPG)
              c4d.bitmaps.ShowBitmap(illumBMP)
              
              #Set layer to the bmp
              layer_sha = targetDisp[c4d.ID_MG_SHADER_SHADER]
              first_sha_layer = layer_sha.GetFirstLayer()
              shader = first_sha_layer.GetParameter(c4d.LAYER_S_PARAM_SHADER_LINK)
              shader[c4d.BITMAPSHADER_FILENAME] = f_path
              
            
          if __name__=='__main__':
              main()
          
          1 Reply Last reply Reply Quote 0
          • H Offline
            Helper
            last edited by

            On 16/05/2017 at 06:30, xxxxxxxx wrote:

            The issue is you're passing True for  BAKE_TEX_WIDTH/BAKE_TEX_HEIGHT settings whereas they should be set to   512.

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

              On 16/05/2017 at 06:42, xxxxxxxx wrote:

              I feel stupid.

              Thanks you. 🙂

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