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)
bpy.types.VIEW3D_HT_header.prepend(draw_button)
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.