[HtoA] Denoising light group AVOs with noice


To use the Arnold Denoiser (noice) on light groups, you need to have variance AOVs for the light group AOVs.

There are two ways to associate a variance AOV with a light group AOV.

  • Use the same light path expression (LPE) for both the light group AOV and the variance AOV.

    For example, the “red” and “red_variance” AOVs use the same LPE: C.*<L.'red'>
  • Use the same name for both AOVs, but give the variance AOV a different layer name.

    For example, suppose you give both AOVs the name “RGBA_green”. Then give the variance AOV a different layer name, like “RGB_variance_green”

Use the same light path expression (LPE) for both the light group AOV and the variance AOV.

Give the light group and variance AOVs the same name, but different layer names

Then to denoise the AOVs:

noice -i "light_group_denoise.0001.exr" -o C:\temp\denoised.exr -pr 3 -sr 3 -l red -l RGBA_green
noice 7.1.1.0 [72784a51] - the Arnold denoiser
Using 8 threads.
Loading images...
Loading file "light_group_denoise.0001.exr".
Using feature AOV 'denoise_albedo' with filter 'gaussian_filter'
Using feature AOV 'N' with filter 'gaussian_filter'
Using feature AOV 'Z' with filter 'gaussian_filter'
Working with 1 frame at 1280x720
Will denoise AOV "RGBA", using associated variance
   Output file will be "C:\temp\denoised.exr"
Will denoise AOV "RGBA_green", using associated variance
   Output file will be "C:\temp\denoised.exr"
Will denoise AOV "red", using associated variance
   Output file will be "C:\temp\denoised.exr"
Start denoising (patch radius 3, search radius 3, variance 0.5)
Denoising RGBA
Denoising RGBA_green
Denoising red
Finished denoising
Saving image C:\temp\denoised.exr (1280 x 720 x 12)

Add -irgba to that if you want to skip denoising the beauty. Note that with -irgba. the beauty AOV won’t be copied to the output file. Only the denoised AOVs go the output file.

All the AOV, LPE, and layer information that you set up in HtoA goes into EXR metadata.
noice uses that metadata to find the variance AOVs for each AOV. The association may be through the AOVs having the same name, or the AOVs using the same explicit LPE.

error: (44) Product key not found


If you get this error, it means that Arnold is not registered in the Autodesk product information file.

With Arnold 5.3 and later, you use the AdskLicensingInstHelper tool (all Autodesk software now uses AdskLicensingInstHelper). The pitreg utility was removed in Arnold 5.3

Note AdskLicensingInstHelper requires that the Autodesk Licensing Service is installed and running on the machine.

For example:

sudo /opt/Autodesk/AdskLicensing/Current/helper/AdskLicensingInstHelper register --pk C0PL1 --pv 2020.0.0.F --lm NETWORK -cf /opt/Autodesk/arnold/maya2019-4.2.0/license/ArnoldConfig.pit

or

"C:\Program Files (x86)\Common Files\Autodesk Shared\AdskLicensing\Current\helper\AdskLicensingInstHelper.exe" register --pk C0PN1 --pv 2022.0.0.F --lm NETWORK --cf "C:\Program Files\Autodesk\Arnold\maya2022-5.0.0.2\license\ArnoldConfig.pit"

In addition to registering Arnold in the global ProductInformation.pit file used by all Autodesk products, AdskLicensingInstHelper also registers Arnold with the Autodesk licensing service (that’s for single-user licensing).

The ProductInformation.pit file is located here:

  • /var/opt/Autodesk/Adlm/.config/ProductInformation.pit
  • C:\ProgramData\Autodesk\Adlm\ProductInformation.pit
  • /Library/Application Support/Autodesk/Adlm/.config/ProductInformation.pit

Here’s the help for the register command:

C:\Users\blairs>"C:\Program Files (x86)\Common Files\Autodesk Shared\AdskLicensing\Current\helper\AdskLicensingInstHelper.exe" -help register
NAME:
   AdskLicensingInstHelper - Manage products registration with Autodesk Licensing

USAGE:
   AdskLicensingInstHelper.exe [global options] command [command options] [arguments...]

VERSION:
   2.11.0.666

COMMANDS:
     register    Register product with the licensing components. Requires admin rights
     deregister  Deregister product from the licensing components. Requires admin rights
     list        List all products registered with licensing components
     change      Change registered product
     help, h     Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --verbose, -d  [O] Output verbose log
   --help, -h     show help
   --version, -v  print the version

signal caught: error C0000005 — access violation


People often ask me why they get this error…

Unfortunately, there’s no one answer. This is a totally generic error message, and it could be anything. Typically, it’s a bug somewhere. But where?

You could try to manually isolate it…is it shaders? textures? displacement? some object in the scene?

