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
    • Recent
    • Tags
    • Users
    • Register
    • Login

    [Cinema 4D/Redshift] Nested Redshift Proxy Files Not Detected by Project Asset Inspector

    Scheduled Pinned Locked Moved Cinema 4D SDK
    20252026windowslinux
    2 Posts 2 Posters 21 Views 1 Watching
    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.
    • V Offline
      vaishhg
      last edited by

      Dear community,

      I'm facing an issue with nested Redshift proxy files not being detected by Cinema 4D's Project Asset Inspector. When a Redshift proxy file references another Redshift proxy file (proxy-of-proxy), only the first-level proxy is detected, causing incomplete asset collection when saving projects.

      Environment:

      • Cinema 4D Version: 2025, 2026
      • Renderer: Redshift
      • Operating System: Windows, Linux
      • Python Version: 3.11 (Cinema 4D native)

      Issue Description:
      When ProxyA.rs references ProxyB.rs, the Project Asset Inspector only detects ProxyA but fails to discover ProxyB. This results in incomplete project asset collection when using "Save Project with Assets" or when programmatically querying scene dependencies.

      Steps to Reproduce:

      • Create objects in Cinema 4D and export to Redshift proxy (ProxyB.rs)
      • Create new scene, add Redshift proxy object referencing ProxyB.rs
      • Export this setup to another Redshift proxy (ProxyA.rs)
      • Create new scene with Redshift proxy object referencing ProxyA.rs
      • Open Project Asset Inspector (Window > Content Browser > Project Asset Inspector)
      • Observe that only ProxyA.rs is listed, ProxyB.rs is missing

      Expected Behavior:
      The Project Asset Inspector should recursively scan Redshift proxy files to detect nested proxy references and list all dependencies.

      Actual Behavior:
      Only first-level proxy files are detected. Nested proxies are not discovered, resulting in incomplete asset collection when moving projects between workstations.

      SDK Investigation:
      I've been exploring the Cinema 4D SDK to programmatically detect these nested dependencies. Using the SDK, I can access proxy materials and textures:

      def main() -> None:
          doc = c4d.documents.GetActiveDocument()
          objs = doc.GetObjects()
          for obj in objs:
              print(obj[c4d.REDSHIFT_PROXY_MATERIAL_LIST])
              print(obj[c4d.REDSHIFT_PROXY_MATERIAL_TEXTURES])
      

      This successfully retrieves the proxy material and texture lists, showing references like:

      ProxyOfProxyOfProxyTest.c4d:__RSC4D Default Material
      RedshiftProxyTest.c4d:__RSC4D Default Material
      

      Questions:

      • Is there a built-in way to make the Project Asset Inspector recursively detect nested Redshift proxy dependencies?
      • Can c4d.documents.GetAllAssetsNew() be used to discover these nested proxy files?
      • Is there an SDK approach to programmatically traverse the proxy dependency chain and ensure all nested assets are collected?

      Workaround:
      Currently manually copying nested proxy files alongside projects, but this requires knowing which nested dependencies exist beforehand.

      Has anyone implemented a solution for detecting and bundling nested Redshift proxy dependencies? Any guidance would be greatly appreciated.

      Thank you for your assistance.

      ferdinandF 1 Reply Last reply Reply Quote 0
      • ferdinandF Offline
        ferdinand @vaishhg
        last edited by ferdinand

        Hello @vaishhg,

        Welcome to the Maxon developers forum and its community, it is great to have you with us!

        Getting Started

        Before creating your next postings, we would recommend making yourself accustomed with our forum and support procedures. You did not do anything wrong, we point all new users to these rules.

        • Forum Overview: Provides a broad overview of the fundamental structure and rules of this forum, such as the purpose of the different sub-forums or the fact that we will ban users who engage in hate speech or harassment.
        • Support Procedures: Provides a more in detail overview of how we provide technical support for APIs here. This topic will tell you how to ask good questions and limits of our technical support.
        • Forum Features: Provides an overview of the technical features of this forum, such as Markdown markup or file uploads.

        It is strongly recommended to read the first two topics carefully, especially the section Support Procedures: How to Ask Questions.

        About your First Question

        I assume this is about Deadline? I am also not sure that I understand the question correctly. Let me recap, so that we are sure we talk about the same thing.

        You have a scene Original.c4d and you export it to the Redshift Scene format OriginalProxy.rs. Then you create a Cinema 4D scene Composition.c4d and there create one or multiple Redshift Proxy objects referencing OriginalProxy.rs. Then you export that scene as a Redshift scene as CompositionProxy.rs. You now want to access information about Original.c4d or OriginalProxy.rs when loading CompositionProxy.rs with a RS Proxy object into a Cinema 4D scene (or by extension see that information in the Asset Inspector).

        That is not possible. rs is the Redshift scene format which works across the full landscape of DCCs supported by Redshift. The Redshift format has no such concept as a generator and just discretizes all smooth/procedural geometry data.

        When you export a Cinema 4D scene to the Redshift rs format, it will among other things just walk your scene and collect all the geometry caches and save them discretely in the RS format. For Redshift it does not make any difference if it collects the cache of a Cube generator object or the cache of a Redshift Proxy generator object. In the eyes of Redshift these are both just two procedural geometry generators which must be discretized/baked for export (not entirely true, because Redshift Proxy objects are cached in the Redshift Core itself and not in Cinema 4D, but close enough).

        As soon as you save a scene in the RS format, all information is lost that something once was a generator and the parameters it held. The Redshift Core also does not know a concept such as asset data or the Asset Inspector, as that is a Cinema 4D specific concept. So, such data is not stored in the rs format either.

        So, to answer your questions: You cannot reach into the past like that. Neither directly via the Asset Inspector and its API, nor indirectly by for example traversing the scene graph of a scene. In fact, RS Proxy objects do not even have caches in the Cinema 4D world, unless you set Preview to Mesh. The actual data resides discretely in the in the Redshift Core.

        As an example, when we have this scene which holds two proxies and we run this script on it to, print the scene graph string of each object in the scene, we can see both proxies only hold discrete polygonal data:

        import c4d
        import mxutils
        
        doc: c4d.documents.BaseDocument  # The currently active document.
        
        def main() -> None:
            """Called by Cinema 4D when the script is being executed.
            """
            for obj in mxutils.IterateTree(doc.GetFirstObject(), True):
                print(mxutils.GetSceneGraphString(obj))
        
        
        if __name__ == '__main__':
            main()
        

        2c7c3701-ac06-43d6-b038-bea506e05083-image.png

        When we now save that scene as an RS scene file and load that in an RS Proxy object in another scene, we will see that it only contains one blob of discrete geometry.

        627111d5-a034-409f-a93a-b7e064b9f044-image.png

        Cheers,
        Ferdinand

        MAXON SDK Specialist
        developers.maxon.net

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