Alembic Basic IO #48075
Closed
opened 2016-04-07 13:33:00 +02:00 by Kévin Dietrich
·
72 comments
No Branch/Tag Specified
main
blender-v3.6-release
temp-sculpt-dyntopo-hive-alloc
temp-sculpt-dyntopo
tmp-usd-python-mtl
asset-browser-frontend-split
node-group-operators
brush-assets-project
asset-shelf
blender-v2.93-release
blender-v3.3-release
universal-scene-description
temp-sculpt-attr-api
blender-v3.5-release
realtime-clock
sculpt-dev
gpencil-next
bevelv2
microfacet_hair
blender-projects-basics
principled-v2
v3.3.7
v2.93.18
v3.5.1
v3.3.6
v2.93.17
v3.5.0
v2.93.16
v3.3.5
v3.3.4
v2.93.15
v2.93.14
v3.3.3
v2.93.13
v2.93.12
v3.4.1
v3.3.2
v3.4.0
v3.3.1
v2.93.11
v3.3.0
v3.2.2
v2.93.10
v3.2.1
v3.2.0
v2.83.20
v2.93.9
v3.1.2
v3.1.1
v3.1.0
v2.83.19
v2.93.8
v3.0.1
v2.93.7
v3.0.0
v2.93.6
v2.93.5
v2.83.18
v2.93.4
v2.93.3
v2.83.17
v2.93.2
v2.93.1
v2.83.16
v2.93.0
v2.83.15
v2.83.14
v2.83.13
v2.92.0
v2.83.12
v2.91.2
v2.83.10
v2.91.0
v2.83.9
v2.83.8
v2.83.7
v2.90.1
v2.83.6.1
v2.83.6
v2.90.0
v2.83.5
v2.83.4
v2.83.3
v2.83.2
v2.83.1
v2.83
v2.82a
v2.82
v2.81a
v2.81
v2.80
v2.80-rc3
v2.80-rc2
v2.80-rc1
v2.79b
v2.79a
v2.79
v2.79-rc2
v2.79-rc1
v2.78c
v2.78b
v2.78a
v2.78
v2.78-rc2
v2.78-rc1
v2.77a
v2.77
v2.77-rc2
v2.77-rc1
v2.76b
v2.76a
v2.76
v2.76-rc3
v2.76-rc2
v2.76-rc1
v2.75a
v2.75
v2.75-rc2
v2.75-rc1
v2.74
v2.74-rc4
v2.74-rc3
v2.74-rc2
v2.74-rc1
v2.73a
v2.73
v2.73-rc1
v2.72b
2.72b
v2.72a
v2.72
v2.72-rc1
v2.71
v2.71-rc2
v2.71-rc1
v2.70a
v2.70
v2.70-rc2
v2.70-rc
v2.69
v2.68a
v2.68
v2.67b
v2.67a
v2.67
v2.66a
v2.66
v2.65a
v2.65
v2.64a
v2.64
v2.63a
v2.63
v2.61
v2.60a
v2.60
v2.59
v2.58a
v2.58
v2.57b
v2.57a
v2.57
v2.56a
v2.56
v2.55
v2.54
v2.53
v2.52
v2.51
v2.50
v2.49b
v2.49a
v2.49
v2.48a
v2.48
v2.47
v2.46
v2.45
v2.44
v2.43
v2.42a
v2.42
v2.41
v2.40
v2.37a
v2.37
v2.36
v2.35a
v2.35
v2.34
v2.33a
v2.33
v2.32
v2.31a
v2.31
v2.30
v2.28c
v2.28a
v2.28
v2.27
v2.26
v2.25
Labels
Clear labels
Issues relating to security: https://wiki.blender.org/wiki/Process/Vulnerability_Reports
Apply labels
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
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
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
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
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
Issues relating to security: https://wiki.blender.org/wiki/Process/Vulnerability_Reports
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 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
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
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
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
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
Milestone
Set milestone
Clear milestone
No items
No Milestone
Projects
Set Project
Clear projects
No project
Assignees
Assign users
Clear assignees
No Assignees
20 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#48075
Reference in New Issue
There is no content yet.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may exist for a short time before cleaning up, in most cases it CANNOT be undone. Continue?
This task is for user feedback and possible design decisions for D1783 (
alembic_basic_io
branch).A quick and dirty, WIP, documentation can be found here .
Here's a quick description of the state the Alembic implementation:
Support as import/export
Exports the scene (or individual objects) as an Alembic archive similar to FBX and Collada.
Import is limited, since geometry streaming is not be supported, only the first frame (time 0.0, in Alembic terminology) is loaded. Perhaps it is desired to expose some setting to choose which time to load.
Support as an extra format for "Mesh Cache" modifier
This reads data for the object the modifier is attached to from a given Alembic archive. The object's path is in the Alembic archive needs to be passed to the modifier as well. For now, only mesh objects are supported.
Linux Build (Debian 64bit): https://drive.google.com/open?id=0B-drJ8xmSD_WNzhwTU5vUzdWd1k
Changed status to: 'Open'
Added subscriber: @kevindietrich
Added subscriber: @JasonSchleifer
Added subscriber: @juang3d
Added subscriber: @boby
Great!
Bit to give feedback we will need to have a build :D
I have some production ABC's, I can share one of them, the other I can test it here, but I can't share it.
Is there still a need to compile alembic separatedly apart from adding the patch and compiling blender as is with the patch?
I'm eager to test this! :D
Kevin you are going to become my hero! Alembic, OpenVDB... wow!
Cheers.
Alembic needs to be compiled separately (and linked like any system wide library). I don't think the Alembic source will ever be shipped with Blender, as it might be implemented in Cycles as well in the future.
Added subscriber: @VictorMukayev
Added subscriber: @knekke
Yes, a build would help to test this.
So animation im-/export is not supported right now, but will be soon? Do I get that right?
For export you can choose a frame range, and various other settings which I have yet to document. Importing only loads the first frame, then you can put a 'Mesh Cache' modifier on the imported objects to 'load' the animated data (which could be automated through an addon or so).
For builds, I can only (try to) provide a portable 64-bit Linux build, as I don't have access to a Windows or Mac machine, maybe someone else can share a build for those platforms.
I would take a linux build for testing, I just don't have time to build it myself.
Also I can probably provide some alembic files later.
Here is my humble attempt to create a portable Linux build (several features like Cycles, or Smoke simulation are turned off to simplify the build process): (edited: see task description).
Not working for me, sorry (Fedora22). Maybe I will find some time later to build it myself.
Added subscriber: @JulianEisel
Alright, have it running now. On import both Forward and Up- axis are set do +X by default. Changing up to Z does something, but results in some crooked angle.
More tests later.
Ok, then if someone can guide me to build alembic and link it I can prepare a VM and make a build, I'm not sure how to do those two things, for the time being I know how to build blender and how to apply a patch, but I don't know what do I have to build regarding alembic and how the linking works.
Cheers.
Added subscriber: @zeauro
I manage to build it using cmake-gui under Ubuntu.
I referred to alembic libs that were build by install_deps script as is.
Some cmake targets are not obvious.
Cmake target / lib name under linux
ALEMBIC_ABCCORE_ABC_LIBRARY / libAlembicAbcCoreAbstract.a
ALEMBIC_ABCOGAWA_LIBRARY / libAlembicAbcCoreOgawa.a
ALEMBIC_ABCUTIL_LIBRARY / libAlembicUtil.a
ALEMBIC_ABC_LIBRARY / libAlembicAbc.a
ALEMBIC_OGAWA_LIBRARY / libAlembicOgawa.a
Added subscriber: @g-lul
Added subscriber: @JasonClarke
Added subscriber: @lichtwerk
Here is an Alembic archive to play around with: Alembic_Data.7z
Animated Camera with animated FoV, deforming meshes with multiple materials and a bit of hierarchy. Also there is a jpg-sequence for reference.
The original patch is handling it quite well (except for the FoV animation).
Added subscriber: @JorgeGasconPerez
Hi!
I am a newbie and I would like to share the steps I have followed trying to build Alembic support in Blender (because I don't know if I did them well).
Please could you give a bit of feedback in order to know if I did it well? thanks :-)
My system is a Linux x64 (Linux Arch)
NOTE: I had to copy the file "Config.h" from:
Is there a way to avoid to copy this?
QUESTION: Could it be possible to left only three entries for Alembic configuration, "WITH_ALEMBIC", "ALEMBIC_INCLUDE_DIR" and "ALEMBIC_ABC_LIBRARY"?
As I'd like to become a newbie Blender developer, how could I do that? (I know a bit about cmake, but I would like to be able to do this and do a commit)
NOTE: I had to copy the file "libAlembic.so" from:
Is there a way to prevent this copy?
Is it something that I'm not doing right?
Thank you in advanced for your feedback.
Those should be set the forward and up axis of the object contained in the .abc archive. I've set them to +Y/-Z in the
alembic_basic_io
branch as a default value, but I'm not too sure what other software are generally using.Thanks for the file. I can see that I forgot to port some code to create object hierarchies from the original Python script. Though, I don't really know how we'd handle camera animation, since cameras can't have modifiers. Maybe it is acceptable to import the data as keyframes.
Did you set
CMAKE_PREFIX_PATH
(to set the path formake install
)?Afaik, the various variables are required since Alembic is split in multiple libs. At least it is the case when compiling as static libs, you are compiling it as a dynamic library and apparently only one lib is output (?). Or maybe Alembic as compile flags to tell whether or not to output miultiple libs.
You need to add the path to the alembic shared object in your
LD_LIBRARY_PATH
environment variable.I would say there is a bug. I've been testing imports of exports from Blender and it seemed fine.
Dear Kévin,
Thank you very much for your quick answer :-)
I'm figuring that most of the bugs might come since I am using the Alembic github "master" branch and maybe it is not as stable as the last stable version of alembic (Alembic_1.5.3_2013121700.tgz), next time I am gonna try to build Blender with this version instead the github repository.
Regarding your questions:
Afaik I don't see the CMAKE_PREFIX_PATH entry in the Alembic cmakefile that I'm using, the most similar entry I find is CMAKE_INSTALL_PREFIX.
And regarding the LD_LIBRARY_PATH system var, I just have seen that in my Arch Linux this var is not initialized :-O
So I'm going to define it and try to build Blender with the version 1.5.3 of Alembic.
Thank you very much Kévin, I hope with these changes everything will go fine :-)
Regarding building Alembic:
Make sure to checkout a release version (git checkout 1.5.8) this will create a nice folder /usr/local/alembic-1.5.8 when you build it.
Instead of assigning all the alembic libs in cmake, you can "export ALEMBIC_ROOT_DIR=/usr/local/alembic-1.5.8" before running cmake. This way all the alembic stuff is found automatically.
All this from the top of may head, so all this might not exactly be as I stated....
As for keyframed Cameras: while this would definitiley work, it feels more like a hacky workaround. there might be a workflow where you just want to overwrite an alembic file to update your scene (something I would only do in rare situations, but still).
Orientation of imported abc files worked perfectly ootb with the original patch, no need to change it.
cheers
This here patch is for a basic implementation of Alembic in Blender as using an import/export scheme. What you describe would require a tighter implementation, at the scene level, of Alembic, which was attempted during the Gooseberry project, and failed because the caching system in Blender wasn't up to the task. Such an implementation is kinda planned for Blender 2.8x though (along with a rewrite of the caching system). So for the scope of this patch, even if it is hacky, it could work as a temporary solution to get camera streaming.
Yes, but they were hardcoded, which is bad since you can't assume that every Alembic archive out there is Y-up. Also, all the importers in Blender work this way, so let's be consistent.
Fair enough.
Maybe take their hard-coded orientation as a default then?
What I don't get is: if all that stuff is going to change in 2.8 anyway, why go through the hassle of porting a fine working patch to a less functional version just to meet some requirements that will no longer be valid next year?
Why can't you just say: This is the end of 2.7...we finally give you some Alembic but please don't look at the code, as it will be rewritten anyway.
Everyone that actually uses Blender would be quite happy about it I guess. And the devs couldn't care less, because they are off to a rewrite anyway.
just my 2cent
Added subscriber: @EjnerFergo
Hi Kévin, thanks for looking into this.
I hope this will use Alembic from git master (instead of release 1.5.8) since the updated CMakeLists.txt is much more useful, without having to hack/patch it to provide only libs. There's also only one library now - libAlembic.so - instead of it being split up.
I have succesfully installed and tested Alembic (from git) in this Blender branch, using my supplied "FindALEMBIC.cmake". I configured Alembic using these commands from the cloned directory:
This is on Arch Linux with system OpenEXR, Boost and HDF5, and Blender build with OpenVDB and OpenSubdiv.
My initial testing was simply using the Alembic octopus. Without changing any import settings the model was upside-down, which is ok since I figured it would be corrected when using the Mesh Cache modifier, and it did - almost. Thing is, I needed to reset rotation (Alt+R) after setting up the modifier, before the model was correctly rotated.
Regarding the modifier, would it be possible to have a search field for Object Name, like this:
instead of opening a file browser? Or is the plan to use the file browser on .abc files like when browsing a .blend file?
Also could the import/export settings have a scale/unit option when dealing with files from apps using centimeters by default?
Thanks again, I hope you find this helpful. I can work on updating the install_deps.sh with these updated Alembic build options if you like?
FindALEMBIC.cmake
Only the operators (import/export) will be rewritten (if required). The code to read and write Alembic data will stay the same, unless there are fundamental changes in the Blender and/or Alembic in those areas. So, the majority of the code will probably stay the same.
Whilst it does seem to simplify a lot the build process, I prefer to stick with the latest official release here. (Then people are free to install whatever version of the library as they want).
Would need to check on that. Generally the whole object importer would need to be revisited to get the transform hierarchy right.
The file browser actually comes from a copy/paste :) I removed it in the branch. I don't think a drop down menu would work here, since I believe it deals with Blender ID objects, and not arbitrary data.
Just added that in the branch.
I'm not against any sort of help to get things done, but it has to make use of the latest Alembic official release (as "latest development version" is too vague to be referenced for users, official docs and so on).
Added subscriber: @galenbeals
Hi Kevin,
Does your implementation include import/export of particle/varying point number meshes? I can send fluid meshes back and forth between Maya and Modo using Alembic. Would this be possible with Blender?
Hi Kévin,
Sorry for the long delay, been following Alembic development for a hopefully imminent 1.6.0 release :) I get your point about using only official releases, but as in the case of OSD it is pulled from git in the install_deps script (could be a leftover, will check). The ease of building, not needing to patch across files and simpler/cleaner blender cmake is definately a plus of Alembic-git (there's a 1.6 branch now). In any case, this is not super relevant.
I've been testing some more, and found some issues.
Exporting an .abc from Blender and importing it, the mesh has no vertices. Blender also crashes randomly after I entered and exited edit-mode on this "empty" object. I can't reproduce this consistently. Simple test is to export the default Blender scene and import it. The camera rotation is also wrong. Unfortunately I can't test the exported file in a 3rd party program presently, but the output from 'abcecho' looks fine.
Speaking of export, Ogawa archive format should be default. This is cosmetic, but could you make the export archive setting look like this?:
Also could End Frame be set to whatever the scene end frame is, instead of 1?
Using the test file from @knekke I'm seeing glitches when more than one object has animation. With one object the animation is fine, but with 2 objects (Trex & torus), when scrubbing the timeline, on random frames the models "flip" to the rotation they had when importing, only on one frame. Testing again just now, Blender crashed when setting up the second modifier. Trying again, Blender didn't crash, showed the glitching briefly, and then hang completely with the console spamming HDF5 errors, even though the file archive is Ogawa.
I don't know how far you are with this implementaion, but cameras are not imported correctly (wrong rotation and no animation). Also empties (null objects) are not imported. The torus is parented to an empty, so that animation is lost.
I know you said a drop-down isn't possible for alembic data, but I really hope some solution will be found. The hierachy is not always /name/nameShape. For example the Trex animation is on /Trex/Trex/TrexShape. It would be optimal if this imformation could be found directly in Blender, without having to use the Alembic CLI tools. I found that 'abcechobounds' provides the clearest view of the objects (but not lights/cameras/empties), so if this could be replicated in Blender somehow.
For reference, here's the output of abc_scene.abc without the digits:
I also found another example where the naming convention isn't followed:
Sorry to dump all this on you...
@galenbeals
Can you provide a test file?
(OpenSubdiv had to be patched to work in Blender) It appears there is a better chance Alembic 1.6 will be released before this patch lands in Blender, so maybe we can make the switch.
Done (Ogawa + UI) :)
Unfortunately we don't have access to the scene data in the place where the UI for the operator is generated. Now I think maybe it''d be better to replace the end frame setting with a "number of frames" setting?
This bug was brought to my attention in D1783, and should be fixed now.
As far as the implementation goes, importing needs a bit of rewrite. Specifically we should build a transformation hierarchy and use that to create objects. For now we are only testing if a given node in the archive is a Mesh, Camera or NURBS (we also need to support more object types). Alembic does not appear to have the concept of an empty object, in the case of @knekke's file, empties are just transform matrices with a "locator" metadata attached to them (apparently this is how Maya exports empties). Anyway, import needs to work on/create a transform hierarchy, that alone should solve a few import problems.
I think it could be okay to add the modifier on the objects during imports, and set the path at that stage (since we have all the information at that point), otherwise we would have to collect maybe hundreds of paths and expose them to the user somehow.
@galenbeals
Not really, the first frame can be loaded, but for streaming through the modifier, the number of points needs not change.
Wow that was fast :) Thanks!
Hmm.. maybe better to keep end frame then, so us lazy people don't have to calculate number of frames if start frame is eg. 37 ;) Unless I'm misunderstanding that setting in alembic context..
Ah yes cool, just build and tested.
So, I tried to export a super simple RBD cube falling (with baked keyframes), but when importing and using the modifier, there was no animation. I exported with start frame = 1 and end frame = 60. Am I missing something?
I see. Do you know what could be the issue with HDF5 error when having 2 objects with the modifier (Ogawa archive)? The error is:
Yes, that would be great. Even if the paths were exposed, just the saved modifier setup time alone would help :)
I'm sorry, the HDF5 error was on my end. Turns out HDF Group had made threadsafe and high-level-library options mutually exclusive* in version 1.10.0 and 1.8.16, and Arch Linux had updated to 1.10.0 which was build without threadsafe (Alembic needs this when using HDF5). I found some other issues with Alembic using HDF5-1.10.0 and how to fix them, and made the Alembic developer aware of them. I also communicated the problem with not having the new HDF5 build with threadsafe option to the Arch package maintainer.
I still get the glitching when 2 or more objects have the modifier enabled. If I disable the "visibility" of all modifiers but one, the animation is fine.
Added subscriber: @jta
Some updates from me:
I updated the link in this task's description with a build containing those changes.
There are no solutions for animations of cameras, empties and nurbs just yet, though I have some ideas here.
@EjnerFergo have you tried compiling Alembic 1.6 with C++11? With the current official version (1.5.8) I'm getting a lot of linking errors. Being able to compile using C++11 would be neat since some people might be using newer compiler (such as GCC 6) which default to that standard, or simply they might be compiling in C++11 mode.
@galenbeals, just in case for testing, do you have a simple example alembic file contianing fluid meshes?
I'll see if I can rustle something up.
Hi,
I get a segmentation fault when I load my example .abc. It loads, but when I start scrubbing the timeline it crashes after a second or so (clicking the timeline seems to work):
and blender.crash.txt:
Maybe something is wrong with my libs, but I wonder why hdf5 is making trouble, because the .abc should be ogawa (or not? I don't remember)
But from what I could see, the orientation and hierarchy looked fine now.
Hi @kevindietrich
Great progress! So nice having the modifier set up automatically, and no glitching anymore! I'm certain you are on top of what needs to be done, but I'll ask just to be sure: Will it be posible to support object transformations (outside of mesh cache)?
Regarding building Alembic 1.6-git I just did one without Boost (so using C++11) and had no errors, and Blender build and works as expected - This is on Arch Linux w. GCC 6.1. I did not enable C++11 support in Blender cmake though, is that what you meant?
Edit: Sorry, just looked at 'ccmake ../blender' and WITH_CXX11 is ON (has that changed recently?)
@knekke
I had the same issue as you can see in my previous posts. What distro are you using? If Alembic is build with HDF5 support (which it needs for legacy reasons), the HDF5 lib has to be build with threadsafe support. You are right the .abc file is using Ogawa, but it will still crash just by having HDF5 support (don't know why). Build Alembic without HDF5 support, and the file works, but then you can't open files saved with HDF5 from other software/studios... So, make sure your HDF5 is build with the option --enable-threadsafe
BTW: Alembic 1.6 does not need hdf5_hl library anymore, and it works with HDF5-1.10.0 now (files are forward-compatible).
However, Blender complains about the missing 'libhdf5_hl.so.100' file, even after I changed my FindALEMBIC file. This is with my own build HDF5-1.10.0 (--disable-hl --enable-threadsafe), Alembic 1.6-git using this HDF5 and Blender using both these libs. I have of course run ldconfig before compiling, and ran 'grep -nir hdf5_hl' in blender dir only finding references in FindALEMBIC.cmake.
What am I missing?
Edit2: My bad, again! It's an Arch issue... Hopefully the whole debacle of what needs hdf5_hl and/or hdf5_threadsafe will be solved soon.
FindALEMBIC.cmake
Some updates from me:
So now it can be interesting to get some test files from other software which contain hair or fur.
@EjnerFergo:
So baked Rigid Body sims won't work then? :-/
Alrighty then!
This implementation won't cover any kind of caching like that. Rigid bodies are supposed to be supported for export actually, though I think it can be implemented if it's not the case. Then when you import the file back, it will create new objects, and add a mesh cache modifier to them for streaming the data (as long as the vertex count/topology matches).
You are right! I tried a stupid simple test again - a RBD cube falling on a plane (without baking to keyframes) and a cube with 2 LocRot keys - export to alembic, import in Houdini Apprentice and it works! Importing in Blender there is no motion on either cubes though...
An idea for importing animated alembics into blender:
Hi there!
These days I was thinking of how to load animated alembics and I have an idea, would you like to listen it?
Note 1: I have not a depth understanding of the Alembic code inside Blender yet, cause I am still reading/understanding it.
Note 2: This is a quick-and-dirty approach that is easy to implement (I guess), it has a lot of limitations but I think that they can
Note 3: Maybe someone have thought this idea before, in that case thanks for reading my comment.
Explaining this idea with an example:
Let's figure that I have an alembic file with an animated character inside whose animation goes from frame 1 to 100, ok?
Now, imagine that in Blender I have an empty scene and it is currently in frame 4.
Now, I load this alembic file in Blender, and automatically, only the frame 4 of the alembic object is loaded, nothing more. As a result, I will have the animated character in its frame 5 in the scene, right?
If I change the frame to, let's say, to frame 5, Blender, being aware that this object is feeded from an alembic file, will automatically unload the mesh of the character and it will load the frame 5 of the alembic file, as a result, we will have the frame 5 of the animated character in Blender.
If we go to frame 101 or more, the last frame of the character (100) will be loaded.
As you can figure, we have some advantages and disadvantages:
Advantages:
Disadvantages:
Future work:
So, what do you think? I guess that in my spare time, after the work, I could read the current code and start to implement this.
Let me know your point of view about this fact, I understand that there are limitations but ir could be a good starting point.
Jorge.
Hej Jorge,
that is a nice proposal, but this is actually how alembic (or any pointcache for that matter) works. Only the current (or which ever you ask for) frame is loaded (otherwise you could run out of ram pretty quickly). Someone please correct me if I'm wrong.
cheers
A Linux build thread is on BA and a build is available:
http://blenderartists.org/forum/showthread.php?399763-Dev-Linux-build-Alembic-I-O
Actually it is advantageous to have all the frames loaded in memory so you can get better playback. That's kind of the whole point of cacheing in the app and leaving it that way (as opposed to just using it for import/export). Imagine you have a complicated character where it's deformations are causing the scene to drag. This is a case where you place a cache modifier on top of the stack and cache it. You can then disable all the modifiers below and let the cache play instead. In this case you need to have all the frames loaded in memory.
Now, I don't know if this is actually the way our implementation works or not. But this is at least part of its intended use use.
Perhaps kévin can implement a toggle in the UI for pre-loading all the frames?
Thank you Thomas and Galen for your comments :-)
You are right, keeping only one frame in memory allows to save a lot of memory, and keeping all of them allows a smooth and a fast playback. I know about a third approach, that consists in a multithread prefetching of frames, this technique uses one or more additional threads that load the next N frames before are needed, the advantages are that the playback should be fast and smooth but only keeping a few frames in memory, not all. Some months ago I implemented something similar for a network server, and its the way that Boost Asio libraries are used to load files.
Unfortunately, I have not taken a look to the Alembic code yet, but I would be very happy if I can check the current status of the point cache, any clues?
Thank you in advance.
Added subscriber: @jensverwiebe
OSX build also available and so far tested to be on par with linux:
http://blenderartists.org/forum/showthread.php?399763-Dev-Win-Linux-build-Alembic-I-O&p=3060405&viewfull=1#post3060405
Jens
Added subscriber: @EugenioPignataro
Hi Kevin!! I'm testing your work with a Coke ad!!! :)
I'm get a Alembic from real flow... is working fine!
I found a error... the relative path to mesh modifier and constraint doesn't work for me...
Please tell me if you make a new build for Ubuntu.
Thanks!
@EugenioPignataro for new builds with fixes better follow the alembic thread on blenderartists: http://blenderartists.org/forum/showthread.php?399763-Dev-Win-Linux-build-Alembic-I-O
Some new builds are made every 2-3 days on average, depending on the development. You can also post bug reports there, though here is fine too. I'll check on that error later today.
Hello Kévin,
Here are 2 simple test file from houdini, exported from one scene.
The point of using packed object is to get light weight abc file (prefered method for non deforming geometry (ie bullet sim, scene transfer..) and scene containing lots of instances).
The issue is blender slowdown while loading this kind of export (probably the Transform Cache constraint)
Here in the test files, flat geo reads at 60+ fps wherease packed object reach only ~2fps.
Thanks for your work !
https://drive.google.com/file/d/0B4Igx19SH9TlWXNXelFhUWZXdEE/view?usp=sharing
@ Boris
Tested your files in last linux build:
Flat geo reads at 60+ fps whereas packed object reach ~24fps.
So packed IS slower but somewhat acceptable on an actual highend cpu ?
Is this hdf5 based files ? We build hdf5 without threads atm. cause it would need mpi.
Jens
Hey jens,
I guess it's ogawa (not sure)
Yep it is really slower. Not sure what you mean by "acceptable", but yeah, it still works as expected, just wanted to notice the slowdown (Kévin talked about profiling, that's why i give the files).
computer spec:
GPU: Quadro K4200
CPU: Bi intel Xeon 2.40Ghz E5-2630 v3
Ram: 128Go
Hi all,
Alembic 1.6.0 is released! https://github.com/alembic/alembic/releases
Here is a patch for Alembic/HDF5 cmake files that I've been using for 1.6.0:
abc_hdf5_cmake.diff
These are the cmake options I used to build Alembic 1.6.0:
Notice: I have ALEMBIC_LIB_USES_BOOST=OFF to build it using C++11 since my gcc is v6, and Blender automatically uses C++11 when using that gcc version. When using gcc v5 or lower, set ALEMBIC_LIB_USES_BOOST=ON. Also, HDF5 support in Alembic 1.6.0 is disabled by default, so I enabled it and pointed cmake to my local install.
I said it before, and personally still hope that the HDF5 dependency can be dropped.
I'll try to bring this up in the blenderartist thread again, as I'm pretty sure all user examples in that thread are Ogawa (I haven't checked all though).
Anyways, thank you for the super work and progress @kevindietrich!
@EjnerFergo Thanks for the notification!
Bumped Alembic to 1.6 in the branch (f2bb125a6a) and dropped HDF5 support (it can still be enabled for the curious by using WITH_ALEMBIC_HDF5, but it is not officially supported from now on).
Some examples in the blenderartists thread are HDF5 (the RealFlow ones for instance).
I reconfigured my buildbot for the new alembic-1.6/hdf5-less method now, first of those type:
Branch: alembic_basic_io
Revision: f2bb125
Submodules: locale a87cfb8 addons 75fb4e0 addons_contrib 72c24a1
OS: GNU/Linux, Architecture: x86_64, GLIBC: 2.19
Builddate: Fr 1. Jul 11:19:19 UTC 2016
Filesize: 72255692 byte
Shasum: dfc8b6ad0cd98f91cca39239ef20a131fa71cab9
URL: http://www.jensverwiebe.de/Blender/b..._latest.tar.xz
The BA thread: https://blenderartists.org/forum/showthread.php?399763-Dev-Custom-Builds-Alembic-I-O&s=0fd0298c12ea1ceb53bdd8d279814aae&p=3069700&viewfull=1#post3069700
... to be continued ...
Jens
Hi @kevindietrich just wondering why you didn't use the patch? I see that you updated FindAlembic manually, which is of course most important, and granted the rest of the changes I made are mostly cosmetic:
Last item is not super relevant anymore (thumbs up for that!), but if someone chooses to use HDF5 it might as well be fixed. That also means that the HDF5 build option "--enable-unsupported" is not needed, as that option is for hdf5_hl.
Updated patch since your last changes:
find_alembic_hdf5_cleanup.diff
@EjnerFergo, I quickly read the email notification from your previous post in my mailbox yesterday and must have not realized you attached a patch to it, so that's why I didn't use it :) Applied the changes from your new patch, thanks!
Added subscriber: @jasperge-2
@kevindietrich I just created a simple patch to fix building of Alembic 1.6.0 on Linux. I attached you as a reviewer since you're working on this branch. Although it's super simple, I hope it helps somehow. :)
Added subscriber: @GregZaal
Changed status from 'Open' to: 'Archived'
Committed
61050f75b1
, so closing this task.Added subscriber: @ahmed.hindy96