Ideally, you’ll be able to submit a Crash Error Report (CER). That would let us see where the crash actually happened.

Crash Error Report

The backtrace in an Arnold log won’t tell you, because we hide all the symbols in the shipping Arnold. So every backtrace comes out with things like Ordinal0 or AiLightsPrepare or AiADPDialogStrings, because those just happens to be the nearest unhidden symbols.

If you had a linux backtrace, we could symbolicate that on our end to see where the crash is happening. But on Window, it’s not so easy.

****
* Arnold 7.0.0.1 [5e3b4fd3] windows clang-10.0.1 oiio-2.3.2 osl-1.12.0 vdb-7.1.1 clm-2.0.0.235 rlm-14.1.3 optix-6.6.0 2021/11/18 13:08:38
* CRASHED in Ordinal0 at 00:00:00, pixel (946, 377)
* signal caught: error C0000005 -- access violation
*
* backtrace:
>> 0 0x00007ffb083cc387 [ai      ] Ordinal0
*  1 0x00007ffb08a24b56 [ai      ]
*  2 0x00007ffb0891cd0c [ai      ]
*  3 0x00007ffb087eaa92 [ai      ] AiLightsPrepare
*  4 0x00007ffb088ce771 [ai      ]
*  5 0x00007ffb088d4ef6 [ai      ]
*  6 0x00007ffb0870b67a [ai      ] Ordinal0
*  7 0x00007ffb09244186 [ai      ] AiADPSendPayload
*  8 0x00007ffb09243da3 [ai      ] AiADPSendPayload
*  9 0x00007ffb08db0a54 [ai      ] AiADPSendPayload
* 10 0x00007ffb09245414 [ai      ] AiADPSendPayload
* 11 0x00007ffb0989a74c [ai      ] AiADPSendPayload
* 12 0x00007ffb0989a8ed [ai      ] AiADPSendPayload
* 13 0x00007ffbd77c1bb2 [ucrtbase] configthreadlocale
* 14 0x00007ffbd8807034 [KERNEL32] BaseThreadInitThunk
* 15 0x00007ffbd9d22651 [ntdll   ] RtlUserThreadStart

Failed to register Arnold product


When you click Register in the Arnold License Manager, it runs the Autodesk tool AdskLicensingInstHelper. All Autodesk products use this tool to register themselves with Autodesk licensing.

Check the License Manager log

If you get Failed to register Arnold product, check the Arnold License Manager log.

On macOS:

  1. Open the Arnold License Manager.
  2. In the menu bar, click Arnold License Manager > About Arnold License Manager.
  3. In the About dialog box, click Show Log.
  4. Click Copy to copy the log, and send it to Autodesk licensing support.

On Windows:

  1. In the Arnold License Manager, click Help > About.
  2. Click Copy to copy the log.

If you want to try and troubleshoot the problem yourself, find the line that runs the AdskLicensingInstHelper register command. It will look something like this:

2021-11-08 11:13:10 DEBUG | [clmv2] run: "/Library/Application Support/Autodesk/AdskLicensing/Current/helper/AdskLicensingInstHelper" register --prod_key C0PL1 --prod_ver 2020.0.0.F --config_file /Applications/Autodesk/Arnold/mtoa/2022/license/pit/ArnoldConfig.pit --lic_method USER --eula_locale en_US

Under that line, there will be some log messages describing why the command failed.

Reinstall the licensing

In some cases, a complete uninstall and then re-install of “single-user licensing” can fix the problem.

In a Terminal, run these commands:

   cd ~/Autodesk/LicensingInstaller
   sudo ./uninstall.sh

sudo will ask you to type your password. Press ENTER after you finish typing.

Then start the Arnold License Manager and switch to Single-user licensing. The license manager will ask if you want to install single-user licensing.

HtoA silent installs


The HtoA installer supports silent installs and silent extractions (an install will update houdini.env, an extract does not).

htoa-6.0.0.0_r6c54f59_houdini-18.5.696_windows.exe -h

htoa-6.0.0.0_r6c54f59_houdini-18.5.696_windows.exe [options]

Options:
  -?, -h, --help      Displays help on commandline options.
  --help-all          Displays help including Qt specific options.
  -v, --verbose       Verbose mode. Prints out more information.
  --extract           Extract installation contents in the current directory.
  --extract-to <dir>  Extract installation contents in <dir>.
  --accept-license    Do not prompt for license acceptance in silent mode.
                      IMPORTANT: By using this option, you accept the end-user
                      license agreement
  --silent            Silent installation (no GUI).

For example, this command silently installs HtoA on Windows. The –verbose gives you a log in the command prompt window.

htoa-6.0.0.0_r6c54f59_houdini-18.5.696.py3_windows.exe --accept-license --silent --verbose

Running HtoA 5.6.3.x in Houdini 17.5


