Alembic export doesn't take 'Custom Properties', as alembic non-standard data. #50725

Closed
opened 2017-02-19 12:19:41 +01:00 by colin · 60 comments

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

  • Select cube
  • type : pby.context.object["MyCustomProps"] = "foo"
    or add it manually in properties panel.
  • file > export alembic
  • file > import alembic
**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** - Select cube - type : pby.context.object["MyCustomProps"] = "foo" or add it manually in properties panel. - file > export alembic - file > import alembic
Author

Changed status to: 'Open'

Changed status to: 'Open'
Author

Added subscriber: @col-one

Added subscriber: @col-one

Added subscribers: @kevindietrich, @mont29

Added subscribers: @kevindietrich, @mont29
Kévin Dietrich was assigned by Bastien Montagne 2017-02-23 14:36:59 +01:00

@kevindietrich again not sure whether this is TODO or bug or something else, will let you handle it. :)

@kevindietrich again not sure whether this is TODO or bug or something else, will let you handle it. :)

Added subscriber: @dr.sybren

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.

@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:

  • on Alembic side I guess it would make use of the 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.
  • Blender side is the tricky part. The original patch used to handle custom properties, IIRC only for exports, however it was far from ideal. Campbell suggested to have a single Alembic property-group where all these custom settings can be stored (eg, object["alembic"]), but we scratched it due to lack of workflow examples.

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.

