# Silhouette in viewport while sculpting

Is there a way to display an object in the viewport in one solid color against the background? In ZBrush it is frequently used to help judge the outside shapes of the model without internal details distracting you.

I mean interactive viewport mode, while you can still sculpt, not make a one-off rendering. An example in use is here:

https://youtu.be/riyDQBJxSBQ?t=55

Assign the object an emissive material the color you want. Set the world background color to something you like, if you like.

Switch the view mode of your window to'Material'. If you want the new background color too, you'll have switch to 'Rendered'. I find a pie menu (with gestures) helps speed up the switch.

If you want a new background color without rendering, you can change that in User Preferences 'Themes'. If you need a quick switch of background color too, that's scriptable... see this BSE answer.

• One old trick for changing colors without too much faff is to animate them. Then you can just leave the timeline open at the bottom and scrub to the right color combination. – Robin Betts Mar 24 '18 at 18:26

Unfortunately GUI matcaps are compiled into Blender and not customizable, otherwise an easy way would have been to just add a custom matcap with only blacks and no specular.

One way to go could be to temporarily turn off the OpenGL lights in the viewport.

To do this (thanks to @batFINGER for improving my script!):

Open a Text window, create a script and save it in a text block nolights_button.py.

import bpy
from bpy.props import BoolProperty
saved_solid_lights = bpy.context.user_preferences.system.solid_lights[2].diffuse_color.copy()

def lightsout(self, context):
solid_lights = context.user_preferences.system.solid_lights
solid_lights[0].use = not self.lights_out
solid_lights[1].use = not self.lights_out
solid_lights[2].diffuse_color = (0, 0, 0) if self.lights_out else saved_solid_lights

bpy.types.WindowManager.lights_out = BoolProperty(default=False, update=lightsout)

def draw_button(self, context):
wm = context.window_manager
self.layout.prop(wm, "lights_out", toggle=True)



Now, if you click "Run Script", a button will be added to the 3D Window header ("lights_out") that allows you to turn on and off the OpenGL lights, thus leaving you with just silhouettes.

You can hide the text window, but you'll have to run the script again if you close and reopen the file.

• Interesting. Could make this an operator (and hence give it a keymap) and also save the diffuse color user pref. – batFINGER Mar 24 '18 at 17:59
• Something like this is quick and easy pasteall.org/892176/python adds a button to 3d view header. (feel free to use in your ans) – batFINGER Mar 24 '18 at 19:00
• @batFINGER I've added your contribution. thanks again, – Nicola Sap Mar 24 '18 at 19:50
• NP The register checkbox on text editor will autorun any script with a .py extension on file load. – batFINGER Mar 24 '18 at 19:59

Hi, I was looking for a solution for this and now I configure the Viewport shading in one window of blender with this configurantion, turning off specular lights and using a Single for color and choose black, it Work nice for me and maybe can help someone.

• In Blender 2.8x and later you just need to select "Flat" instead of Studio or MatCap and that solves the problem, no need to fiddle with specular lights. – jubi Sep 22 '20 at 15:16

The easiest way I found is to set the Viewport shading to flat which is to Click on the dropdown in the top right corner of the viewport where there is an option to change modes from solid to Render and others. You can open the dropdown and change the Studio display to Flat display.