Alembic export doesn't take 'Custom Properties', as alembic non-standard data. #50725
Labels
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
EEVEE & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
EEVEE & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
17 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: blender/blender#50725
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
System Information
Opensuse Leap 42.1 Linux, ATI graphics card
Blender Version
Blender 2.78b
Short description of error
If i add an custom properties, manually or by python api. Alembic export doesn't take care of them (custom properties).
If the alembic file is reloading in blender the custom properties are disappeared. Same for an extra 3d software (maya , guerilla...)
By exemple all 'extra attr' in maya are exported in native alembic export.
In a robust pipeline the absence of this 'custom properties' is a really problems.
Exact steps for others to reproduce the error
or add it manually in properties panel.
Changed status to: 'Open'
Added subscriber: @col-one
Added subscribers: @kevindietrich, @mont29
@kevindietrich again not sure whether this is TODO or bug or something else, will let you handle it. :)
Added subscriber: @dr.sybren
@col-one do you have an example Alembic file, produced by Maya, that shows how Maya does this? Perhaps we can implement this in a compatible way.
@dr.sybren just some notes if you wish to tackle this on a rainy day before I can:
ArbGeomParams
, I have a lot of Alembic archives from various software (maybe we could have a public repo for them? also for regression tests purposes), some of which containing arbitrary properties. Also there is D2324 that could tackle some of this.Nevertheless, although some examples files and example workflows would be appreciated, this is more TODO than bug, except maybe for the case where properties are erased when reloading an Abc archive.
Yes please, share them!
The most important thing in a plurial software pipeline is to 'bake' extra properties in the .abc so we can bake a rigid nomenclature and avoid the mistake renaming or special characters by artists, also through different soft we keep It safe.
An other common use of this extra is used in a pipeline with standalone render engine like Guerilla. The workflow is based on this extra attr which has name 'tags'. With this tags it becomes possible to do shading / lookdev in parallel of animation and rigging. Shading artist generat a rendergraph without mesh who is it merged in final rendering scene with final abc files (who have extra attr tags). This technic will become standard workflow, all standard software manage this extra attr in abc, except 3dsmax and blender (for the moment). It's always used in big production as Illumination Mac Guff, Disney...
@col-one As I wrote in February: do you have an example Alembic file, produced by Maya, that shows how Maya does this? We don't need more motivation about how important this feature is, we need documentation and examples so that we can actually implement it.
Sorry for late... my previous answer was more for Kevin, and pipe details.
Here a simple alembic with some extra attr from maya. 'AnotherAttr' 'GuerillaTags'.
If i can send you more complex alembic i will do it soon.
Thanks a lot.
test.abc
Added subscriber: @g-lul
Hi all !
Is there any news about this improvement ?
Thanks !
I would love... but i think not ={
Ok, now i'm sad :(
Thanks for the info @col-one ! :)
Such custom properties aren't supported by Blender. This means that this isn't a bug report, but a feature request. We may implement this at some point, but not sure when we have time to work on it. A few simple example files do help, so thanks @col-one for providing one.
@dr.sybren In my older message there is a simple alembic with non-standard data, it come from maya. Tell me if you want more exemples.
I know, I should have written "thanks @col-one for already providing one".
@col-one: you wrote "If i can send you more complex alembic i will do it soon" -- any progress on that?
Hello, after our discussions at the bconf I thought it wise to propose a little synthesis about the management of Custom Properties and Alembic.
Contrary to ticket title, blender’s Custom Properties can be handled by classic arbitrary alembic’sArrayProperty, This properties are data with form [key: value] who can be write on differents abc archive components like transform and shape. Data on others components like vertex, face… seems can be handled by non-standard data.
During the import of an abc archive the software can interpret this arbitary ArrayPropertydata and use its for automation or to set values dependents of this data.
This data don’t disturb importation from a procedure who doesn’t interprets them.
For example Guerilla software interpret some abc’s Property data like*[“guerilla_tags”: “foo, bar”]*during the import proc if a Property data is find on a transform or shape component Guerilla will set the tags properties with its coma splitted values foo, bar.
Here some example extract with abcls, from a maya .abc and there is Properties on transform and shape,foo_transform foo_shape:
In blender how could this work ?
Export is the easy way, there is no interpretations questions about this abc's Properties.
Firstable the arbitrary ArrayPropertiescan be defined by the blender’s Custom Propertiespresent insideobjectormesh properties because it’s easy to create them manually or with python.
Then, they will be written as arbitrary data on transform or shape abc archive component depend where the custom properties is (object or mesh).
How decided which Custom Propertiesmust be write in abc archive or not ?
The Maya way is maybe the best, inside the export abc panel it’s possible to precise which key name must be exported and/or which prefix key name (don’t have maya for a screen capture...). Also in the proc :
When AbcExport travers all objects from root myChar each time who it find foo, foo_py maya extra attr (blender’sCustom Propertiesequivalent) it will write them as ArrayProperties data.
So, in blender abc export ops can be defined with one or two extra argument, name_custom_propertiesandprefix_custom_properties.
For the future it might be possible to extrapolate this to the new blender’s collections system where defined collection’s Custom Properties will be propagate as arbitrary data on each object inside this collection during the abc writing.
For import it’s will be more complex, because each keys arbitrary properties data must will be discussed on how interpret it. For example if a data "cycle_subdiv": 2 is find must we set the cycle subdivision value of the object at 2 ? Or maybe just create a blender’s Custom Properties "cycle_subdiv": 2on this object ?
Maybe we can find a more generic solution that will leave the different blender’s domains to freely interpret these data.
Here the file text from abcls:
custom_properties.abcls
And here the abc archive:
custom_properties.abcls
For the moment, it is very difficult for me to find a complex alembic file that is not proprietary. But the complexity resides more in the hierarchical structure rather than in the writing of the properties who are present only on transformers and shapes.
But if i can catch one i will send you anyway.
Please consider this proposal, better the Alembic will be integrated into blender at the most blender will be used in serious production.
Thanks a lot !
I noticed that the custom properties are arrays of extent 1 (for example,
"guerilla_tags": ["foo, bar"]
. Do you have any idea why that would be? Why not simply write them as Scalar properties instead, i.e."guearilla_tags: "foo, bar"
?These properties are defined on
.arbGeomParams
; does all software write its custom properties there? There is also.userProperties
, which we currently use to write some data about stereo distance and eye separation for multi-view cameras. Looking at the name that would seem like a more logical spot to place custom properties. Would that be understood by Maya, Houdini, etc. too?Furthermore, do these properties change over time? In other words, can they be animated or not?
Indeed we have already asked ourselves this question but I don't realy know, I don't know if it's a Maya export restriction or if it's alembic who owns just this type of container, will ScalarProperty exist?
Humm, for the moment my knowledge is limited there, I will try to do some research on other software like 3dsmax, houdini... I pretty sure Arnold uses only on the
.arbGeomParams
. For.userProperties
I never try, can you send me an archive with this kind of properties ? i will test.Yes it's a possibility, i.e: a custom property who manage texture animation in a rigging, who it will use later in the render.
Yes, scalar properties exist, which is why I find this scalar-like array approach a bit strange.
Looking forward to your findings!
I'll post a file here once I've implemented writing of custom properties. Then it should be easy to write to either
.abcGeomParams
or.userProperties
and see what is supported by which software.Ok.
Ok, here an abcls from houdini alembic with a string attributefoo_houdini
Here the file :
custom_properties_houdini.abc
Like maya houdini write string in a
ArrayProperty
... and in.arbGeomParams
, maybe it's a conventional accord. I ask somes question at guerilla render developers about management of this attribute.In houdini, if I change the type of the attribute, for example to int, it continues to write in ArrayProperty of type int.
With houdini it is possible to put several values in an attribute and now we can see the
arrayExtent
envolve.custom_properties_houdini2.abc
News from Guerilla render's dev :
Guerilla reads similary way
.arbGeomParams
and.userProperties
.I don't know about Arnold or Renderman ....
Thanks for the info, this is very useful. I have implemented reading support for those properties in my private branch, albeit without animation support and not yet for all object types (currently at object itself and mesh data, and only in
.arbGeomParams
).Could you maybe create a file for me that has a few properties animated? It would be great if you could include int/float singleton, int/float array, and string properties.
Here some alembic from Houdini, attribute foo animated on 10 frames int float and string. It's look like weird, I dont realy understand how animation work in alembic. I hope it will be useful !
custom_properties_houdini_anim_float.abc
custom_properties_houdini_anim_float_arry.abc
custom_properties_houdini_anim_int.abc
custom_properties_houdini_anim_int_array.abc
custom_properties_houdini_anim_str.abc
Added subscriber: @n1ckfg
This might be a related issue--currently I can't access Alembic vertex colors exported from Blender 2.79 in Houdini or Maya. In Blender Python, I've created a vertex color layer named Cd; the color set is visible in Maya when imported with -rcs flag, but contains no data; in Houdini the Cd attribute isn't visible at all. However, the Cd attribute still exists in the Blender alembic file and is visible on re-import.
Any advice for a Houdini or Maya solution? (Workarounds from the Houdini/Maya side are fine for now--I'm familiar with Python for both, so if I can see the data I can work with it.) Example Blender export attached.untitled.abc
@n1ckfg this isn't related, please write a new bug report for this.
No worries, reposted with new tests at https:*developer.blender.org/T52417#474982
Added subscriber: @tcherno
Hello there!!
I'd be really glad to include blender in our production workflow (The Yard vfx - feature film), hopefully very soon.
We're trying to avoid Maya, and Blender could be a solution for modeling, UV unfolding, or even any postprocess that could be executed in batch mode (sanity check, anim check, mesh volume conservation, simulations, fix anim, and many others).
We are currently using Ogawa alembic format for animation caches, so we can import/export them into/from Houdini, Guerilla Render, Nuke, ...
We need to be able to pass some custom attributes from a soft to another, and some of them are strings, others are floats, int, booleans or vectors (3 floats).
All of them can be animated, except strings.
I tried to export some "Custom Properties" from Blender, but it doesn't seems to be exported for now.
Is this topic closed, or is there any relative dev task created/in work in progress, to modify Blender's alembic exporter features?
Thank you very much for this great work, I hope to ear from you very soon :)
(Thanx for the FMX conference on blender in production by the way, I was there)
Cheers.
@tcherno I'm the developer working on Alembic. Currently my focus lies on the Blender 2.8 Code Quest tasks, but I certainly want to address import/export of Alembic custom properties at some point. I can't make promises about the 'when' though.
@dr.sybren
Hi Sybren :)
Thank you very much for your quick answer!
I'll check the link to see all the features you are working on.
I hope there is a special topic on motion blur samples too :)
In the version we have installed here, I think there is only two samples than can be specified in the exporter, and we often need to increase this number, for exemple when vertices' trajectory is a curve and their speed is high.
This task is not a forum for Alembic support; I'm happy to answer your questions at https://blender.chat/channel/support
Added subscriber: @SteffenD
Added subscriber: @shotalot
Any news on this? This is a big one in terms of alembic for studios considering using it in thier pipeline, I will be more than willing to supply production example files in email, this will be for alembics exported from houdini specifically.
Added subscriber: @Narann
Added subscriber: @PixelTrader
@shotalot It's not a trivial thing to solve. It'll take more time, can't make any promises as to when there is enough time to implement it. It's still on the TODO list, though.
Hello All,
I'm a developer at Tangent Animation and supporting custom properties in our internal build of Blender is something I've been working on. I'm not ready to share it but I'm just posting here to say that I'm working on it, and I hope we're not duplicating efforts to make it available.
Cheers,
Philip Luk
@PixelTrader that's good news! If you want you can upload it as a diff to Differential; that way I can take a look at the approach you're taking and give some feedback before you spend too much time polishing things ;-)
Added subscriber: @p2or
Added subscriber: @frameshift
Marking this task as To Do, as it's a known limitation of Blender and not a bug.
Added subscriber: @evantryan
Added subscriber: @demmordor
Added subscriber: @afleith
Added subscriber: @lichtwerk
As you can see in D8869: Alembic export: write custom properties, we're very close to having custom properties exported to Alembic. Can anyone help me out with some jazzy example file that really shows off the spectacular results that can be had with this new feature? We'd like to use that when announcing the feature for Blender 2.91.
Note that this is only about the export of custom properties. Importing those will have to wait until Blender's import mechanics are improved (see #73363 (Alembic / USD) and #68933 (Collections for Import/Export)).
Hi everyone,
Cool to see this feature finally added to Blender. Kudos to the devs!
It can be hard to "show" images, I don't use Blender for production (unfortunately) so I can't even push to provide any picture, but I can explain why those attributes are important for production.
First we talk about object properties (The property is on the object), not per-primite (aka per point/vertex/face/array) properties.
One example of use is to tag objects for renderer. In Maya/Blender, you can create a "GuerillaTags" property with comma separated words on objects. When those Alembic are imported in Guerilla, Guerilla will apply those tags on there respective objects.
http://guerillarender.com/doc/2.2/User%20Guide_Scene%20Graph_Tags.html
The use of this is general and studios can use them in various way (thats the beauty of the trick).
On a project I worked on, each tag had a special meaning:
The other tag use was in Lookdev: Rigging can sometime change object hierarchy so lookdev should not depend on hierarchy.
A way to fix the problem was to set a bunch of tags on objects that share the same shader look using tags instead of shape hierarchical path to assign materials. Tag where kinda generically named wood_brow/wood_clear/wood_green/metal_white/cloth_dark/etc.
Then assignment rules where tag based (instead of path base) : Alembic Hierarchy -> Guerilla assignment rules depending on tag names -> modified hierarchy -> renderer.
I mostly talked about Guerilla, but I'm sure others have other use.
I suspect Arnold also use Alembic attributes for its Alembic procedural, but take it lightly and I would prefer an Arnold user to confirm.
I don't know if Cycle do have an Alembic procedural but Cycle could choose to recognize attributes at render time: "cy_subdivision" (int) 1: Apply a subdivision on 1, etc.
This was for Guerilla tags.
Another kind of attributes we use is simple floats/color directly extracted from Maya (and hope: Blender). This mean animators can control a color/value (that are often used in the rigging to display the result) and those values are passed to the lighting step. A case we commonly use is light toogle animation: Animators are in control of light stick use by a character and control animation using a rig attribute. The rig also set a value in on a node. Lighting then plug this value to light and so, "retrieve" the lighting animation. To be honest, the process is so much used here the plug is done automatically after lighting scene is assembled and an alembic contain such attribute.
I hope this would help to describe the feature and hope others will also explain their case.
Keep the good work Blender team !
@Narann thanks for the explanation. We're still looking for actual files to show off the amazing things that can be done now (as in, showing is better than telling).
Changed status from 'Confirmed' to: 'Resolved'
This has been committed to the
master
branch and will be part of Blender 2.91. We're still interested in some nice demos for the release log.Great! Keep the good work! :)