Does Cinema4D really not support importing meta-data from an FBX import? I have a hard time believing this type of basic data I/O isn't supported in c4d...
Attached is an FBX with meta-data key/value pair of "foo" : "bar". Metadata comes in fine importing with Houdini, Maya, Blender, but I can't seem to get the metadata into C4D.. Thank you for any confirmations here!
EDIT: Can't upload an FBX file apparently. Concept is pretty straight forward though. Metadata support with FBX import.
Thank you for the reply. Good information.
What underlining technology is used in the asset database browser in Cinema4D? Is the asset database using some common backend (MongoDB / SQL / SQLite) or is it all custom developed for Cinema?
I'm concerned about leveraging Cinema4D Asset Database in a team operation to store important elements of our 3D Operation, if under the hood, the database has been custom rolled for C4D. Why you may ask? Two main reasons
Can a database connection be made without C4D? Are there any enterprise team pipeline TDs here that could pipe-in with their thoughts as well? If Maxon is black boxing user data with the C4D asset browser, that's a major concern for a production database...
@m_adam - Now I'm sorry for my late reply! I appreciate you writing this up for me and I think it's a really good reference. This question has been answered then!
Another quick question which sort of relates (I can create a new thread if admins want) - Do you have any recommendation for up-to-date C4D Python API training? I'm coming from writing Python in Houdini and Maya, but Cinema 4D seems to have a more unique setup with how to interface with their API.
Any training recommendations would be appreciated. Teach a man to fish and... something something fish.
I'm having issues wrapping my head around how to change an FBX Importer preference via Python. Any help would be appreciated, below explains my approach and what I was able to figure out so far. Please note that I am fairly new to the C4D Python API.
The specific goal is to change c4d.FBXIMPORT_NORMALS of the FBX Import.
First I need to figure out what the plugin ID is. I used the below approach to do. Please let me know if there is a better way to do this -
for p in c4d.plugins.FilterPluginList(c4d.PLUGINTYPE_ANY,True):
print (p.GetID(), " = ", p.GetName())
The above output gives me -
1026370 = FBX (*.fbx)
1026369 = FBX (*.fbx)
1026370 = FBX (*.fbx) Export
1026369 = FBX (*.fbx) Import
1026371 = FBXExportReferenceTag
The FBX Import Plugin Id is 1026369 . I now can return the BasePlugin object and SHOULD be able to set the parameter from here -
plug = c4d.plugins.FindPlugin(1026369, c4d.PLUGINTYPE_SCENELOADER)
>>> <c4d.plugins.BasePlugin object called FBX (*.fbx) with ID 15 at 2429143389120>
plug[c4d.FBXIMPORT_NORMALS] = c4d.FBXIMPORT_NORMALS_NORMALTAGS
I run the above without any changes to the Preferences/FBX Import UI. Following the same concept for the "Units" plugin I get the expected results when modifying it's parm Units[c4d.PREF_UNITS_AUTOCONVERT] = False
Units[c4d.PREF_UNITS_AUTOCONVERT] = False
Am I doing something incorrectly? Is this access via Python just not supported? Any help would be great. Thank you.
@ferdinand - Thank you! Apologies about not following forum protocol. I wanted to consolidate to avoid duplicate posts, but understand the desire to have separation between Python / C++ conversations.
I will reference the C++ material you linked for additional background. Thank you for the straightforward explanation between database and repository.
I had a moment of clarity after my previous post...
The "otherOrDbUrl" flag used to init a new "AssetDatabaseStruct" is a maxon.Url object...
This is not specified in the documentation from what I saw. Probably would be advantageous to include the types that are being passed as arguments.
At any rate, answered my own question. Database vs Repository clarification would still be useful if you're game!
@ferdinand - Would you be able to provide any additional guidance on how to do this using Python? Specifically, the appropriate way to define a new "AssetDatabaseStruct" so it can be added as an argument for "AssetDataBasesInterface.SetDatabases(newDataBases)"?
The documentation shows-
AssetDatabaseStruct.__init__(otherOrDbUrl, active=True, exportOnSaveProject=True, isBuiltin=False)
Which I'm trying to use in this manner -
dbStruct = AssetDatabaseStruct(otherOrDbUrl="C:/path/to/pre-existing/database/dir", active=True, exportOnSaveProject=True, isBuiltin=False)
But printing out the dbStruct yields -
_dbUrl: relative:///otherOrDbUrl, _active: True, _exportOnSaveProject: True, _isBuiltin: False
The path isn't taking. I'm assuming "otherOrDbUrl" is a string unix path to the database folder.
Now contrast this to what prints out after collecting AssetDatabaseStructs from -
_dbUrl: file:///C:/path/to/pre-existing/database/dir, _active: True, _exportOnSaveProject: True, _isBuiltin: False
I can't seem to find any examples on this and the documentation is a bit light (or I'm a bit dense, one of the two). Also I'm still a bit muddy on the differences between an asset database and an asset repository (bonus points if you can shed some light).
Very good. Thank you for the response and guiding me towards the appropriate channel of communication for this.
For my own curiosity, is Cinema4D leveraging a third party SDK for it's CAD meshing / translation? If so, does anyone know which one?
For example, Rhino utilizes Datakit for it's backend CAD translation process. I'm assuming Cinema4D uses a third party SDK as CAD translation is a very complicated subject matter, but Maxon may also be using something custom built at the kernel level instead. A mystery.