@dr.sybren just some notes if you wish to tackle this on a rainy day before I can: - on Alembic side I guess it would make use of the `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](https://archive.blender.org/developer/D2324) that could tackle some of this. - Blender side is the tricky part. The original patch used to handle custom properties, IIRC only for exports, however it was far from ideal. Campbell suggested to have a single Alembic property-group where all these custom settings can be stored (eg, object["alembic"]), but we scratched it due to lack of workflow examples. 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.

In #50725#419399, @kevindietrich wrote:
I have a lot of Alembic archives from various software (maybe we could have a public repo for them? also for regression tests purposes),

Yes please, share them!

> In #50725#419399, @kevindietrich wrote: > I have a lot of Alembic archives from various software (maybe we could have a public repo for them? also for regression tests purposes), Yes please, share them!
Author

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...

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.

@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.
Author

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

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](https://archive.blender.org/developer/F544289/test.abc)

Added subscriber: @g-lul

Added subscriber: @g-lul

Hi all !

Is there any news about this improvement ?

Thanks !

Hi all ! Is there any news about this improvement ? Thanks !
Author

I would love... but i think not ={

I would love... but i think not ={

Ok, now i'm sad :(
Thanks for the info @col-one ! :)

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.

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.
Author

@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.

@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.
Author

In #50725#427534, @col-one wrote:
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

> In #50725#427534, @col-one wrote: > 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](https://archive.blender.org/developer/F544289/test.abc)

I know, I should have written "thanks @col-one for already providing one".

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?

@col-one: you wrote "If i can send you more complex alembic i will do it soon" -- any progress on that?
Author

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:

Using Alembic 1.7.1 (built Nov  1 2017 13:25:15)
  file written by: Maya 2016.5 AbcExport v1.0
  using Alembic : Alembic 1.5.8 (built Dec 24 2015 17:28:19)
  written on : Wed Nov 01 13:56:27 2017
  user description : Exported from: .
  core type : Ogawa
...
/obj1:
AbcGeom_PolyMesh_v1                objShape1 {
                                    schema=AbcGeom_PolyMesh_v1
                                    schemaBaseType=AbcGeom_GeomBase_v1
                                    schemaObjTitle=AbcGeom_PolyMesh_v1:.geom
                                   }
CompoundProperty                   .xform {schema=AbcGeom_Xform_v3}
/obj1/.xform:
CompoundProperty                   .arbGeomParams
CompoundProperty                   .userProperties
/obj1/.arbGeomParams:
ArrayProperty       string         foo_transform[1] {
                                    arrayExtent=1
                                    isGeomParam=true
                                    podExtent=1
                                    podName=string
                                   }
bar_transform
...
/obj2/objShape2/.arbGeomParams:
ArrayProperty       string         foo_shape[1] {
                                    arrayExtent=1
                                    isGeomParam=true
                                    podExtent=1
                                    podName=string
                                   }
bar_shape
...
/obj3:
AbcGeom_PolyMesh_v1                objShape3 {
                                    schema=AbcGeom_PolyMesh_v1
                                    schemaBaseType=AbcGeom_GeomBase_v1
                                    schemaObjTitle=AbcGeom_PolyMesh_v1:.geom
                                   }
CompoundProperty                   .xform {schema=AbcGeom_Xform_v3}
/obj3/.xform:
CompoundProperty                   .arbGeomParams
CompoundProperty                   .userProperties
/obj3/.arbGeomParams:
ArrayProperty       string         foo_transform[1] {
                                    arrayExtent=1
                                    isGeomParam=true
                                    podExtent=1
                                    podName=string
                                   }
bar_transform
...
/obj3/objShape3/.arbGeomParams:
ArrayProperty       string         foo_shape[1] {
                                    arrayExtent=1
                                    isGeomParam=true
                                    podExtent=1
                                    podName=string
                                   }
bar_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.

Screenshot_20171101_160729.png

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 :

  AbcExport -root |myChar -file test.abc -attr foo foo_py -attrprefix cycles foo

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 !

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’s*ArrayProperty*, 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 *ArrayProperty*data 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*: ``` Using Alembic 1.7.1 (built Nov 1 2017 13:25:15) file written by: Maya 2016.5 AbcExport v1.0 using Alembic : Alembic 1.5.8 (built Dec 24 2015 17:28:19) written on : Wed Nov 01 13:56:27 2017 user description : Exported from: . core type : Ogawa ... /obj1: AbcGeom_PolyMesh_v1 objShape1 { schema=AbcGeom_PolyMesh_v1 schemaBaseType=AbcGeom_GeomBase_v1 schemaObjTitle=AbcGeom_PolyMesh_v1:.geom } CompoundProperty .xform {schema=AbcGeom_Xform_v3} /obj1/.xform: CompoundProperty .arbGeomParams CompoundProperty .userProperties /obj1/.arbGeomParams: ArrayProperty string foo_transform[1] { arrayExtent=1 isGeomParam=true podExtent=1 podName=string } bar_transform ... /obj2/objShape2/.arbGeomParams: ArrayProperty string foo_shape[1] { arrayExtent=1 isGeomParam=true podExtent=1 podName=string } bar_shape ... /obj3: AbcGeom_PolyMesh_v1 objShape3 { schema=AbcGeom_PolyMesh_v1 schemaBaseType=AbcGeom_GeomBase_v1 schemaObjTitle=AbcGeom_PolyMesh_v1:.geom } CompoundProperty .xform {schema=AbcGeom_Xform_v3} /obj3/.xform: CompoundProperty .arbGeomParams CompoundProperty .userProperties /obj3/.arbGeomParams: ArrayProperty string foo_transform[1] { arrayExtent=1 isGeomParam=true podExtent=1 podName=string } bar_transform ... /obj3/objShape3/.arbGeomParams: ArrayProperty string foo_shape[1] { arrayExtent=1 isGeomParam=true podExtent=1 podName=string } bar_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 *ArrayProperties*can be defined by the blender’s ***Custom Properties***present inside**object**or**mesh** properties because it’s easy to create them manually or with python. ![Screenshot_20171101_160729.png](https://archive.blender.org/developer/F1083027/Screenshot_20171101_160729.png) 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 Properties*must 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 : ``` AbcExport -root |myChar -file test.abc -attr foo foo_py -attrprefix cycles foo ``` When AbcExport travers all objects from root myChar each time who it find foo, foo_py maya extra attr (blender’s*Custom Properties*equivalent) it will write them as *ArrayProperties* data. So, in blender abc export ops can be defined with one or two extra argument, ***name_custom_properties***and***prefix_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": 2*on 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](https://archive.blender.org/developer/F1083049/custom_properties.abcls) And here the abc archive: [custom_properties.abcls](https://archive.blender.org/developer/F1083051/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?

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?
Author

In #50725#468913, @dr.sybren wrote:
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"?

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?

> In #50725#468913, @dr.sybren wrote: > 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"`? > 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?
Author

In #50725#468913, @dr.sybren wrote:
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?

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.

Furthermore, do these properties change over time? In other words, can they be animated or not?

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.

> In #50725#468913, @dr.sybren wrote: > 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? 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. > Furthermore, do these properties change over time? In other words, can they be animated or not? 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.

In #50725#468925, @col-one wrote:
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?

Yes, scalar properties exist, which is why I find this scalar-like array approach a bit strange.

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.

Looking forward to your findings!

For .userProperties I never try, can you send me an archive with this kind of properties ? i will test.

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.

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.

Ok.

> In #50725#468925, @col-one wrote: > 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? Yes, scalar properties exist, which is why I find this scalar-like array approach a bit strange. > 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`. Looking forward to your findings! > For `.userProperties` I never try, can you send me an archive with this kind of properties ? i will test. 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. > 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. Ok.
Author

Ok, here an abcls from houdini alembic with a string attributefoo_houdini

CompoundProperty                   .arbGeomParams
/sphere_object1/attribcreate1/.arbGeomParams:
ArrayProperty       string         foo_houdini[1] {
                                    arrayExtent=1
                                    geoScope=con
                                    isGeomParam=true
                                    podExtent=1
                                    podName=string
                                   }
bar_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.

Ok, here an abcls from houdini alembic with a string attribute*foo_houdini* ``` CompoundProperty .arbGeomParams /sphere_object1/attribcreate1/.arbGeomParams: ArrayProperty string foo_houdini[1] { arrayExtent=1 geoScope=con isGeomParam=true podExtent=1 podName=string } bar_houdini ``` Here the file : [custom_properties_houdini.abc](https://archive.blender.org/developer/F1089737/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.
Author

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.

ArrayProperty       int32_t        foo_h_int2[1] {
                                    arrayExtent=2
                                    geoScope=con
                                    isGeomParam=true
                                    podExtent=1
                                    podName=int32_t
                                   }
777
666

ArrayProperty       int32_t        foo_h_int3[1] {
                                    arrayExtent=3
                                    geoScope=con
                                    isGeomParam=true
                                    podExtent=1
                                    podName=int32_t
                                   }
777
666
555

ArrayProperty       int32_t        foo_h_int4[1] {
                                    arrayExtent=4
                                    geoScope=con
                                    isGeomParam=true
                                    podExtent=1
                                    podName=int32_t
                                   }
777
666
555
444

custom_properties_houdini2.abc

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. ``` ArrayProperty int32_t foo_h_int2[1] { arrayExtent=2 geoScope=con isGeomParam=true podExtent=1 podName=int32_t } 777 666 ArrayProperty int32_t foo_h_int3[1] { arrayExtent=3 geoScope=con isGeomParam=true podExtent=1 podName=int32_t } 777 666 555 ArrayProperty int32_t foo_h_int4[1] { arrayExtent=4 geoScope=con isGeomParam=true podExtent=1 podName=int32_t } 777 666 555 444 ``` [custom_properties_houdini2.abc](https://archive.blender.org/developer/F1089836/custom_properties_houdini2.abc)
Author

News from Guerilla render's dev :
Guerilla reads similary way .arbGeomParams and .userProperties.

I don't know about Arnold or Renderman ....

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.

Thanks for the info, this is very useful. I have implemented reading support for those properties in [my private branch](https://gitlab.com/dr.sybren/blender-personal-branches/tree/temp-sybren-abc-customprops), 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.
Author

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

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](https://archive.blender.org/developer/F1133084/custom_properties_houdini_anim_float.abc) [custom_properties_houdini_anim_float_arry.abc](https://archive.blender.org/developer/F1133086/custom_properties_houdini_anim_float_arry.abc) [custom_properties_houdini_anim_int.abc](https://archive.blender.org/developer/F1133087/custom_properties_houdini_anim_int.abc) [custom_properties_houdini_anim_int_array.abc](https://archive.blender.org/developer/F1133089/custom_properties_houdini_anim_int_array.abc) [custom_properties_houdini_anim_str.abc](https://archive.blender.org/developer/F1133091/custom_properties_houdini_anim_str.abc)

Added subscriber: @n1ckfg

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

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](https://archive.blender.org/developer/F1377132/untitled.abc)

@n1ckfg this isn't related, please write a new bug report for this.

@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

No worries, reposted with new tests at [https:*developer.blender.org/T52417#474982 ](https:*developer.blender.org/T52417#474982)
Kévin Dietrich was unassigned by Sybren A. Stüvel 2017-12-29 15:25:05 +01:00
Sybren A. Stüvel self-assigned this 2017-12-29 15:25:05 +01:00

Added subscriber: @tcherno

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.

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.

@tcherno I'm the developer working on Alembic. Currently my focus lies on the [Blender 2.8 Code Quest tasks](https://developer.blender.org/project/board/80/), 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.

@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.

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

> 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: @SteffenD

Added subscriber: @shotalot

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.

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: @Narann

Added subscriber: @PixelTrader

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.

@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

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 ;-)

@PixelTrader that's good news! If you want you can upload it as a diff to [Differential](https://developer.blender.org/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 ;-)
Contributor

Added subscriber: @p2or

Added subscriber: @p2or

Added subscriber: @frameshift

Added subscriber: @frameshift

Marking this task as To Do, as it's a known limitation of Blender and not a bug.

Marking this task as To Do, as it's a known limitation of Blender and not a bug.

Added subscriber: @evantryan

Added subscriber: @evantryan

Added subscriber: @demmordor

Added subscriber: @demmordor

Added subscriber: @afleith

Added subscriber: @afleith
Member

Added subscriber: @lichtwerk

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)).

As you can see in [D8869: Alembic export: write custom properties](https://archive.blender.org/developer/D8869), 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:

  • subdiv1, subdiv2, subdiv3: We created rules in Guerilla so that objects with such tags have a subdivision applied to them with respective iteration value.
  • "br_crease_all/br_keep_border": Objects with those tags had respective subdivision attributes to drive their boundary rules (br_) when subdividing (important for building/house subdivision).
  • "skin": Any object having this property have special SSS parameters enabled.
  • By default every geometry had a surface shader applied. Objects with "curve" attributes had a curve shader applied.
  • "single_side": By default all geos where double side, a rule took objects with this tag and apply a single side attribute for render.

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 !

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: * subdiv1, subdiv2, subdiv3: We created rules in Guerilla so that objects with such tags have a subdivision applied to them with respective iteration value. * "br_crease_all/br_keep_border": Objects with those tags had respective subdivision attributes to drive their boundary rules (br_) when subdividing (important for building/house subdivision). * "skin": Any object having this property have special SSS parameters enabled. * By default every geometry had a surface shader applied. Objects with "curve" attributes had a curve shader applied. * "single_side": By default all geos where double side, a rule took objects with this tag and apply a single side attribute for render. 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).

@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'

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.

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! :)

Great! Keep the good work! :)
Thomas Dinges added this to the 2.91 milestone 2023-02-08 16:21:50 +01:00
Sign in to join this conversation.
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
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#50725
No description provided.