Page MenuHome

Cycles: Added feature overrides
Needs ReviewPublic

Authored by Stefan Werner (swerner) on Jan 25 2019, 3:37 PM.

Details

Summary

This adds some extra options to disable certain rendering features, such as image maps, lights, shadows,
atmosphere, bump maps, etc. Intended to be used for diagnosing rendering problems.
"Inspired" by Arnold.

Cycles: More work on feature overrides

Cycles: Removed some of the unused feature overrides

Cycles: Implemented feature overrides for split kernel

Cycles: Renamed "ignore Atmosphere" to "ignore Volumes"

Diff Detail

Repository
rB Blender
Branch
feature_overrides
Build Status
Buildable 2793
Build 2793: arc lint + arc unit

Event Timeline

Stefan Werner (swerner) added a subscriber: Cycles.

We could debate whether this should be in the main tab of the Cycles options or moved to the View Layer/Override section.

Other open questions:

  • How can we support "ignore bump" in OSL without requiring shader recompilation?
  • Should "ignore lights" also ignore background emission?
  • Checking "ignore textures" can make normal mapped surfaces look bad, because the middle gray it returns is a neutral color but not a neutral normal map. Any ideas how we can fix that?
  • The way I implemented the ignore SSS option may not be optimal.

What is the purpose of this?
When one mentions "override" this is kind referencing to an ongoing project for dynamic overrides, where Cycles should not taking any actions.

If that is for troubleshooting, this should be within same panel as other troubleshooting options (which we currently call Debug panel).

I do see extra checks in kernel, which are probably introducing slowdown, especially on GPU? To me it seems such functionality should be living on a host side as much as possible.

Yes, this is for troubleshooting. My impression was that the Debug panel is intended for developers, while this is intended for users to help them diagnose rendering artifacts by quickly disabling features. Moving this to the host side is possible the problem there would be though that most options would trigger shader recompilations and device updates, which can add delays in big scenes. When it is device code, it is fairly responsive and can be used with viewport rendering.

I'll do some benchmarks later on my desktop machine, benchmarking on my laptop is useless (thermal throttling). All branches should be coherent, why do you think this would become more expensive on GPUs?

I don't think this belongs in the Debug panel, it's not just to understand if there are issues in Cycles but also for users to investigate their scene. Maybe adding Simplify > Features makes sense.

I really rather not have this overhead in the kernel. All these things could be implemented outside of the kernel as far as I know.

Fair enough, I’ll be rewriting this to be host side code then.

  • Cycles: Moved most feature override code to host side to keep kernel code simple
  • Cycles: Polygon smoothing feature override now properly updates in viewport
  • Cycles: Moved feature overrides to Simplify subcategory

With the exception of the "ignore shaders" option, everything has moved to the host side now. The eye dot normal shading for the ignore shaders mode requires kernel changes one way or the other - either an if() in the regular kernel or a separate debug kernel.