Backface cull script

I actually signed up here to ask someone about how to enable backface culling in Blender’s viewport (useful for interior modelling, among other things).

Since then I learnt it’s a feature that Blender is missing, and I just thought I’d post my solution here in case anyone else needed this feature.

Link: (I had to add .txt so my server didn’t try to execute it)

Let me know if you think it’s useful / have any problems


A fairly simple way is to use “Select Group” menu.

  • Threshold of 0.5 in edit tools.
  • Enter EditMode
  • Face’s Edit Only,
  • Select a face that faces the camera
  • Shift+G - Similar normal
  • dosnt take perspective into account so its not ideal.

If you use the script I posted, it turns on OpenGL’s own backface culling, so it works on all objects, and you don’t need to do anything when you move or rotate the camera.

Wanna halve or greatly speed up your render times?
Tired of 6 hour render times?
Did you forget this script?
What a Powerful, tiny little script.
Thank you.

just to clarify, this script does not speed up your rendering. It only has an effect on the blender interface. That siad, it’s an awesome script, thanks :smiley:

edit: to elaborate on my post and to answer meta*'s post below: the script is an internal OpenGL API call, there is no way that is will have any impact on the blender renderer speed, which is not based on OpenGL, like you said, it’s probably something else that caused the speedup. the blender 3d interface IS opengl based, that’s where you’ll see the performance improvement.

for fun, try replace the line:




this will cull all forward looking faces, giving you a cutaway view of your model. BUT be warned, the blender menu is also front facing, enabling this option will make all menus disappear.

I’m confused…
But thats not unusual. Still useful for large scenes.
I enabled backface cull as a scriptlink on render and framechanged.
The awsome little script turned a 9 second render into a 4.5 second render.
Must have been the internet slowed the first render down.
Sorry for bump.

I post here a more “didactical” (hence not optimized :slight_smile: ) script for selecting frontfacing faces.


You can hide them to work on interior of your mesh or invert the selection to do backface culling.


Thanks for that. I will test it soon.
Then I will post a link to this thread in the wiki so everyone can see why
I Should think before I post and triple check everything.
Still I got another good script out of it…
Thanks M.A.

Doesn’t work for me.


name of display: :0.0
display: :0  screen: 0
direct rendering: Yes
server glx vendor string: NVIDIA Corporation
server glx version string: 1.4
server glx extensions:
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_SGIX_fbconfig,
    GLX_SGIX_pbuffer, GLX_SGI_video_sync, GLX_SGI_swap_control,
client glx vendor string: NVIDIA Corporation
client glx version string: 1.4
client glx extensions:
    GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_visual_info,
    GLX_EXT_visual_rating, GLX_EXT_import_context, GLX_SGI_video_sync,
    GLX_NV_swap_group, GLX_NV_video_out, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer,
    GLX_SGI_swap_control, GLX_NV_float_buffer, GLX_ARB_fbconfig_float
GLX version: 1.3
GLX extensions:
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_SGIX_fbconfig,
    GLX_SGIX_pbuffer, GLX_SGI_video_sync, GLX_SGI_swap_control,
    GLX_ARB_multisample, GLX_ARB_get_proc_address
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce4 Ti 4400/AGP/SSE/3DNOW!
OpenGL version string: 1.5.6 NVIDIA 87.76
OpenGL extensions:
    GL_ARB_depth_texture, GL_ARB_imaging, GL_ARB_multisample,
    GL_ARB_multitexture, GL_ARB_occlusion_query, GL_ARB_pixel_buffer_object,
    GL_ARB_point_parameters, GL_ARB_point_sprite, GL_ARB_shadow,
    GL_ARB_shader_objects, GL_ARB_shading_language_100,
    GL_ARB_texture_border_clamp, GL_ARB_texture_compression,
    GL_ARB_texture_cube_map, GL_ARB_texture_env_add,
    GL_ARB_texture_env_combine, GL_ARB_texture_env_dot3,
    GL_ARB_texture_mirrored_repeat, GL_ARB_texture_rectangle,
    GL_ARB_transpose_matrix, GL_ARB_vertex_buffer_object,
    GL_ARB_vertex_program, GL_ARB_vertex_shader, GL_ARB_window_pos,
    GL_S3_s3tc, GL_EXT_texture_env_add, GL_EXT_abgr, GL_EXT_bgra,
    GL_EXT_blend_color, GL_EXT_blend_minmax, GL_EXT_blend_subtract,
    GL_EXT_compiled_vertex_array, GL_EXT_Cg_shader,
    GL_EXT_draw_range_elements, GL_EXT_fog_coord, GL_EXT_multi_draw_arrays,
    GL_EXT_packed_pixels, GL_EXT_paletted_texture, GL_EXT_pixel_buffer_object,
    GL_EXT_point_parameters, GL_EXT_rescale_normal, GL_EXT_secondary_color,
    GL_EXT_separate_specular_color, GL_EXT_shadow_funcs,
    GL_EXT_shared_texture_palette, GL_EXT_stencil_wrap, GL_EXT_texture3D,
    GL_EXT_texture_compression_s3tc, GL_EXT_texture_cube_map,
    GL_EXT_texture_edge_clamp, GL_EXT_texture_env_combine,
    GL_EXT_texture_env_dot3, GL_EXT_texture_filter_anisotropic,
    GL_EXT_texture_lod, GL_EXT_texture_lod_bias, GL_EXT_texture_object,
    GL_EXT_timer_query, GL_EXT_vertex_array, GL_HP_occlusion_test,
    GL_IBM_rasterpos_clip, GL_IBM_texture_mirrored_repeat,
    GL_KTX_buffer_region, GL_NV_blend_square, GL_NV_copy_depth_to_color,
    GL_NV_depth_clamp, GL_NV_fence, GL_NV_fog_distance,
    GL_NV_gpu_program_parameters, GL_NV_light_max_exponent,
    GL_NV_multisample_filter_hint, GL_NV_occlusion_query,
    GL_NV_packed_depth_stencil, GL_NV_pixel_data_range, GL_NV_point_sprite,
    GL_NV_register_combiners, GL_NV_register_combiners2,
    GL_NV_texgen_reflection, GL_NV_texture_compression_vtc,
    GL_NV_texture_env_combine4, GL_NV_texture_rectangle, GL_NV_texture_shader,
    GL_NV_texture_shader2, GL_NV_texture_shader3, GL_NV_vertex_array_range,
    GL_NV_vertex_array_range2, GL_NV_vertex_program, GL_NV_vertex_program1_1,
    GL_SGIS_generate_mipmap, GL_SGIS_multitexture, GL_SGIS_texture_lod,
    GL_SGIX_depth_texture, GL_SGIX_shadow, GL_SUN_slice_accum
glu version: 1.3
glu extensions:
    GLU_EXT_nurbs_tessellator, GLU_EXT_object_space_tess

Doesn’t work for me either. I have an ATI card.

To the people who say it doesn’t work: do you mean my script or ao2’s script?

Anyway, I’ve made a patch to add this as an option in the view properties box. Hopefully it’ll get accepted into CVS.

no longer working for me too… it could be the new nvidia driver… since I am still using the exact same blender version.