Skip to content
Draft
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
5 changes: 5 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"cSpell.words": [
"LUTs"
]
}
38 changes: 38 additions & 0 deletions source/_ext/youtube.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
from docutils import nodes
from docutils.parsers.rst import Directive

from sphinx.locale import _
from sphinx.util.docutils import SphinxDirective, directives

class youtube(nodes.General, nodes.Element):
pass

def visit_youtube_node(self, node):
self.body.append("""<div>""")
self.body.append("""<div class="video-container">""")
self.body.append(f"""<iframe src="{node['srcuri']}" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>""")

def depart_youtube_node(self, node):
self.body.append("""</div>""")
self.body.append("""</div>""")

class youtubeDirective(SphinxDirective):
required_arguments = 1
option_spec = { }

def run(self):
youtube_node = youtube()
youtube_node['srcuri'] = self.arguments[0]

return [youtube_node]

def setup(app):
app.add_node(youtube,
html=(visit_youtube_node, depart_youtube_node),)
app.add_directive('youtube', youtubeDirective)

return {
'version': '0.1',
'parallel_read_safe': True,
'parallel_write_safe': True,
}
6 changes: 6 additions & 0 deletions source/_static/custom.css
Original file line number Diff line number Diff line change
Expand Up @@ -133,3 +133,9 @@ iframe.figma {
padding:2px;
box-shadow: inset 1px 0 3px 2px rgba(0,0,0,.4);
}

/* From https://avexdesigns.com/blog/responsive-youtube-embed */
div.video-container { position: relative; padding-bottom: 56.25%; padding-top: 30px; height: 0; overflow: hidden; }
div.video-container iframe, .video-container object, .video-container embed { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
/* End From */

1 change: 1 addition & 0 deletions source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'youtube',
'notices',
'recommonmark',
'sphinx_git',
Expand Down
40 changes: 21 additions & 19 deletions source/framework/aces.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,31 @@
ACES
=====

.. wip::
Colors is a complex topic,
and no matter what we write here there will be more to know.

Colors is a complex topic, both technically and artistically.
However, it can broken down into smaller well-understood pieces.
We break managing color down into three categories:
As it matters to Virtual Production,
we are going to focus on **Technical Color Management**,
also knows as your **Color Pipeline**.

.. glossary::
There are two parts:

Color Pipeline
The color pipeline is a technical process, ensuring color spaces are appropriately transformed at each step of your production and post-production process.
#. :doc:`aces/theory` is a high-level framework for understanding how all the pieces fit together.
#. :doc:`aces/reference` is a loosely organized collection of important details.

See :doc:`aces/pipeline` for more details.

Color Correction
Color correction involves correcting footage against a real-life reference,
such as a color chart.

Color Grading
Color grading is subjecting, used for mood by the director to help tell the story.
ACES is one implementation of color management, and while there are other approaches, we recommend using ACES.
For a `Workflow </workflows>`_ to check (✅) the *ACES* box, it must use ACES as its color pipeline,
and apply color management at all steps.

.. admonition:: Note
:class: warning

Color Management is different from Artistic Color Grading,
where directors and colorists adjust colors for storytelling purposes.

.. toctree::
:caption: See Also
:titlesonly:
:glob:
:hidden:

aces/theory
aces/reference

aces/*
5 changes: 0 additions & 5 deletions source/framework/aces/correction.rst

This file was deleted.

26 changes: 0 additions & 26 deletions source/framework/aces/pipeline.rst

This file was deleted.

106 changes: 106 additions & 0 deletions source/framework/aces/reference.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
##########################
Color Management Reference
##########################

.. planned::

Data Types
##########

Integers
========

Floats
======

Normal
------

Subnormal
---------

Half Floats
===========

Color Spaces
############

CIE Color
=========

LAB Color
=========

Color Primaries
===============

Gamma Curves
============

Logarithmic
-----------

Linear
------

Color Gamut
===========

Color Space Transforms
======================

OpenColorIO
###########

EXR
###

Light
#####

Luminance
=========

Illuminance
===========

Reflectance
===========

Reference Materials
===================

* Sun
* Sky
* Candle
* Light Bulb

* Ash
* Snow

ACES
####

ACES files are saved as 16=bit EXRs, with linear gamma.

Practical Guid to ACES

#. ACES encodes relative exposure.
Relative to what you may ask?
Whatever you decide, really.
Practically, you should use a color chart to calibrate against your ambient light level.
#. Film an 18% gray catd and set the RGB value to [.18, .18, .18]. Your calibration is done.
#. The RGB value [1, 1, 1] represents a 100% diffusely=reflective material.
If there was only ambient light in your scene, nothing would exceed an intensity of 1.
#. Emissive light sources can and should exceed 1. How much?
It turns out by a lot.
There is no real upper limit.
If your gray card reading is accurate, the exposure value of the light illuminating it would be 3.14.
#. From zero to 18% gray ACES can encode about 12 stops, and 18 stops from 18% to its maximum brightness.

Math bits

#. ACES is an RGB format, where each pixel is made up of three 16=bit half=floats.
So a pixel contains :math:`16\times3` bits.
#. Practically, this gives each color a range between :math:`2^{-14}` to :math:`65504`.
#. This means ACES can encode 65,536 different intensities per color channel.
Loading