Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions LICENSE.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
ASWF Digital Assets License v1.1

License for Animal Logic ALab (the "Asset Name").
License for Netflix Animation Studios ALab (the "Asset Name").

Animal Logic ALab Copyright 2024 Animal Logic Pty Limited. All rights reserved.
Netflix Animation Studios ALab Copyright 2025 Netflix, Inc. All rights reserved.

Redistribution and use of these digital assets, with or without modification, solely for education, training, research, software and hardware development, performance benchmarking (including publication of benchmark results and permitting reproducibility of the benchmark results by third parties), or software and hardware product demonstrations, are permitted provided that the following conditions are met:

Expand Down
16 changes: 8 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
![Glimpse](docs/public/doc_header.jpg)
![Glimpse](docs/public/doc_header.png)


# Introduction

Welcome to Animal Logic's USD [ALab](https://animallogic.com/alab/).
Welcome to Netflix Animation Studios' USD [ALab](https://animallogic.com/alab/).

**TL;DR:** [Download ALab](https://dpel.aswf.io/alab/) and open `entry.usda` to get started.

Expand All @@ -12,24 +12,24 @@ Applications with USD support, such as Maya-2022+, Houdini-18.5+ and many more s
For quick preview and inspection, [`USDView`](https://graphics.pixar.com/usd/docs/USD-Toolset.html#USDToolset-usdview) is a great starting point.


| Glimpse (AL proprietary) | Houdini (Karma) | Maya (VP2/render purpose) | UsdView (Storm/render purpose) |
| Glimpse (NAS proprietary) | Houdini (Karma) | Maya (VP2/render purpose) | UsdView (Storm/render purpose) |
| ---------------------------- | --------------- | ------------------ | ------------------------ |
|![Glimpse](docs/public/glimpse_phase2.png)|![Houdini screenshot](docs/public/houdini_phase2.png)|![Maya 2022 screenshot](docs/public/maya_phase2.png)|![UsdView (render purpose)](docs/public/usdview_phase2.png)|


# Documentation

- [Documentation](docs/src/pages/documentation.md) - File structure layout and asset documentation.
- [AL-specific content](docs/src/pages/alSpecific.md) - Animal Logic specific concepts, which we love, but had to remove from ALab to ensure ease of use and compatibility.
- [NAS-specific content](docs/src/pages/nasSpecific.md) - Netflix Animation Studios specific concepts, which we love, but had to remove from ALab to ensure ease of use and compatibility.
- [Changelog](docs/src/pages/changelog.md) - List of all the updates from the latest versions of ALab.


# About ALab
The ALab data set is the Animal Logic interpretation and implementation of real-world production and pipeline concepts in USD.
Originally released in 2021 by Animal Logic, the ALab data set is the Netflix Animation Studios interpretation and implementation of real-world production and pipeline concepts in USD.

It includes over 300 fully surfaced assets derived from an internally produced project, rather than created from scratch as a "USD reference implementation." It consequently exhibits the complexities (and some of the messiness) of real production assets. If one were to build a USD structure for the sole purpose of showcasing USD, it would lead to a different result.

The `entry.usda` `stage` places you in a shot with a structure similar to how we use it at Animal Logic. Since no shot is complete without animation, included are two animated characters, each with some level of proceduralism. Due to this proceduralism requiring some custom `schemas` for our internal Glimpse renderer, we have provided a hint on what these procedurals create in a separate `baked_procedurals` package. This is the "cached" content that would be sent to the renderer per-frame.
The `entry.usda` `stage` places you in a shot with a structure similar to how we use it at Netflix Animation Studios. Since no shot is complete without animation, included are two animated characters, each with some level of proceduralism. Due to this proceduralism requiring some custom `schemas` for our internal Glimpse renderer, we have provided a hint on what these procedurals create in a separate `baked_procedurals` package. This is the "cached" content that would be sent to the renderer per-frame.

For “production style rendering” we also provide an additional package `texture_pack` with multi UDIM, mipmapped 4K OpenEXR textures.

Expand All @@ -38,7 +38,7 @@ Refer below to the `Available Packages` section for more information on these.
We hope that this is the starting point for future contributions to showcase new ideas for discussion, promotion, and hopefully adoption.


## Why did Animal Logic create these assets?
## Why did Netflix Animation Studios create these assets?
We created them to be used *internally*, primarily to provide client-free IP data for:
- Training of Developers, TDs and Artists
- Discussion Reference ("something to point at")
Expand Down Expand Up @@ -100,7 +100,7 @@ After merging, your contents from the `baked_procedurals` folder should look lik

![replace_texture_pack](docs/public/baked_procedurals.jpg)

Refer to the `Render Procedurals` section from [AL-specific content](docs/src/pages/alSpecific.md) for more details on this.
Refer to the `Render Procedurals` section from [NAS-specific content](docs/src/pages/nasSpecific.md) for more details on this.

## Texture Pack
* 4k texture maps, half float mipmapped OpenEXR images in ACEScg colour space.
Expand Down
Binary file removed docs/public/doc_header.jpg
Binary file not shown.
Binary file added docs/public/doc_header.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion docs/src/components/GlobalStyles.astro
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
#toc,
#documentation-1,
#changelog-1,
#animal-logic-1 {
#netflix-animation-studios-1 {
display: none;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import "../components/GlobalStyles.astro";

<html lang="en">
<head>
<base href={`${import.meta.env.BASE_URL}/alSpecific`} />
<base href={`${import.meta.env.BASE_URL}/nasSpecific`} />
<meta charset="utf-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width" />
Expand Down
10 changes: 5 additions & 5 deletions docs/src/pages/documentation.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ layout: ../layouts/Documentation.astro

## File / Asset Structure (Entities & Fragments)

At Animal Logic, we organise files into "`Entities` & `Fragments`" Libraries.
At Netflix Animation Studios, we organise files into "`Entities` & `Fragments`" Libraries.

> Note: If we weren't using a custom asset resolver internally, we would probably use two `PXR_AR_DEFAULT_SEARCH_PATH`s (pointing to `/entity` and `/fragment`) to make asset identification very simple.

Expand Down Expand Up @@ -387,7 +387,7 @@ The `point instancers` come with **off** and **render** `variants` under the `va

## USDSkel

[USDSkel](https://graphics.pixar.com/usd/release/api/usd_skel_page_front.html) is a bare-bones rig with simple skeletons and blendshapes. At Animal Logic, `USDSkel` is used for crowd workflows. It works well for this purpose as it is designed to be efficient and scalable, with a lack of shared joint influence and the ability to apply unique animations to `instances` without deinstancing.
[USDSkel](https://graphics.pixar.com/usd/release/api/usd_skel_page_front.html) is a bare-bones rig with simple skeletons and blendshapes. At Netflix Animation Studios, `USDSkel` is used for crowd workflows. It works well for this purpose as it is designed to be efficient and scalable, with a lack of shared joint influence and the ability to apply unique animations to `instances` without deinstancing.

This is represented in USD through **skel** `primvars`, which are a part of USD's `SkelBindingAPI`.

Expand Down Expand Up @@ -449,7 +449,7 @@ When crowd departments use this as an agent, they choose the `skeleton=on` varia

`Primvars` are a special attribute that a renderer can associate with a geometric `primitive`. They can vary across the `primitive` they are defined on through various interpolation rules, defined in the [documentation](https://graphics.pixar.com/usd/dev/api/class_usd_geom_primvar.html).

For example, **vertex** defines the value to be interpolated across the vertices on the surface. `Primvars` can also be passed onto children of USD `primitives`. This makes them very flexible, which makes them effective as custom attributes for renderers (such as Animal Logic's Glimpse) to read. You can read more about this in the [AL-Specific documentation](alSpecific).
For example, **vertex** defines the value to be interpolated across the vertices on the surface. `Primvars` can also be passed onto children of USD `primitives`. This makes them very flexible, which makes them effective as custom attributes for renderers (such as Netflix Animation Studios' Glimpse) to read. You can read more about this in the [NAS-Specific documentation](nasSpecific).

As seen in the USD snippet above, the `SkelBindingAPI` uses its **skel** `primvars` to allow joint weights and joint indices to vary across the same primitive with vertex interpolation.

Expand Down Expand Up @@ -700,7 +700,7 @@ In phase 2, you can also see a `value clip` used for the baked procedurals of Mc

## Assemblies & Native Instancing

At Animal Logic we make heavy use of instancing whenever possible. By default, all `entities` used on an environment are instanced.
At Netflix Animation Studios we make heavy use of instancing whenever possible. By default, all `entities` used on an environment are instanced.

This means if we use the same seven windows on a city, they all share the same prototype `prim`. ALab is no exception, these are the most frequently used `entities` (all of which are instanced):

Expand Down Expand Up @@ -789,7 +789,7 @@ Render procedurals such as hair (Alfro) and cloth (Weave) have been expanded int

![Procedurals in ALab rendered by Houdini's Karma](../../public/character_procedurals_in_karma.png)

These curves are represented by USD overrides and stored in `baked_procedurals.usd`. They overwrite the original Animal Logic procedural data designed for Glimpse with a `prim` `<procedural_root_prim>/procedurals/output/curves`.
These curves are represented by USD overrides and stored in `baked_procedurals.usd`. They overwrite the original Netflix Animation Studios procedural data designed for Glimpse with a `prim` `<procedural_root_prim>/procedurals/output/curves`.

These curves should be visible by switching to a view with display `purpose` **render**. In `USDView`, you can navigate to **View > Display Purposes > Render**.

Expand Down
12 changes: 6 additions & 6 deletions docs/src/pages/main.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ layout: ../layouts/BaseLayout.astro

# Introduction

Welcome to Animal Logic's USD [ALab](https://animallogic.com/alab/).
Welcome to Netflix Animation Studios' USD [ALab](https://animallogic.com/alab/).

**TL;DR:** [Download ALab](https://dpel.aswf.io/alab/) and open `entry.usda` to get started.

Expand All @@ -21,24 +21,24 @@ For quick preview and inspection, [`USDView`](https://graphics.pixar.com/usd/doc
# Documentation

- [Documentation](../documentation) - File structure layout and asset documentation.
- [AL-specific content](../alSpecific) - Animal Logic specific concepts, which we love, but had to remove from ALab to ensure ease of use and compatibility.
- [NAS-specific content](../nasSpecific) - Netflix Animation Studios specific concepts, which we love, but had to remove from ALab to ensure ease of use and compatibility.
- [Changelog](../changelog) - List of all the updates from the latest versions of ALab.

# About ALab

The ALab data set is the Animal Logic interpretation and implementation of real-world production and pipeline concepts in USD.
Originally released in 2021 by Animal Logic, The ALab data set is the Netflix Animation Studios interpretation and implementation of real-world production and pipeline concepts in USD.

It includes over 300 fully surfaced assets derived from an internally produced project, rather than created from scratch as a "USD reference implementation." It consequently exhibits the complexities (and some of the messiness) of real production assets. If one were to build a USD structure for the sole purpose of showcasing USD, it would lead to a different result.

The `entry.usda` `stage` places you in a shot with a structure similar to how we use it at Animal Logic. Since no shot is complete without animation, included are two animated characters, each with some level of proceduralism. Due to this proceduralism requiring some custom `schemas` for our internal Glimpse renderer, we have provided a hint on what these procedurals create in a separate `baked_procedurals` package. This is the "cached" content that would be sent to the renderer per-frame.
The `entry.usda` `stage` places you in a shot with a structure similar to how we use it at Netflix Animation Studios. Since no shot is complete without animation, included are two animated characters, each with some level of proceduralism. Due to this proceduralism requiring some custom `schemas` for our internal Glimpse renderer, we have provided a hint on what these procedurals create in a separate `baked_procedurals` package. This is the "cached" content that would be sent to the renderer per-frame.

For “production style rendering” we also provide an additional package `texture_pack` with multi UDIM, mipmapped 4K OpenEXR textures.

Refer below to the `Available Packages` section for more information on these.

We hope that this is the starting point for future contributions to showcase new ideas for discussion, promotion, and hopefully adoption.

## Why did Animal Logic create these assets?
## Why did Netflix Animation Studios create these assets?

We created them to be used _internally_, primarily to provide client-free IP data for:

Expand Down Expand Up @@ -104,7 +104,7 @@ After merging, your contents from the `baked_procedurals` folder should look lik

![replace_texture_pack](../../public/baked_procedurals.jpg)

Refer to the `Render Procedurals` section from [AL-specific content](../alSpecific) for more details on this.
Refer to the `Render Procedurals` section from [NAS-specific content](../nasSpecific) for more details on this.

## Texture Pack

Expand Down
14 changes: 7 additions & 7 deletions docs/src/pages/alSpecific.md → docs/src/pages/nasSpecific.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
---
layout: ../layouts/AlSpecific.astro
layout: ../layouts/NasSpecific.astro
---

# Animal Logic
# Netflix Animation Studios

This document describes some of the USD concepts, which we love, but had to remove from ALab to ensure ease of use and compatibility. Some of them are more daring and unique than others, but we hope that you find them all interesting.

# toc

# Animal Logic
# Netflix Animation Studios

## URIs > Relative Filepaths

Expand Down Expand Up @@ -152,7 +152,7 @@ static const TfTokenVector distortAttrsTable[numModels] = {

## Prim Schemas

In addition to the Camera `schema`, we use other `schemas` for various use cases at Animal Logic. See below for a few more examples, which we use with the "USD Schema Generator" (as outlined [here](https://graphics.pixar.com/usd/docs/api/_usd__page__generating_schemas.html)).
In addition to the Camera `schema`, we use other `schemas` for various use cases at Netflix Animation Studios. See below for a few more examples, which we use with the "USD Schema Generator" (as outlined [here](https://graphics.pixar.com/usd/docs/api/_usd__page__generating_schemas.html)).

```c++
class ALEditFrameRange "ALEditFrameRange" (
Expand Down Expand Up @@ -228,7 +228,7 @@ We use a custom `schema` called `ALMayaReference` to reference Maya data. When s

![Shot](../../public/weave.png)

In the Animal Logic pipeline, we emit some procedural geometry straight into the renderer (Glimpse).
In the Netflix Animation Studios pipeline, we emit some procedural geometry straight into the renderer (Glimpse).

- Cloth and Fabric ("[Weave](https://dl.acm.org/doi/abs/10.1145/3214745.3214781)")
- Hair and Fur ("Alfro")
Expand Down Expand Up @@ -289,7 +289,7 @@ When downloading the `baked_procedurals` additional package, these `primvars` wi

## "Glimpse" Materials and Bindings

[Glimpse](https://www.fxguide.com/fxfeatured/a-glimpse-at-animal-logic/) is the in-house renderer at Animal Logic.
[Glimpse](https://www.fxguide.com/fxfeatured/a-glimpse-at-animal-logic/) is the in-house renderer at Netflix Animation Studios.

Layered assignments underpin two important workflows:

Expand Down Expand Up @@ -411,7 +411,7 @@ Be aware that there is a fairly strict "grammar" in USD, which needs to be adher

### Register Your Kinds (`pluginInfo.json`)

To register custom `kinds` in your pipeline, define them in a `pluginInfo.json`. This is an excerpt of the one we use at Animal Logic:
To register custom `kinds` in your pipeline, define them in a `pluginInfo.json`. This is an excerpt of the one we use at Netflix Animation Studios:

```json
{
Expand Down