From e11d22a6b751c750c40226cb027e7805adb7d4e4 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Tue, 22 Jan 2013 11:18:41 +0000 Subject: Matcap support in 3D Viewport. Full log is here: http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.66/Usability#Matcap_in_3D_viewport Implementation notes: - Matcaps are an extension of Solid draw mode, and don't show in other drawmodes. (It's mostly intended to aid modeling/sculpt) - By design, Matcaps are a UI feature, and only stored locally for the UI itself, and won't affect rendering or materials. - Currently a set of 16 (GPL licensed) Matcaps have been compiled into Blender. It doesn't take memory or cpu time, until you use it. - Brush Icons and Matcaps use same code now, and only get generated/allocated on actually using it (instead of on startup). - The current set might get new or different images still, based on user feedback. - Matcap images are 512x512 pixels, so each image takes 1 Mb memory. Unused matcaps get freed immediately. The Matcap icon previews (128x128 pixels) stay in memory. - Loading own matcap image files will be added later. That needs design and code work to get it stable and memory-friendly. - The GLSL code uses the ID PreviewImage for matcaps. I tested it using the existing Material previews, which has its limits... especially for textured previews the normal-mapped matcap won't look good. --- source/blender/gpu/shaders/gpu_shader_material.glsl | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'source/blender/gpu/shaders') diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl index e89be91c89a..45e7831d20d 100644 --- a/source/blender/gpu/shaders/gpu_shader_material.glsl +++ b/source/blender/gpu/shaders/gpu_shader_material.glsl @@ -2256,3 +2256,18 @@ void node_output_material(vec4 surface, vec4 volume, float displacement, out vec result = surface; } +/* ********************** matcap style render ******************** */ + +void material_preview_matcap(vec4 color, sampler2D ima, vec3 N, out vec4 result) +{ + vec2 tex; + + if (N.z < 0.0) { + N.z = 0.0; + N = normalize(N); + } + + tex.x = 0.5 + 0.49 * N.x; + tex.y = 0.5 + 0.49 * N.y; + result = texture2D(ima, tex); +} -- cgit v1.2.3