Page MenuHome

Blender 2.78b Cycles compute device selection UI issue
Closed, ResolvedPublic

Description

System Information
Linux Mint 18.1 Cinnamon 64bit
GTX 580m

Blender Version
2.78b (3c043732d3f)

Short description of error
Cycles seemingly hidden CPU/GPU compute device UI selection

Exact steps for others to reproduce the error

  • Launch Blender 2.78b (without previously created config files)
  • Select Cycles render engine
  • Blender UI CPU/GPU compute device option remains selectable, even though greyed out, and won't actually change compute devices until User Preferences compute device is chosen, see screen capture

Is this the expected behaviour, or should it be the same as 2.78a where CPU/GPU compute device selection is hidden until a GPU compute device is selected within User Preferences? Current 2.78b implementation could be confusing for newer users.

Alternatively, until a GPU compute device is selected within User Preferences, it may help if only CPU is available as an option within Blenders UI?


User Preferences observation, selected GPU devices appear same UI grey colour as above mentioned (seemingly hidden) Blender UI CPU/GPU compute device selection.
Would check boxes be clearer for quick visual reference of selected GPU devices?

Thank you all developers for your hard work, very much appreciated!

Edit: Second attempt to help clarify

Event Timeline

Brecht Van Lommel (brecht) changed the task status from Unknown Status to Unknown Status.Feb 9 2017, 11:30 PM
Brecht Van Lommel (brecht) claimed this task.

It's by design, in the Blender UI such greyed out / low contrast options always mean that the option has no effect, and we still generally allow users to change them. I think this is consistent.

It was done so that user can look at the tooltip and discover that they have to set up their GPU in the user preferences, which is a common confusion among first time users.

I think that Hidden condition of UI is not only written.
It works properly in 2.78a.

2.78a(ui.py)

device_type = context.user_preferences.system.compute_device_type
 if device_type in {'CUDA', 'OPENCL', 'NETWORK'}:
     layout.prop(cscene, "device")

I intentionally switched it from hiding the button to showing greyed out, it's not an issue in the code, though some might disagree with the design choice.

TBH I find the behavior of .active utterly confusing, I much prefer using .enabled. A button should either be disabled or enabled, not some state in-between.

If you changed it like that intentionally, I think that there is not the problem.
However, I can choose it as the gray out.
If it is selectable, do you not think that a chosen thing is used?

It's been a Blender UI behavior for a long time, when we did the initial button layout for 2.5 the convention was to only use .enabled if strictly necessary (when you could end up in an invalid state or so). I've always seen .active as more convenient than confusing, but I can see how it could seem strange.

The advantage is that you can change options in any order, and edit options that might matter but have no effect right now (due to animation, rigging, ..). It could be interpreted as trying to do the non-modal, non-blocking thing as much as possible. In this case for example it might be useful to enable GPU compute to send it to another computer for rendering, even if the computer you are working on can only do CPU rendering.

Not that I care particularly strongly about this, if the UI teams like to change it that's fine with me, just explaining the reasoning.

Thank you all for taking time to reply, and explain usage scenarios.

Since compute device selection now uses .active by default, would it help remove possible confusion for users if CPU always appears .enabled (since it always is), and GPU appears .active until enabled in user perseverances? See screen capture mockup.

@Brecht Van Lommel (brecht), Considering render farm usage, and GPU option appearing .active due to lack of local GPU compute device, it may help if the tool-tip is updated to reflect this usage scenario?

Tool-tip suggestions, also tried more condensed versions.

Current
Use GPU compute device for rendering, configured in the system tab in the user preferences

Proposed
Use GPU compute device for rendering, configured in the system tab of user preferences

Use GPU compute device for rendering, configured in user preferences (system tab)

Use GPGPU for rendering, configured in user preferences (system tab)

Proposed, helping explain various usage scenarios

Use GPU compute device for rendering, configured in user preferences (system tab).
Set also for GPU enabled render farms, even if local GPU compute device is unavailable

or

Use GPU compute device for rendering, configured in user preferences (system tab).
Set also if using a GPU enabled render farm, even if local GPU compute device is unavailable

I've now changed the greying out behavior to what you proposed, I agree that's more clear. I don't think the extra detail in the tooltip is needed, it's too specific an example.