Why can't I extract the g-buffer data?
Because AE doesn't support anything like that. g-buffers are a proprietary Autodesk thing. As you already found out, you will have to use Extractor to extract them as pixel data where possible. Everything else simply can't be done and requires conventional compositing using obhject buffers combined with the depth buffer to mimic coverage for instance...
Thanks for the reply, but your answer doesn't seem quite correct, and here's my reasoning:
Take an exr file with g-buffer Material ID and Object ID channels in Mono format. Apply the effect 3D Channel/ IDentifier to the clip, and choose either the Material ID or Object ID, and switch to Luma mode. AE will properly see those two g-buffer channels, allowing a user to scroll through the colors to find a specific object or material. However, the materialID or objectID channel is rough by nature (aliased). It seems that the g-buffer "Coverage" channel was created to help blend the pixels around the aliased edges of material IDs and object IDs to get better masking.
So that's where the AE effect 3D Channel/ ID Matte should work well. ID Matte has a checkbox for "Use coverage" which I am assuming will link to the Coverage.cov g-buffer channel to blend out some of the aliasing artifacts. ID Matte also only chooses the Material ID or Object ID channel. However, selecting different IDs in the ID Matte effect doesn't do anything on the clip as you view it. So what happens?
Also, the IDentifier effect ONLY works properly with the g-buffer material/object/coverage ID mono channel, as far as I've found. It doesn't work properly in g-buffer RGB mode, nor with a separate render element in either mono or rgb mode. Why would AE have an effect available if AE didn't work with g-buffers? Is it possibly an integer vs. half-float vs. full-float issue in the exr channel?
Can you or anyone else explain further?
Thank you; I'm trying to prep a long 3d animation rendering but want to make sure the exrs will be fully usable when they're done.
1 person found this helpful
You're misunderstanding how 3D-channel effects in AE work vs. how g-buffers work vs. how EXR support in AE was plugged on in CS4 vs. how Autodesk uses EXR to store g-buffers outside the EXR spec. I suggest you start by reading the help on this stuff. When you do, you will see that effects like ID Matte only apply to the rich pixel legacy formats, not EXR. Likewise, as already said, AE does not support g-buffers at all. Their single component channels may still show up (and per EXR spec they are required to be properly labeled), but all you wil lever see is their pixel data. AE simply doesn't have the algorithms for combining multiple XYZ channels into the magic of g-buffers. Autodesk never licensed that tec to anyone. So in summary, if you want to use the 3D channel effects most efficiently at all, you will have to use RPF and forego all this fancy g-buffer stuff. If you want to stick with EXR, you will have to use conventional buffers where e.g. each object ID is its separate matte channel and coverage can be achieved by unmultiplying depth, the object matte and the Alpha channel.
As long as 3DS Max stored the channel in the OpenEXR, you should be able to get it into After Effects. The first thing to do is try the EXtractoR and IDentifier effects. These two effects correspond to the two types of channels you can find in an OpenEXR: floating point image channels (EXtractoR) and integer ID channels (IDentifier). Once you've pulled the EXR channels into AE layers, you should be able to manipulate them any way you see fit.
As mentined in the Adobe docs, there is a text file you can use to tag EXR channels so that AE's standard 3D channel effects will know which OpenEXR channel names are meant to represent Z-Depth, MaterialID, etc. So if you have a material ID channel called "matID" and a coverage channel called "cover", you'd create a OpenEXR_channel_map.txt file and add these lines to it:
matID MATR UBT1
cover COVR FLT4
Then when you next launch AE, you should be able to use the ID Matte effects.
But what I would do is use EXtractoR and IDentifier to grab those channels and apply coverage manually. In my experience, to apply the coverage channel (which should be an image channel, not an ID channel) all you do is place it on top of the aliased ID matte and then turn the transfer mode to multiply. Depending on the renderer, you may have to invert it. This should replicate what the ID Matte plug-in does with coverage.
Note that applying coverage will antialias the edges of your ID matte, but it still doesn't solve all the problems with using these channels, which for any given pixel can only specify one object. A better approach is often to render objects seperately or to make a pass where the object is self-illuminating white and everything else is black. The matte you get this way will have motion blur and all the other things you lose when you use an ID channel. You can make 3 mattes at a time by making one object 100% red, another 100% green, and another 100% blue.
I am having trouble getting the map file to work with CS6. I've edited it to match my material id channel called "materialID", but the standard 3d channel effects will not pick it up. Was this disable or something in CS6?
Are you sure your question isn't answered in the discussion above?
What kind of file is it? Have you tried EXtracroR and IDentifier?
Actually it has been found to be a faulty exr file created by 3ds max. Apparently it does not create the material id channel correctly.