arnold-usd icon indicating copy to clipboard operation
arnold-usd copied to clipboard

Default lighting not showing up in Solaris and Usdview

Open sirpalee opened this issue 4 years ago • 2 comments

Describe the feature you'd like When using the render delegate in Solaris, the default camera light does not affect the scene. This is causing confusion, as assigning a standard surface to any object will result in black renders without a light, yet in other render delegates, like karma, there is a default light.

sirpalee avatar Jun 15 '20 03:06 sirpalee

Usdview and Solaris handle default lighting differently.

Usdview has two options in the menu, enabling a camera and a dome light. When these lights are enabled, a vector of GlfSimpleLights is passed to UsdImaging, converted to Hydra primitives by the HdxTaskController. However, the _simpleLightTask is used to convert these lights to hydra primitives. However, this task is only created when HdStorm is the rendering backend, which means we won't get this information in the Arnold render delegate.

In Solaris, when the camera light is enabled, there is no hydra primitive created, but a Houdini specific render setting is passed to the render delegate via HdRenderDelegate::SetRenderSetting. It's called houdini:headlight, which tells the render delegate if a headlight should be displayed or not. Based on this value, the render delegate can create a distant light aligned with the active camera. This is relatively straightforward to implement. However, updating a distant light when the camera moves would disable Arnold's fast node updates and causing a significant delay on complex enough scenes (200-300ms with the ALAB scene) when using the GPU backend.

sirpalee avatar Aug 20 '21 04:08 sirpalee

Issue synced internally to ARNOLD-13250