diff --git a/pxr/usd/usdLux/iesAngleScale/UsdLux-IESAngleScale-FindingsAndQuestions.md b/pxr/usd/usdLux/iesAngleScale/UsdLux-IESAngleScale-FindingsAndQuestions.md
new file mode 100644
index 00000000000..14bbdf727d0
--- /dev/null
+++ b/pxr/usd/usdLux/iesAngleScale/UsdLux-IESAngleScale-FindingsAndQuestions.md
@@ -0,0 +1,822 @@
+# ies:AngleScale - findings and questions
+
+While working to [explicitly specify
+UsdLux](https://github.com/PixarAnimationStudios/OpenUSD/pull/3182), we needed
+to determine the formula for applying the [ies:angleScale][ies_angleScale_doc].
+
+The [version we settled on for our initial PR][pr_iesAngleScale_formula] was:
+
+$$ \theta_{ies} = \frac{\theta_{light} - \pi}{1 + angleScale} + \pi $$
+
+This formula was chosen because it matches the behavior of how RenderMan applies
+`ies:angleScale`, as the attribute is presumably derived from the [profile scale
+attribute in Renderman.][rman_profile_scale_doc].
+
+However, this choice has several drawbacks, so we thought we should share our
+findings and solicit advice.
+
+## Visualization
+
+### Render 1 - Preview render
+
+The most intuitive way to get a sense for the data in an `.ies` file is to
+provide a rendering of what a basic scene illuminated by that light might look
+like. This is the approach used by [ieslibrary.com](ieslibrary.com) in it's
+preview lights, so I decided to roughly replicate their setup:
+
+- scene has a floor and a wall (both perfectly diffuse)
+- light is placed 1 meter above the floor, and 5 cm in front of the wall
+- camera is 2.5 meters above the floor, and 4 meters in front of the wall
+- camera is aimed back at the wall / light, angled down 30° from parallel
+ to the floor
+- light is oriented so that:
+ - down is 0° vertical
+ - up is 180° vertical
+ - 0° horizontal is aimed toward the camera
+ - +90° horizontal is screen left (from camera's point of view)
+ - -90° / +270° horizontal is screen right (from camera's point of view)
+
+#### Render 1 Example:
+
+For an example of this render, I used a downward-aimed light picked
+arbitrarily from [ieslibrary.com](ieslibrary.com):
+
+
+
+ |
+ | +180° vertical, +180° horizontal
+ |
+ |
+
+ | +90° horizontal
+ |
+
+
+ [exr]
+
+
+ [png]
+
+
+ [ies]
+
+
+
+ [usda]
+ (frame 1)
+ |
+ -90° horizontal (+270° horizontal)
+ |
+
+ |
+ | 0° vertical, 0° horizontal
+ |
+ |
+
+
+
+### Render 2 - Interior of sphere
+
+While the above render gives a quick sense of what the light might look like in
+the world, it's not good for displaying the distribution of the light across
+the entire 0° (bottom) to 180° (top) range of vertical angles, as the scene
+is set up to mostly highlight downward emissions.
+
+To view the entire vertical-angle distribution, I made a second scene rendering
+the light casting on the interior of a sphere:
+
+- a light with the IES profile is at the center of a sphere
+- a camera with a 90° field of view is also placed at the sphere center
+- the interior of the sphere is rendered twice, aimed to display:
+ - horizontal angles -45° to 45°, vertical angles 90° to 180° (top)
+ - horizontal angles -45° to 45°, vertical angles 0° to 90° (bottom)
+- the two renders are then stitched together to create a single image
+
+#### Render 2 Example:
+
+For an example of this render, I used the same downward-aimed light picked
+arbitrarily from [ieslibrary.com](ieslibrary.com) used in the previous render:
+
+
+
+
+### Striped IES Test file
+
+Finally, to visualize the effect of the angleScale, I created a [test .ies
+file][ies_test_file] consisting of bands of alternating dark/light horizontal
+stripes every 10 vertical degrees. The bottom (verticalAngle=0) is always .25
+(gray-black) and the top (verticalAngle=180) is always .75 (gray-white). (The
+horizontal angle space is also divided into quadrants, but we can ignore
+horizontal-angle differences for this discussion.)
+
+#### Striped IES File: Render 1 - Preview Render:
+
+
+
+ |
+ | +180° vertical, +180° horizontal
+ |
+ |
+
+ | +90° horizontal
+ |
+
+
+ [exr]
+
+
+ [png]
+
+
+ [ies]
+
+
+
+ [usda]
+ (frame 11)
+ |
+ -90° horizontal (+270° horizontal)
+ |
+
+ |
+ | 0° vertical, 0° horizontal
+ |
+ |
+
+
+#### Striped IES File: Render 2 - Interior of sphere:
+
+
+
+
+## Existing formulas
+
+### RenderMan
+
+As noted above, RenderMan appears to use this formula:
+
+$$ \theta_{ies} = \frac{\theta_{light} - \pi}{1 + angleScale} + \pi $$
+
+...which can be rewritten as:
+
+$$ (\theta_{ies} - \pi)\ (1 + angleScale) = (\theta_{light} - \pi) $$
+
+...from which we can see that the relation is a simple scale by
+$(1 + angleScale)$, offset so the scale origin is at $(\theta_{light},\ \theta_{ies}) = (\pi,\ \pi)$.
+
+
+
+#### RenderMan: ies:angleScale from -1 to 1
+
+
+| -1.00 | -0.75 | -0.50 | -0.25 | =0.00 | +0.25 | +0.50 | +0.75 | +1.00 |
+| ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- |
+| ![RM-1.00_pre] | ![RM-0.75_pre] | ![RM-0.50_pre] | ![RM-0.25_pre] | ![RM=0.00_pre] | ![RM+0.25_pre] | ![RM+0.50_pre] | ![RM+0.75_pre] | ![RM+1.00_pre] |
+| ![RM-1.00_tst] | ![RM-0.75_tst] | ![RM-0.50_tst] | ![RM-0.25_tst] | ![RM=0.00_tst] | ![RM+0.25_tst] | ![RM+0.50_tst] | ![RM+0.75_tst] | ![RM+1.00_tst] |
+| ![RM-1.00_gph] | ![RM-0.75_gph] | ![RM-0.50_gph] | ![RM-0.25_gph] | ![RM=0.00_gph] | ![RM+0.25_gph] | ![RM+0.50_gph] | ![RM+0.75_gph] | ![RM+1.00_gph] |
+
+
+-----------------------
+
+### Karma
+
+Karma appears to use this formula, which has different behavior for positive and
+negative values of angleScale:
+
+$$
+\theta_{ies} =
+\begin{dcases}
+ \frac{\theta_{light}}{1 - angleScale}, & \text{if} \quad 0 < angleScale < 1 \\
+ \theta_{light} \ (1 + angleScale), & \text{if} \quad -1 < angleScale < 0 \\
+ 0, & \text{otherwise} \\
+\end{dcases}
+$$
+
+These are similar to the RenderMan formula, except there is a switch in behavior
+at $angleScale = 0$, and the scaling origin is left at
+$(\theta_{light},\ \theta_{ies}) = (0,\ 0)$:
+
+
+
+
+
+#### Karma: ies:angleScale from -1 to 1
+
+| -1.00 | -0.75 | -0.50 | -0.25 | =0.00 | +0.25 | +0.50 | +0.75 | +1.00 |
+| ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- |
+| ![Ka-1.00_pre] | ![Ka-0.75_pre] | ![Ka-0.50_pre] | ![Ka-0.25_pre] | ![Ka=0.00_pre] | ![Ka+0.25_pre] | ![Ka+0.50_pre] | ![Ka+0.75_pre] | ![Ka+1.00_pre] |
+| ![Ka-1.00_tst] | ![Ka-0.75_tst] | ![Ka-0.50_tst] | ![Ka-0.25_tst] | ![Ka=0.00_tst] | ![Ka+0.25_tst] | ![Ka+0.50_tst] | ![Ka+0.75_tst] | ![Ka+1.00_tst] |
+| ![Ka-1.00_gph] | ![Ka-0.75_gph] | ![Ka-0.50_gph] | ![Ka-0.25_gph] | ![Ka=0.00_gph] | ![Ka+0.25_gph] | ![Ka+0.50_gph] | ![Ka+0.75_gph] | ![Ka+1.00_gph] |
+
+-----------------------
+
+## Analysis of Karma + Renderman formulas
+
+### Behavior for common use case - spotlights
+
+Both of these are create linear relationships between $\theta_{light}$ and
+$\theta_{ies}$, with the exact scaling factor depending on $angleScale$.
+
+Further, they both have a fixed scale-origin, though the origin varies between the
+two:
+- Renderman scale origin: $\theta = \pi$
+- Karma scale origin: $\theta = 0$
+
+In the common case of a "spotlight" (or any light with a maximum brightness
+centered in a particular direction), the scaling origin direction matters
+because, if the scaling origin direction aligns with the light's primary axis,
+`ies:angleScale` will behave in a manner artists will likely find intuitive.
+
+That is, if we have a spotlight where
+
+$$ iesProfilePrimaryAxis = scaleOrigin $$
+
+...then altering the `ies:angleScale` will make the the "cone" seem to broaden
+or narrow, in a manner that will "feel" a bit like opening and closing barn
+doors on a light.
+
+However, if the primary axis is NOT aligned to the scaleOrigin, then altering
+the `ies:angleScale` will make the light behave in a way that is likely less
+intuitive or useful for lighters.
+
+This means that each of these will work "best" for only a certain subset of
+spotlights, and *neither* will work "intuitively" for all lights:
+
+- RenderMan formula:
+ - works best for spotlights aimed "up"
+ - ie, maximum brightness centered around $verticalAngle = 180°$
+ ($\theta = \pi$)
+- Karma formula:
+ - works best for spotlights aimed "down"
+ - ie, maximum brightness centered around $verticalAngle = 0°$ ($\theta = 0$)
+
+#### Animations - Examples of "Good" and "Bad" scaling
+
+What exactly does it mean that I say the formulas work "best" only for lights
+aimed in a certain direction? After all, even if the scaling origin is not
+aligned to the ies light primary direction, it is still possible to achieve
+something that looks somewhat like scaling the light up and down.
+
+However, if origin + primary light direction are not aligned, though you can
+get the boundaries the light to shrink and grow, the behavior of the profile
+within it's boundaries is probably not what a lighter would expect.
+
+To help visualize what I mean, I've created animations showing behavior of
+both RenderMan and Karma for spot lights aimed both down and up. They're
+displaying versions of my "striped" ies test file, but limited to a 90° cone
+aimed either down (ie, verticalAngle < 45°) or up (ie, verticalAngle > 135°).
+The `ies:angleScale` attribute is then animated to scale the light between
+.5 (45° cone angle) and 1.5 (135° cone angle) - due to the differences in the
+angleScale formula, the exact value need to achieve this varies in each case.
+
+
+
+
+ | Light Direction |
+ RenderMan (Scale origin: Up) |
+ Karma (Scale origin: Down) |
+
+
+ | Up |
+
+
+
+ [mp4]
+
+ [ies]
+
+
+ [usda]
+ (frames 1-49)
+ |
+
+
+
+
+ [mp4]
+
+
+ [ies]
+
+
+ [usda]
+ (frames 50-98)
+ |
+
+
+
+
+ - "Good" scaling - seems to grow + shrink
+
- angleScale: .5 scale = -.5; 1.5 scale = .5
+
- Please disregard the "blurry" rendering - I'm trying to resolve
+ this issue with RenderMan
+
+
+ |
+
+
+ - "Bad" scaling - bands are created + disappear, large dead area at center when scaling up
+
- angleScale: .5 scale = -0.142857; 1.5 scale = 0.166667
+
+ |
+
+ | Down |
+
+
+
+
+ [mp4]
+
+
+ [ies]
+
+
+ [usda]
+ (frames 1-49)
+ |
+
+
+
+
+ [mp4]
+
+
+ [ies]
+
+
+ [usda]
+ (frames 50-98)
+ |
+
+
+
+
+ - "Bad" scaling - bands are created + disappear, large dead area at center when scaling up
+
- angleScale: .5 scale = 0.166667; 1.5 scale =-0.166667
+
- Please disregard the "blurry" rendering - I'm trying to resolve
+ this issue with RenderMan
+
+
+ |
+
+
+ - "Good" scaling - seems to grow + shrink
+
- angleScale: .5 scale = .5; 1.5 scale =-0.333333
+
+ |
+
+
+
+#### Which is more common - spotlights aimed up or down?
+
+If [ieslibrary.com](ieslibrary.com) is indicative, lights aimed **down** are
+much more common - an ad-hoc perusal indicates that if a light has a "primary
+direction", down is the by far the most common. They are apparently common
+enough that the site maker designed their preview images assuming the light is
+aimed downward, as lights aimed in other directions are poorly framed:
+
+| Aimed down (vangle 0°) | Aimed Side (vangle 90°) | Aimed Up (vangle 180°) |
+| ------------------------- | ------------------------- | ---------------------- |
+| ![down_light][down_light] | ![side_light][side_light] | ![up_light][up_light] |
+
+This indicates that the **Karma**-formula will result in more intuitive
+manipulation for a greater majority of lights.
+
+### RenderMan vs Karma
+
+Here's a chart directly comparing these two formulas, with the option I consider
+"better":
+
+| Feature | RenderMan | Karma | Winner |
+| ------------------------------------------------------------ | -------------- | --------- | --------- |
+| Scaling origin (works "best" with spotlights aimed this way) | Up (180°) | Down (0°) | |
+| • Allows "good" scaling for "most common" spotlights | No | ***Yes*** | Karma |
+| • Allows "good" scaling for spotlight aimed up OR down | No | No | |
+| Useable domain (angleScale) | $(-1, \infty)$ | $[-1, 1]$ | |
+| • Useable domain - Symmetric? | No | ***Yes*** | Karma |
+| Relation between angleScale and scaling control | - Negative: narrower
- Positive: broader
| - Negative: broader
- Positive: narrower
| RenderMan |
+| Same formula for entire domain? | ***Yes*** | No | RenderMan |
+| Allows backwards-compatible mapping for RenderMan and Karma? | No | No | |
+
+
+### No clear winner
+
+Unfortunately, I don't think either option is a clear winner, mostly because:
+
+- *Neither* will provide "good" scaling for a spotlight aimed in any
+ direction
+- *Neither* formula is "backward compatible" with the other - ie, there's no
+ mapping from "old" values to "new" values that will result in unaltered
+ behavior for existing scenes.
+
+## Alternatives
+
+Given that bot the RenderMan and Karma formulas have significant drawbacks,
+here are some proposals for alternative formulas:
+
+### A. Bimodal - Scaling Origin at 0° for angleScale > 0, 180° for angleScale < 0
+
+This would allow us to support behavior "similar" to either of the current Karma
+or RenderMan formulas, without having to add any new attributes.
+
+**Mathematical Description:**
+
+$$
+\theta_{ies} =
+\begin{dcases}
+ \frac{\theta_{light}}{angleScale},
+ & \text{if} \quad angleScale > 0 \\
+ \\
+ \theta_{light}
+ & \text{if} \quad angleScale = 0 \\
+ \\
+ \frac{\theta_{light} - \pi}{-angleScale} + \pi,
+ & \text{if} \quad angleScale < 0 \\
+\end{dcases}
+$$
+
+
+
+#### Bimodal: ies:angleScale from -2 to -2
+
+
+| -2.00 | -1.50 | -1.00 | -0.50 | =0.00 | +0.50 | +1.00 | +1.50 | +2.00 |
+| ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- |
+| ![Bi-2.00_pre] | ![Bi-1.50_pre] | ![Bi-1.00_pre] | ![Bi-0.50_pre] | ![Bi=0.00_pre] | ![Bi+0.50_pre] | ![Bi+1.00_pre] | ![Bi+1.50_pre] | ![Bi+2.00_pre] |
+| ![Bi-2.00_tst] | ![Bi-1.50_tst] | ![Bi-1.00_tst] | ![Bi-0.50_tst] | ![Bi=0.00_tst] | ![Bi+0.50_tst] | ![Bi+1.00_tst] | ![Bi+1.50_tst] | ![Bi+2.00_tst] |
+| ![Bi-2.00_gph] | ![Bi-1.50_gph] | ![Bi-1.00_gph] | ![Bi-0.50_gph] | ![Bi=0.00_gph] | ![Bi+0.50_gph] | ![Bi+1.00_gph] | ![Bi+1.50_gph] | ![Bi+2.00_gph] |
+
+
+
+
+ | Light Direction |
+ Bimodal |
+
+
+ | Up |
+
+
+
+
+ [mp4]
+
+
+ [ies]
+
+
+ [usda]
+ (frames 1-49)
+ |
+
+
+
+
+ - "Good" scaling - seems to grow + shrink
+
- angleScale: .5 scale = -.5; 1.5 scale = -1.5
+
+ |
+
+ | Down |
+
+
+
+
+ [mp4]
+
+
+ [ies]
+
+
+ [usda]
+ (frames 1-49)
+ |
+
+
+
+
+ - "Good" scaling - seems to grow + shrink
+
- angleScale: .5 scale = .5; 1.5 scale = 1.5
+
+ |
+
+
+
+
+**Pros:**
+- Can give "good" scaling with lights aimed either up OR down
+ - Use positive values for lights aimed down (most common)
+ - Use negative values for lights aimed up
+- Requires no additional attributes
+- Provides a backwards-compatible mapping for either RenderMan or Karma:
+
+
+$\quad\quad$ RenderMan:
+
+$$
+ angleScale_{new} = - (1 + angleScale_{old_R})
+$$
+
+$\quad\quad$ Karma:
+
+$$
+ angleScale_{new} = \begin{dcases}
+ 1 - angleScale_{old_K} & \text{if} \quad 0 < angleScale_{old_K} < 1 \\
+ \frac{1}{1 + angleScale_{old_K}} & \text{if} \quad -1 < angleScale_{old_K} < 0 \\
+ \end{dcases}
+$$
+
+
+**Cons:**
+- Doesn't give "good" scaling with ALL lights (ie, lights aimed to the side)
+- ...nor does it provide a clear path to supporting any aim direction in the
+ future
+- Non-intuitive "switch" in behavior when the angleScale crosses 0
+- Requires user to figure out whether they should use negative or positive
+ values to get "good" scaling for their light
+
+### B. Add other attributes
+
+If we're open to adding new attributes, we could allow precise control over
+the scaling origin, potentially allow scaling even from horizontally-aimed
+lights, and (possibly) make the formula seem a little less "black box" /
+obscure.
+
+Options might include:
+
+- Adding a `vAngleScaleType` attributes
+ - Be an eumerated attribute that would allow choosing from fixed number of
+ behaviors - ie, scaling origin at top (RenderMan style) or bottom (Karma
+ style)
+ - Or could have an "auto" setting that attempts to calculate a primary light
+ direction
+ - Could provide some future proofing, by adding new allowed values
+- Adding a `vAngleScaleCenter` attribute
+ - Would allow scaling from bottom (by setting to 0°) or top (by setting to
+ 180°)
+ - By itself, could allow "distorted" scaling of sideways-aimed lights (ie,
+ by still only scaling the vertical angle, and leaving horizontal angle
+ unaltered)
+- Adding a `hAngleScaleCenter` attribute
+ - If combined with a `vAngleScaleCenter`, would allow radial scaling for
+ any ies light
+
+While these would enable more control, they would also introduce various levels
+of additional complexity, and require more modification to the schema... and
+there may not be much demand for this level of control.
+
+
+
+
+
+
+
+
+[option_B]: #add-vAngleScaleCenter-attribute
+[option_C]: #add-vAngleScaleCenter-hAngleScaleCenter-and-anglescaledirection-attributes
+
+
+[ies_angleScale_doc]:
+ https://openusd.org/release/api/class_usd_lux_shaping_a_p_i.html#a36b62167bddbf3125fc922d78d104d0c
+[pr_iesAngleScale_formula]:
+ https://github.com/PixarAnimationStudios/OpenUSD/blob/2bd74e30ca5110187b02ad3e8efa1b1c23891cd0/pxr/usd/usdLux/schema.usda#L797-L808
+[rman_profile_scale_doc]:
+ https://rmanwiki-26.pixar.com/space/REN26/19661751/PxrSphereLight#Light-Profile:~:text=Profile%20Scale
+[ies_test_file]:
+ https://github.com/pmolodo/luxtest/blob/0f9955768eca64557be5150b78134b560749e392/test_vstripes_hquadrants_nonuniform.ies
+[iesTest_usda]:
+ https://github.com/pmolodo/luxtest/blob/0f9955768eca64557be5150b78134b560749e392/usd/iesTest.usda
+[iesLibPreview_usda]:
+ https://github.com/pmolodo/luxtest/blob/0f9955768eca64557be5150b78134b560749e392/usd/iesLibPreview.usda
+[luxtest_repo]:
+ https://github.com/pmolodo/luxtest/tree/0f9955768eca64557be5150b78134b560749e392
+[down_light_ies]:
+ https://ieslibrary.com/browse/download/ies/04f377f94ce81cd7b5101fffdf571454/bf62776e70fb1699c9163756404c6c7ac19a1d875f069d2e964f69722374be23?cHash=1d691542fcd0ce49d33daf0288d2092e
+[down_light]: https://ieslibrary.com/ies/BEGA/04f377f94ce81cd7b5101fffdf571454.jpg
+[side_light]: https://ieslibrary.com/ies/GE_LIGHTING_SOLUTIONS/000720b7043c3ae136132bbad11155ed.jpg
+[up_light]: https://ieslibrary.com/ies/BEGA/0184e55f1f5ef8ee9e8b006d6a7bf558.jpg
+
+
+[RM-1.00_tst]: iesTest-ris.0012.png
+ 'RIS Sphere Interior -1.00 angleScale'
+[RM-0.75_tst]: iesTest-ris.0013.png
+ 'RIS Sphere Interior -0.75 angleScale'
+[RM-0.50_tst]: iesTest-ris.0014.png
+ 'RIS Sphere Interior -0.50 angleScale'
+[RM-0.25_tst]: iesTest-ris.0015.png
+ 'RIS Sphere Interior -0.25 angleScale'
+[RM=0.00_tst]: iesTest-ris.0016.png
+ 'RIS Sphere Interior =0.00 angleScale'
+[RM+0.25_tst]: iesTest-ris.0017.png
+ 'RIS Sphere Interior +0.25 angleScale'
+[RM+0.50_tst]: iesTest-ris.0018.png
+ 'RIS Sphere Interior +0.50 angleScale'
+[RM+0.75_tst]: iesTest-ris.0019.png
+ 'RIS Sphere Interior +0.75 angleScale'
+[RM+1.00_tst]: iesTest-ris.0020.png
+ 'RIS Sphere Interior +1.00 angleScale'
+
+[Ka-1.00_tst]: iesTest-karma.0012.png
+ 'Karma Sphere Interior -1.00 angleScale'
+[Ka-0.75_tst]: iesTest-karma.0013.png
+ 'Karma Sphere Interior -0.75 angleScale'
+[Ka-0.50_tst]: iesTest-karma.0014.png
+ 'Karma Sphere Interior -0.50 angleScale'
+[Ka-0.25_tst]: iesTest-karma.0015.png
+ 'Karma Sphere Interior -0.25 angleScale'
+[Ka=0.00_tst]: iesTest-karma.0016.png
+ 'Karma Sphere Interior =0.00 angleScale'
+[Ka+0.25_tst]: iesTest-karma.0017.png
+ 'Karma Sphere Interior +0.25 angleScale'
+[Ka+0.50_tst]: iesTest-karma.0018.png
+ 'Karma Sphere Interior +0.50 angleScale'
+[Ka+0.75_tst]: iesTest-karma.0019.png
+ 'Karma Sphere Interior +0.75 angleScale'
+[Ka+1.00_tst]: iesTest-karma.0020.png
+ 'Karma Sphere Interior +1.00 angleScale'
+
+[Bi-2.00_tst]: iesTest-embree.0012.png
+ 'Bimodal Sphere Interior -2.00 angleScale'
+[Bi-1.50_tst]: iesTest-embree.0013.png
+ 'Bimodal Sphere Interior -1.50 angleScale'
+[Bi-1.00_tst]: iesTest-embree.0014.png
+ 'Bimodal Sphere Interior -1.00 angleScale'
+[Bi-0.50_tst]: iesTest-embree.0015.png
+ 'Bimodal Sphere Interior -0.50 angleScale'
+[Bi=0.00_tst]: iesTest-embree.0016.png
+ 'Bimodal Sphere Interior =0.00 angleScale'
+[Bi+0.50_tst]: iesTest-embree.0017.png
+ 'Bimodal Sphere Interior +0.50 angleScale'
+[Bi+1.00_tst]: iesTest-embree.0018.png
+ 'Bimodal Sphere Interior +1.00 angleScale'
+[Bi+1.50_tst]: iesTest-embree.0019.png
+ 'Bimodal Sphere Interior +1.50 angleScale'
+[Bi+2.00_tst]: iesTest-embree.0020.png
+ 'Bimodal Sphere Interior +2.00 angleScale'
+
+
+[RM-1.00_pre]: iesLibPreview-ris.0012.png
+ 'RIS Preview-1.00 angleScale'
+[RM-0.75_pre]: iesLibPreview-ris.0013.png
+ 'RIS Preview-0.75 angleScale'
+[RM-0.50_pre]: iesLibPreview-ris.0014.png
+ 'RIS Preview-0.50 angleScale'
+[RM-0.25_pre]: iesLibPreview-ris.0015.png
+ 'RIS Preview-0.25 angleScale'
+[RM=0.00_pre]: iesLibPreview-ris.0016.png
+ 'RIS Preview=0.00 angleScale'
+[RM+0.25_pre]: iesLibPreview-ris.0017.png
+ 'RIS Preview+0.25 angleScale'
+[RM+0.50_pre]: iesLibPreview-ris.0018.png
+ 'RIS Preview+0.50 angleScale'
+[RM+0.75_pre]: iesLibPreview-ris.0019.png
+ 'RIS Preview+0.75 angleScale'
+[RM+1.00_pre]: iesLibPreview-ris.0020.png
+ 'RIS Preview+1.00 angleScale'
+
+[Ka-1.00_pre]: iesLibPreview-karma.0012.png
+ 'Karma Preview-1.00 angleScale'
+[Ka-0.75_pre]: iesLibPreview-karma.0013.png
+ 'Karma Preview-0.75 angleScale'
+[Ka-0.50_pre]: iesLibPreview-karma.0014.png
+ 'Karma Preview-0.50 angleScale'
+[Ka-0.25_pre]: iesLibPreview-karma.0015.png
+ 'Karma Preview-0.25 angleScale'
+[Ka=0.00_pre]: iesLibPreview-karma.0016.png
+ 'Karma Preview=0.00 angleScale'
+[Ka+0.25_pre]: iesLibPreview-karma.0017.png
+ 'Karma Preview+0.25 angleScale'
+[Ka+0.50_pre]: iesLibPreview-karma.0018.png
+ 'Karma Preview+0.50 angleScale'
+[Ka+0.75_pre]: iesLibPreview-karma.0019.png
+ 'Karma Preview+0.75 angleScale'
+[Ka+1.00_pre]: iesLibPreview-karma.0020.png
+ 'Karma Preview+1.00 angleScale'
+
+[Bi-2.00_pre]: iesLibPreview-embree.0012.png
+ 'Bimodal Preview-2.00 angleScale'
+[Bi-1.50_pre]: iesLibPreview-embree.0013.png
+ 'Bimodal Preview-1.50 angleScale'
+[Bi-1.00_pre]: iesLibPreview-embree.0014.png
+ 'Bimodal Preview-1.00 angleScale'
+[Bi-0.50_pre]: iesLibPreview-embree.0015.png
+ 'Bimodal Preview-0.50 angleScale'
+[Bi=0.00_pre]: iesLibPreview-embree.0016.png
+ 'Bimodal Preview=0.00 angleScale'
+[Bi+0.50_pre]: iesLibPreview-embree.0017.png
+ 'Bimodal Preview+0.50 angleScale'
+[Bi+1.00_pre]: iesLibPreview-embree.0018.png
+ 'Bimodal Preview+1.00 angleScale'
+[Bi+1.50_pre]: iesLibPreview-embree.0019.png
+ 'Bimodal Preview+1.50 angleScale'
+[Bi+2.00_pre]: iesLibPreview-embree.0020.png
+ 'Bimodal Preview+2.00 angleScale'
+
+
+
+[RM-1.00_gph]: ies_angleScale_Renderman_clamped_-1.00.jpg
+[RM-0.75_gph]: ies_angleScale_Renderman_clamped_-0.75.jpg
+[RM-0.50_gph]: ies_angleScale_Renderman_clamped_-0.50.jpg
+[RM-0.25_gph]: ies_angleScale_Renderman_clamped_-0.25.jpg
+[RM=0.00_gph]: ies_angleScale_Renderman_clamped_+0.00.jpg
+[RM+0.25_gph]: ies_angleScale_Renderman_clamped_+0.25.jpg
+[RM+0.50_gph]: ies_angleScale_Renderman_clamped_+0.50.jpg
+[RM+0.75_gph]: ies_angleScale_Renderman_clamped_+0.75.jpg
+[RM+1.00_gph]: ies_angleScale_Renderman_clamped_+1.00.jpg
+
+[Ka-1.00_gph]: ies_angleScale_Karma_clamped_-1.00.jpg
+[Ka-0.75_gph]: ies_angleScale_Karma_clamped_-0.75.jpg
+[Ka-0.50_gph]: ies_angleScale_Karma_clamped_-0.50.jpg
+[Ka-0.25_gph]: ies_angleScale_Karma_clamped_-0.25.jpg
+[Ka=0.00_gph]: ies_angleScale_Karma_clamped_+0.00.jpg
+[Ka+0.25_gph]: ies_angleScale_Karma_clamped_+0.25.jpg
+[Ka+0.50_gph]: ies_angleScale_Karma_clamped_+0.50.jpg
+[Ka+0.75_gph]: ies_angleScale_Karma_clamped_+0.75.jpg
+[Ka+1.00_gph]: ies_angleScale_Karma_clamped_+1.00.jpg
+
+[Bi-2.00_gph]: ies_angleScale_Bimodal_clamped_-2.00.jpg
+[Bi-1.50_gph]: ies_angleScale_Bimodal_clamped_-1.50.jpg
+[Bi-1.00_gph]: ies_angleScale_Bimodal_clamped_-1.00.jpg
+[Bi-0.50_gph]: ies_angleScale_Bimodal_clamped_-0.50.jpg
+[Bi=0.00_gph]: ies_angleScale_Bimodal_clamped_+0.00.jpg
+[Bi+0.50_gph]: ies_angleScale_Bimodal_clamped_+0.50.jpg
+[Bi+1.00_gph]: ies_angleScale_Bimodal_clamped_+1.00.jpg
+[Bi+1.50_gph]: ies_angleScale_Bimodal_clamped_+1.50.jpg
+[Bi+2.00_gph]: ies_angleScale_Bimodal_clamped_+2.00.jpg
diff --git a/pxr/usd/usdLux/iesAngleScale/angleScale_formulas.py b/pxr/usd/usdLux/iesAngleScale/angleScale_formulas.py
new file mode 100644
index 00000000000..ec2bd788748
--- /dev/null
+++ b/pxr/usd/usdLux/iesAngleScale/angleScale_formulas.py
@@ -0,0 +1,291 @@
+# execfile(r"C:\src\NVIDIA\usd-ci\USD\pxr\usd\usdLux\iesAngleScale\angleScale_formulas.py")
+from attrs import frozen
+import dataclasses
+import inspect
+import math
+import os
+
+import matplotlib.pyplot as plt
+import mpl_toolkits.mplot3d.axes3d
+import numpy
+from numpy import angle
+import spb
+import sympy
+
+from typing import Optional, Tuple
+
+# from sympy import *
+from spb import plot, plot3d
+
+INTERACTIVE_VIEW = True
+
+
+THIS_FILE = os.path.abspath(inspect.getsourcefile(lambda: None) or __file__)
+THIS_DIR = os.path.dirname(THIS_FILE)
+
+IMAGE_SAVE_FOLDER = THIS_DIR
+os.makedirs(IMAGE_SAVE_FOLDER, exist_ok=True)
+
+
+def Clamp(x, min, max):
+ return sympy.Min(sympy.Max(x, min), max)
+
+
+theta, angleScale = sympy.symbols("theta angleScale")
+
+# angle_units = "radians"
+ANGLE_UNITS = "degrees"
+
+if ANGLE_UNITS == "radians":
+ THETA_MAX = sympy.pi
+elif ANGLE_UNITS == "degrees":
+ THETA_MAX = 180
+
+# in latex format
+THETA_INPUT_LABEL = r"$\theta_{light}$"
+THETA_OUTPUT_LABEL = r"$\theta_{ies}$"
+THETA_INPUT_LABEL = f"{THETA_INPUT_LABEL} ({ANGLE_UNITS})"
+THETA_OUTPUT_LABEL = f"{THETA_OUTPUT_LABEL} ({ANGLE_UNITS})"
+
+THETA_MIN_MAX = (0, THETA_MAX)
+ANGLESCALE_MIN_MAX = (-1, 1)
+
+@dataclasses.dataclass(frozen=True)
+class ViewAngles:
+ elev: Optional[float] = None
+ azim: Optional[float] = None
+ roll: Optional[float] = None
+
+ def is_null(self):
+ return self.elev is None and self.azim is None and self.roll is None
+
+ def set_on_axes(self, axes):
+ if self.is_null():
+ return
+ if not hasattr(axes, "view_init"):
+ return
+ axes.view_init(elev=self.elev, azim=self.azim, roll=self.roll)
+
+BIMODAL_VIEW_ANGLE = ViewAngles(azim=25.97402597402598, elev=42.792207792207805)
+DEFAULT_VIEW_ANGLE = ViewAngles()
+
+
+@dataclasses.dataclass(frozen=True)
+class GraphOptions:
+ theta_min_max: Tuple[float, float] = THETA_MIN_MAX
+ angleScale_min_max: Tuple[float, float] = ANGLESCALE_MIN_MAX
+ box_aspect: Tuple[float, float, float] = (1, 1, 1)
+ view_angles: ViewAngles = DEFAULT_VIEW_ANGLE
+
+ def set_on_graph(self, graph):
+ axes = graph.ax
+ if not "theta" in axes.get_xlabel():
+ raise ValueError("expected x-axis to be theta")
+
+ axes.set_xlabel(THETA_INPUT_LABEL)
+ axes.set_xlim(*self.theta_min_max)
+ if hasattr(axes, "set_zlim"):
+ axes.set_ylim(*self.angleScale_min_max)
+ axes.set_zlim(*self.theta_min_max)
+ axes.set_zlabel(THETA_OUTPUT_LABEL)
+ if self.box_aspect != (1, 1, 1):
+ print(f"{self.box_aspect=}")
+ axes.set_box_aspect(self.box_aspect)
+ else:
+ axes.set_ylim(*self.theta_min_max)
+ axes.set_ylabel(THETA_OUTPUT_LABEL)
+ aspect = (self.box_aspect[0], self.box_aspect[2])
+ if aspect != (1, 1):
+ aspectRatio = aspect[1] / aspect[0]
+ axes.set_aspect(aspectRatio)
+
+ self.view_angles.set_on_axes(axes)
+
+ def theta_lim(self):
+ return (theta,) + self.theta_min_max
+
+ def angleScale_lim(self):
+ return (angleScale,) + self.angleScale_min_max
+
+ def make_graph2d(self, function, title):
+ graph = spb.plot(function, self.theta_lim(), show=False, title=title)
+ self.set_on_graph(graph)
+ return graph
+
+ def make_graph3d(self, function, title):
+ graph = spb.plot3d(function, self.theta_lim(), self.angleScale_lim(), show=False, title=title)
+ self.set_on_graph(graph)
+ return graph
+
+
+DEFAULT_GRAPH = GraphOptions()
+
+def save_graph(graph, filename, dpi=300):
+ ext = os.path.splitext(filename)[-1].lstrip(".")
+ if not ext or ext.isdigit():
+ filename = filename + ".jpg"
+ print(f"Saving: {filename}")
+ filepath = os.path.join(IMAGE_SAVE_FOLDER, filename)
+ # this also ensures the graph is evaluated... I tried using
+ # "graph.process_series()", but that seemed to make a second copy of the
+ # graph, that didn't respect the zlim
+ axes = graph.ax
+ graph.fig.savefig(filepath, dpi=dpi)
+
+
+def save_graph_slices(function, title, filename, num_slices, graph_options=DEFAULT_GRAPH):
+ start, end = graph_options.angleScale_min_max
+ dist = end - start
+ step = dist / (num_slices - 1)
+ for i in range(num_slices):
+ angleScale_val = round((i * step) + start, 6)
+ angleScale_str = f"{angleScale_val:+.02f}"
+ title_i = f"{title} (angleScale = {angleScale_str})"
+ filename_i = f"{filename}_{angleScale_str}"
+ slice_func = function.subs(angleScale, angleScale_val)
+ graph = graph_options.make_graph2d(slice_func, title=title_i)
+ if any(
+ isinstance(x, sympy.core.numbers.ComplexInfinity)
+ for x in slice_func.atoms()
+ ):
+ del graph.series[0]
+ graph_options.set_on_graph(graph)
+ axes = graph.ax
+ x_center = sum(axes.get_xlim()) / 2
+ y_center = sum(axes.get_ylim()) / 2
+ axes.text(
+ x_center,
+ y_center,
+ "Undefined\nAsymptote",
+ verticalalignment="center",
+ horizontalalignment="center",
+ fontsize=50,
+ )
+ else:
+ graph.ax.get_lines()[0].set_linewidth(5)
+ save_graph(graph, filename_i)
+ plt.close(graph.fig)
+
+
+def plot3d_and_save(function, title, slices=0, graph_options=DEFAULT_GRAPH):
+ graph = graph_options.make_graph3d(function, title=title)
+ filename = f"ies_angleScale_{title}"
+ filename = filename.replace(" - ", "-")
+ filename = filename.replace("/", "over")
+ for to_erase in "()":
+ filename = filename.replace(to_erase, "")
+ filename = filename.replace(" ", "_")
+
+ save_graph(graph, filename)
+ if slices:
+ save_graph_slices(function, title, filename, num_slices=slices, graph_options=graph_options)
+ return graph
+
+
+karma_pos = theta / (1 - angleScale)
+karma_neg = theta * (1 + angleScale)
+
+karma = sympy.Piecewise(
+ (0, angleScale < -1),
+ (karma_neg, angleScale < 0),
+ (karma_pos, angleScale < 1),
+ (0, True),
+)
+karma_clamp = Clamp(karma, 0, THETA_MAX)
+
+karma_pos_clamp = Clamp(
+ sympy.Piecewise((0, angleScale < -1), (karma_pos, angleScale < 1), (0, True)),
+ 0,
+ THETA_MAX,
+)
+
+
+# karma_pos_graph = plot3d_and_save(karma_pos, "Karma (positive)")
+# karma_neg_graph = plot3d_and_save(karma_neg, "Karma (negative)")
+
+# karma_graph = plot3d_and_save(karma, "Karma (unclamped)")
+
+karma_clamp_graph = plot3d_and_save(karma_clamp, "Karma (clamped)", slices=9)
+
+# karma_pos_clamp_graph = plot3d_and_save(
+# karma_pos_clamp, "Karma - theta / (1-angleScale) only (clamped)"
+# )
+
+profile_scale = 1 + angleScale
+rman = ((theta - THETA_MAX) / profile_scale) + THETA_MAX
+rman_clamp = Clamp(sympy.Piecewise((rman, angleScale > -1), (0, True)), 0, THETA_MAX)
+
+# rman_graph = plot3d_and_save(rman, "Renderman (unclamped)")
+
+rman_clamp_graph = plot3d_and_save(rman_clamp, "Renderman (clamped)", slices=9)
+
+
+# if angleScale > 0, scale origin is at bottom (vangle=0)
+# if angleScale == 0, no change
+# if angleScale < 0, scale origin is at top (vangle=180)
+
+bimodal_pos = theta / angleScale
+bimodal_neg = ((theta - THETA_MAX) / -angleScale) + THETA_MAX
+bimodal_neg_clamp = Clamp(bimodal_neg, 0, THETA_MAX)
+# bimodal_neg_clamp_graph = plot3d_and_save(bimodal_neg_clamp, "Bimodal Neg (Clamped)", slices=9, angleScale_min_max=(-1, 0))
+
+bimodal = sympy.Piecewise((bimodal_pos, angleScale > 0), (bimodal_neg, angleScale < 0), (theta, True))
+bimodal_clamp = Clamp(bimodal, 0, THETA_MAX)
+
+
+bimodal_options = GraphOptions(
+ angleScale_min_max=(-2, 2),
+ box_aspect=(4, 8, 3),
+ view_angles=BIMODAL_VIEW_ANGLE)
+
+bimodal_clamp_graph = plot3d_and_save(
+ bimodal_clamp,
+ "Bimodal (clamped)",
+ slices=17,
+ graph_options=bimodal_options,
+)
+
+if INTERACTIVE_VIEW:
+ plt.show()
+else:
+ # plt.close("all")
+ pass
+
+# from sympy.solvers import solve
+
+# rtheta, ktheta = sympy.symbols("rtheta ktheta")
+# req = rtheta - rman
+# keq = ktheta - karma
+
+
+# # renderman - light aimed down - 22.5 vangle (real world) maps to 45 (ies lookup)
+# solve(req.subs({rtheta: 45, theta: 22.5}), angleScale)
+# # 1/6 = 0.16666666666666666
+
+# # renderman - light aimed down - 67.5 vangle (real world) maps to 45 (ies lookup)
+# solve(req.subs({rtheta: 45, theta: 67.5}), angleScale)
+# # -1/6 = -0.16666666666666666
+
+# # karma - light aimed down - 22.5 vangle (real world) maps to 45 (ies lookup)
+# solve(keq.subs({ktheta: 45, theta: 22.5}), angleScale)
+# # 1/2 = .5
+
+# # karma - light aimed down - 67.5 vangle (real world) maps to 45 (ies lookup)
+# solve(keq.subs({ktheta: 45, theta: 67.5}), angleScale)
+# # -1/3 = -0.3333333333333333
+
+# # renderman - light aimed up - 112.5 vangle (real world) maps to 135 (ies lookup)
+# solve(req.subs({rtheta: 135, theta: 112.5}), angleScale)
+# # 1/2 = .5
+
+# # renderman - light aimed up - 157.5 vangle (real world) maps to 135 (ies lookup)
+# solve(req.subs({rtheta: 135, theta: 157.5}), angleScale)
+# # -1/2 = -.5
+
+# # karma - light aimed up - 112.5 vangle (real world) maps to 135 (ies lookup)
+# solve(keq.subs({ktheta: 135, theta: 112.5}), angleScale)
+# # 1/6 = 0.16666666666666666
+
+# # karma - light aimed up - 157.5 vangle (real world) maps to 135 (ies lookup)
+# solve(keq.subs({ktheta: 135, theta: 157.5}), angleScale)
+# # -1/7 = -0.14285714285714285
diff --git a/pxr/usd/usdLux/iesAngleScale/iesDown-embree.mp4 b/pxr/usd/usdLux/iesAngleScale/iesDown-embree.mp4
new file mode 100644
index 00000000000..1b975f07f58
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesDown-embree.mp4 differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesDown-karma.mp4 b/pxr/usd/usdLux/iesAngleScale/iesDown-karma.mp4
new file mode 100644
index 00000000000..1d45ab9a50d
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesDown-karma.mp4 differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesDown-ris.mp4 b/pxr/usd/usdLux/iesAngleScale/iesDown-ris.mp4
new file mode 100644
index 00000000000..58e45418f25
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesDown-ris.mp4 differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0012.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0012.png
new file mode 100644
index 00000000000..817a07c7c81
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0012.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0013.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0013.png
new file mode 100644
index 00000000000..cae0155f4b3
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0013.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0014.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0014.png
new file mode 100644
index 00000000000..1c11594be61
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0014.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0015.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0015.png
new file mode 100644
index 00000000000..0e3e123936e
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0015.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0016.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0016.png
new file mode 100644
index 00000000000..cb18e9dc525
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0016.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0017.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0017.png
new file mode 100644
index 00000000000..6f531ce7d03
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0017.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0018.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0018.png
new file mode 100644
index 00000000000..9f36b3a5775
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0018.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0019.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0019.png
new file mode 100644
index 00000000000..a4847e7bb86
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0019.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0020.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0020.png
new file mode 100644
index 00000000000..583df08baa4
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-arnold.0020.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0012.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0012.png
new file mode 100644
index 00000000000..52375fa5003
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0012.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0013.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0013.png
new file mode 100644
index 00000000000..6304b9071af
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0013.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0014.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0014.png
new file mode 100644
index 00000000000..5af66b4c3df
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0014.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0015.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0015.png
new file mode 100644
index 00000000000..ec48d42b6d1
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0015.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0016.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0016.png
new file mode 100644
index 00000000000..864bc2d2068
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0016.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0017.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0017.png
new file mode 100644
index 00000000000..5acdc5f57d9
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0017.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0018.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0018.png
new file mode 100644
index 00000000000..8506481b877
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0018.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0019.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0019.png
new file mode 100644
index 00000000000..f5e0000e927
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0019.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0020.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0020.png
new file mode 100644
index 00000000000..71e30b694ac
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-embree.0020.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0001.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0001.png
new file mode 100644
index 00000000000..b365886b30f
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0001.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0011.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0011.png
new file mode 100644
index 00000000000..bd1f9c20559
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0011.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0012.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0012.png
new file mode 100644
index 00000000000..c19e984837b
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0012.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0013.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0013.png
new file mode 100644
index 00000000000..3ac16028805
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0013.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0014.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0014.png
new file mode 100644
index 00000000000..aa5dccea19a
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0014.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0015.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0015.png
new file mode 100644
index 00000000000..3e0462b5f74
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0015.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0016.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0016.png
new file mode 100644
index 00000000000..9b1a73c3330
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0016.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0017.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0017.png
new file mode 100644
index 00000000000..3c972c047a6
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0017.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0018.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0018.png
new file mode 100644
index 00000000000..3f88eff4089
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0018.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0019.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0019.png
new file mode 100644
index 00000000000..598be632ef8
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0019.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0020.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0020.png
new file mode 100644
index 00000000000..e4bd0ea2191
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-karma.0020.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0012.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0012.png
new file mode 100644
index 00000000000..ecd6121fcb3
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0012.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0013.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0013.png
new file mode 100644
index 00000000000..80c12f473f4
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0013.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0014.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0014.png
new file mode 100644
index 00000000000..5a9403d13f1
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0014.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0015.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0015.png
new file mode 100644
index 00000000000..3ff977ef276
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0015.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0016.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0016.png
new file mode 100644
index 00000000000..2d9131c3a91
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0016.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0017.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0017.png
new file mode 100644
index 00000000000..68c922647aa
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0017.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0018.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0018.png
new file mode 100644
index 00000000000..2cfa8945298
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0018.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0019.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0019.png
new file mode 100644
index 00000000000..e4f04b5c367
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0019.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0020.png b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0020.png
new file mode 100644
index 00000000000..4caee848562
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesLibPreview-ris.0020.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0012.png b/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0012.png
new file mode 100644
index 00000000000..2133f4d04e9
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0012.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0013.png b/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0013.png
new file mode 100644
index 00000000000..cfacb33d1b5
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0013.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0014.png b/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0014.png
new file mode 100644
index 00000000000..1e895583caf
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0014.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0015.png b/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0015.png
new file mode 100644
index 00000000000..5a36fdea79a
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0015.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0016.png b/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0016.png
new file mode 100644
index 00000000000..d93dabf88fe
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0016.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0017.png b/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0017.png
new file mode 100644
index 00000000000..9e26d41b250
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0017.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0018.png b/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0018.png
new file mode 100644
index 00000000000..f251eadf6da
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0018.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0019.png b/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0019.png
new file mode 100644
index 00000000000..a0273c73294
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0019.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0020.png b/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0020.png
new file mode 100644
index 00000000000..9a6d6e2fcd1
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-arnold.0020.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0012.png b/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0012.png
new file mode 100644
index 00000000000..fbcdbf4855c
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0012.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0013.png b/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0013.png
new file mode 100644
index 00000000000..e738733cbe9
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0013.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0014.png b/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0014.png
new file mode 100644
index 00000000000..c95305fc3e8
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0014.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0015.png b/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0015.png
new file mode 100644
index 00000000000..ba454f725f5
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0015.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0016.png b/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0016.png
new file mode 100644
index 00000000000..c44ab237b60
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0016.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0017.png b/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0017.png
new file mode 100644
index 00000000000..93cfea116e2
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0017.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0018.png b/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0018.png
new file mode 100644
index 00000000000..8fc667cdbe2
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0018.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0019.png b/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0019.png
new file mode 100644
index 00000000000..26d30cfc1d0
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0019.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0020.png b/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0020.png
new file mode 100644
index 00000000000..7253d4a75dc
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-embree.0020.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0001.png b/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0001.png
new file mode 100644
index 00000000000..89c2ff65e41
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0001.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0011.png b/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0011.png
new file mode 100644
index 00000000000..e36b4fe9a17
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0011.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0012.png b/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0012.png
new file mode 100644
index 00000000000..a2ec7c0ed9c
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0012.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0013.png b/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0013.png
new file mode 100644
index 00000000000..9be7f4d34bf
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0013.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0014.png b/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0014.png
new file mode 100644
index 00000000000..5a80a62d4a6
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0014.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0015.png b/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0015.png
new file mode 100644
index 00000000000..552fa6b4531
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0015.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0016.png b/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0016.png
new file mode 100644
index 00000000000..f3676e930fa
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0016.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0017.png b/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0017.png
new file mode 100644
index 00000000000..55dd47c1ab4
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0017.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0018.png b/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0018.png
new file mode 100644
index 00000000000..41ae1c9ee41
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0018.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0019.png b/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0019.png
new file mode 100644
index 00000000000..2ffa338324c
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0019.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0020.png b/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0020.png
new file mode 100644
index 00000000000..6d1255feabc
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-karma.0020.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0012.png b/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0012.png
new file mode 100644
index 00000000000..6fd0dcf7aea
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0012.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0013.png b/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0013.png
new file mode 100644
index 00000000000..49f8a0e3c59
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0013.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0014.png b/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0014.png
new file mode 100644
index 00000000000..b9657fa5b88
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0014.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0015.png b/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0015.png
new file mode 100644
index 00000000000..b160b8f7d57
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0015.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0016.png b/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0016.png
new file mode 100644
index 00000000000..0f76289f2c1
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0016.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0017.png b/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0017.png
new file mode 100644
index 00000000000..a37a069c314
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0017.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0018.png b/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0018.png
new file mode 100644
index 00000000000..de96e3f1d0d
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0018.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0019.png b/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0019.png
new file mode 100644
index 00000000000..3275070270b
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0019.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0020.png b/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0020.png
new file mode 100644
index 00000000000..13d066dcd48
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesTest-ris.0020.png differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesUp-embree.mp4 b/pxr/usd/usdLux/iesAngleScale/iesUp-embree.mp4
new file mode 100644
index 00000000000..96c3721ab3b
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesUp-embree.mp4 differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesUp-karma.mp4 b/pxr/usd/usdLux/iesAngleScale/iesUp-karma.mp4
new file mode 100644
index 00000000000..decd2dfcd9c
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesUp-karma.mp4 differ
diff --git a/pxr/usd/usdLux/iesAngleScale/iesUp-ris.mp4 b/pxr/usd/usdLux/iesAngleScale/iesUp-ris.mp4
new file mode 100644
index 00000000000..1d15f2d327e
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/iesUp-ris.mp4 differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped.jpg
new file mode 100644
index 00000000000..ee290b04e00
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+0.00.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+0.00.jpg
new file mode 100644
index 00000000000..6479b16f8ba
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+0.00.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+0.25.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+0.25.jpg
new file mode 100644
index 00000000000..6a1f116fb3c
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+0.25.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+0.50.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+0.50.jpg
new file mode 100644
index 00000000000..ab5a01bcfdd
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+0.50.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+0.75.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+0.75.jpg
new file mode 100644
index 00000000000..19a85ea4f07
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+0.75.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+1.00.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+1.00.jpg
new file mode 100644
index 00000000000..f2ac5e58217
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+1.00.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+1.25.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+1.25.jpg
new file mode 100644
index 00000000000..97cf890c8a0
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+1.25.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+1.50.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+1.50.jpg
new file mode 100644
index 00000000000..22f73833c6f
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+1.50.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+1.75.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+1.75.jpg
new file mode 100644
index 00000000000..fa3864b83e1
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+1.75.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+2.00.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+2.00.jpg
new file mode 100644
index 00000000000..af3a9635597
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_+2.00.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_-0.25.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_-0.25.jpg
new file mode 100644
index 00000000000..ec7f696d5f7
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_-0.25.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_-0.50.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_-0.50.jpg
new file mode 100644
index 00000000000..80e0f0dc916
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_-0.50.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_-0.75.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_-0.75.jpg
new file mode 100644
index 00000000000..e9ca8d4e4b5
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_-0.75.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_-1.00.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_-1.00.jpg
new file mode 100644
index 00000000000..867f74a462f
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_-1.00.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_-1.25.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_-1.25.jpg
new file mode 100644
index 00000000000..bb18d864e2e
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_-1.25.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_-1.50.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_-1.50.jpg
new file mode 100644
index 00000000000..52fbc752e37
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_-1.50.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_-1.75.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_-1.75.jpg
new file mode 100644
index 00000000000..d0e8d958872
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_-1.75.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_-2.00.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_-2.00.jpg
new file mode 100644
index 00000000000..b1f523cc724
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Bimodal_clamped_-2.00.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma-theta_over_1-angleScale_only_clamped.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma-theta_over_1-angleScale_only_clamped.jpg
new file mode 100644
index 00000000000..ae595538d90
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma-theta_over_1-angleScale_only_clamped.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped.jpg
new file mode 100644
index 00000000000..f73d799f72f
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_+0.00.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_+0.00.jpg
new file mode 100644
index 00000000000..b33068be860
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_+0.00.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_+0.25.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_+0.25.jpg
new file mode 100644
index 00000000000..f48d8eb1c3e
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_+0.25.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_+0.50.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_+0.50.jpg
new file mode 100644
index 00000000000..6255a3d3ec6
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_+0.50.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_+0.75.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_+0.75.jpg
new file mode 100644
index 00000000000..5851a5df863
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_+0.75.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_+1.00.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_+1.00.jpg
new file mode 100644
index 00000000000..b54a2a946c0
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_+1.00.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_-0.25.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_-0.25.jpg
new file mode 100644
index 00000000000..e3e67535cb0
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_-0.25.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_-0.50.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_-0.50.jpg
new file mode 100644
index 00000000000..944dcba6ba0
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_-0.50.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_-0.75.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_-0.75.jpg
new file mode 100644
index 00000000000..2cbc40e4041
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_-0.75.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_-1.00.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_-1.00.jpg
new file mode 100644
index 00000000000..2580de6c6e4
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_clamped_-1.00.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_unclamped.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_unclamped.jpg
new file mode 100644
index 00000000000..9b06efd3ec7
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Karma_unclamped.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped.jpg
new file mode 100644
index 00000000000..2fc7556c62a
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_+0.00.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_+0.00.jpg
new file mode 100644
index 00000000000..26a3e4c258d
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_+0.00.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_+0.25.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_+0.25.jpg
new file mode 100644
index 00000000000..044d3182b26
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_+0.25.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_+0.50.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_+0.50.jpg
new file mode 100644
index 00000000000..c88c93f6307
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_+0.50.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_+0.75.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_+0.75.jpg
new file mode 100644
index 00000000000..ec4572f4653
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_+0.75.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_+1.00.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_+1.00.jpg
new file mode 100644
index 00000000000..7a131ad01f9
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_+1.00.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_-0.25.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_-0.25.jpg
new file mode 100644
index 00000000000..3daeaceda46
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_-0.25.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_-0.50.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_-0.50.jpg
new file mode 100644
index 00000000000..95febe27bca
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_-0.50.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_-0.75.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_-0.75.jpg
new file mode 100644
index 00000000000..e0c7612bb94
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_-0.75.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_-1.00.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_-1.00.jpg
new file mode 100644
index 00000000000..33bba7bd961
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_clamped_-1.00.jpg differ
diff --git a/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_unclamped.jpg b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_unclamped.jpg
new file mode 100644
index 00000000000..ac074364baf
Binary files /dev/null and b/pxr/usd/usdLux/iesAngleScale/ies_angleScale_Renderman_unclamped.jpg differ