Error running pythonrc.py:
Traceback (most recent call last):
  File "C:/Users/example/htoa/htoa-5.6.3.0_ra766b1f_houdini-17.5.460/scripts/python/pythonrc.py", line 5, in <module>
    import htoa.searchpath
  File "C:/Users/example/htoa/htoa-5.6.3.0_ra766b1f_houdini-17.5.460/scripts/python\htoa\searchpath.py", line 7, in <module>
    import htoa.dialog
  File "C:/Users/example/htoa//htoa-5.6.3.0_ra766b1f_houdini-17.5.460/scripts/python\htoa\dialog.py", line 3, in <module>
    from builtins import str
ImportError: No module named builtins

If you see errors like this, it’s because as of HtoA 5.6.3, the builtins module is required. Houdini 17.5 doesn’t include this module (unlike Houdini 18 and later), so you’ll have to install it.

  • Open a command prompt with Run as Administrator.
  • In the command prompt, run these commands:
cd "C:\Program Files\Side Effects Software\Houdini 17.5.460\python27"
python -m ensurepip --upgrade
python -m pip install future

Arnold 7 uses Arnold 2022 licensing


Arnold 7 is a new licensing version: Arnold 2022

(Arnold 6 was Arnold 2020, and Arnold 5 was Arnold 2018)

What does this mean for you?

  • If you have network licenses, the contract manager has to go to manage.autodesk.com and generate a new network license.
  • If you have single-user licenses, open the Arnold License Manager and check that Arnold 2022 is registered on your machine. Most, but not all, of the plugin installers will register Arnold.

Getting shader info from an ASS file


First, set things up so you can use the Arnold Python API. On Windows:

set PATH=C:\Users\blairs\AppData\Local\Programs\Python\Python39;%PATH%
set PYTHONPATH=C:\solidangle\arnold\Arnold-6.2.1.1-windows\python

rem Sometimes necessary
set PATH=C:\solidangle\arnold\Arnold-6.2.1.1-windows\bin;%PATH%

Then, run this Python script, which does the following:

  • Sets the logging verbosity
  • Loads an ASS file
  • Loops over all the shader nodes.
  • If a shader is a standard_surface, inspect the ID AOV parameters.
from arnold import *
AiBegin()
 
AiMsgSetConsoleFlags(AI_LOG_ALL)
 
# Required if the ASS file uses any SItoA shaders
#AiLoadPlugins('C:/softimage/workgroups/sitoa-3.4.0-2015/Addons/SItoA/Application/Plugins/bin/nt-x86-64')
 
AiASSLoad('C:/Users/blairs/Documents/maya/projects/default/scenes/denoiseme.0009.ass')
 
# Iterate over all shader nodes
iter = AiUniverseGetNodeIterator(AI_NODE_SHADER);
while not AiNodeIteratorFinished(iter):
    node = AiNodeIteratorGetNext(iter)
    print( "[script] AiNodeGetName: {0}".format( AiNodeGetName( node ) ) )

    ne = AiNodeGetNodeEntry( node )
#    print( "[script]  AiNodeEntryGetName: {0}".format( AiNodeEntryGetName( ne ) ) )
#    print( "[script]  AiNodeEntryGetType: {0}".format( AiNodeEntryGetType( ne ) ) )
#    print( "[script]  AiNodeEntryGetTypeName: {0}".format( AiNodeEntryGetTypeName( ne ) ) )

    if AiNodeIs( node, "standard_surface" ):
        
     
        # Plain color ID AOVs are easy
        aov_id1 = AiNodeGetStr( node, "aov_id1" )
        print( "[script]  aov_id1={0}".format( aov_id1 )  )   
        
        id1 = AiNodeGetRGB( node, "id1" )
        print( "[script]  id1={0} {1} {2}".format( id1.r, id1.g, id1.b)  )   


        # ID AOVs that use a linked shader take a bit more work     
        aov_id2 = AiNodeGetStr( node, "aov_id2" )
        print( "[script]  aov_id2={0}".format( aov_id2 )  )   
        if AiNodeIsLinked( node, "id2" ):
            id2 = AiNodeGetLink( node, "id2" )
            print( "[script]  id2={0}".format( AiNodeGetName( id2 ) ) )


AiNodeIteratorDestroy(iter)
AiEnd()

HtoA: Denoising AOVs with the Arnold Denoiser


HtoA lets you edit the layer names, and that’s how to generate the variance AOVs for denoising.

  • Add two AOVs with the same name (I used “custom” here), but give the second one a “_variance” layer name (“custom_variance).
  • Change the Pixel Filter to variance.
  • Render some EXRs (in my screenshot below, I should the part of the Arnold log that tells you that the variance AOV was rendered too)
  • In the Arnold Denoiser, put the AOV names in the Light Group AOVs text box.