Page MenuHome

Hair interpolated children recalculation on every frame when attached onto an alembic imported mesh
Closed, ResolvedPublic

Description

System Information
Debian, Nvidia GTX 1080ti

Blender Version
Broken: 2.79b, latest b993e8a17a0

Short description of error
While using hair particles with interpolated children on imported alembic we get children hairs recalculated on every frame on rendering, but not in the viewport.
What's more, we get children hairs recalculated even in the viewport if "use clump noise" enabled.
But i'm much more concerned about the first issue, because it is so crucial to me right now. I need a lot of fur and hair on alembics.

Exact steps for others to reproduce the error

  1. Open up the attached blend file
  2. The alembic is loaded on the second layer (hope it's picked up automatically, if not, just reload the alembic)
  3. Check that the alembic mesh has a hair particle system. If not, copy from the object on the first layer or create your own
  4. Render out the sequence

On the first layer we have a source object which alembic is written from.
Rendering object with hairs on the first layer gives correct results.

This is only related to interpolated children. No children or simple are being rendered just fine.

Event Timeline

Sorry for reminding, but would you check it? It is very important for fur rendering. Thanks.

Philipp Oeser (lichtwerk) raised the priority of this task from Normal to Waiting for Developer to Reproduce.

Since @Sybren A. Stüvel (sybren) asked in T63534: here is the updated example file in 2.81

  • I have added a third collection (this time the object has a .pc2 Mesh Cache modifier on it -- which renders just fine)



And here are the resulting output sequences (rendered in todays buildbot build):

  • from .abc (wrong, jitters)

  • from .pc2 (correct, stable)

@Sybren A. Stüvel (sybren): mind checking again? (can you reproduce now?)

Hairs on mdd cache work just fine as well. It's alembic only issue, I guess.

Hairs on mdd cache work just fine as well. It's alembic only issue, I guess.

Yes, can confirm that (also mentioned in T63534)

I discussed this with Brecht, and it's probably due to the way hair is distributed over the mesh. This is done using the tesselated faces (which are tris or quads), which in turn are based on the original mesh coordinates. Blender loads deforming meshes from Alembic into its own memory, so the current frame is always seen as "the original". This means a potential change in tesselation, which means a potential change in hair positions.

To determine the original mesh coordinates, we cannot simply look at the first frame. Alembic supports changing mesh topologies, so the mesh could simply not be there at the first frame. From the RenderMan for Maya release notes it looks like they support the export of "reference primvars", which would include reference coordinates for the mesh. I've posted a question on the Alembic discussion list about this to gain more information on how other software deals with this.

Sybren A. Stüvel (sybren) lowered the priority of this task from Waiting for Developer to Reproduce to Confirmed, Medium.Tue, Aug 13, 4:06 PM

It's not just a change in tessellation, changing vertex position and face areas can lead to a different child particle distribution even if the tessellation is the same.

It's not just a change in tessellation, changing vertex position and face areas can lead to a different child particle distribution even if the tessellation is the same.

Yes, it occurs even with a constant tessellation. But how come that mdd cache and pc2 work fine with hairs?

With mdd cache there is an original mesh with fixed coordinates that are being deformed, with Alembic there are only the deformed coordinates.