# Python: How to select only outer faces that are exposed to light via script?

EDIT: Since it's impossible to select only the outer faces using Blender's UI tools, I'm looking for a Python solution that will check each face to see if it does have a certain degree of light (light_exposure > 0) and select it. We know that all the ugly geometry and internal faces inside have zero exposure to light (light_exposure <= 0) and thus will be excluded from this algorithm.

I've looked into this question and have fixed the geometry on the outside to be perfectly watertight, and now want to select all outer faces essentially exposed to light and then invert the selection to delete the insides. But for some reason the Box Selection selects faces that are not visible on the outside which I think is incorrect behavior?

I've searched all over the web but the linked selections with L will not work. There must be some algorithm to be able to select faces that are exposed to the outside world or exposed to light. It looks like the Box Selection tool selects all faces with edges exposed but an exposed edge doesn't mean an exposed face. Is there someway to tell the selection to ignore faces with only exposed edges? I think this feature is very important and useful.

A current workaround is to go into Vertex Select Mode and manually select all vertices with the Box Select and Circle Select tools but it is a tedious task especially if you've got alot of intricate geometry around the surface so you might not perfectly get all vertices selected. So there are times where it is not feasible especially with this model from the aforementioned question link. Or maybe there's a python script solution?

I have an interesting issue fixed where several instances of 2 faces were sharing the same 4 vertices using this link. I have uploaded a new file with no overlapping faces but still the same issue as demonstrated in the gif files.

• but you know this works with default cube, right? so i would suggest to provide the blend file ;) Dec 24, 2022 at 9:08
• did u try "only" face select mode? it looks like you have edges selected as well - but even that works with default cube as expected Dec 24, 2022 at 9:10
• Hi Chris. Yes it is only face select mode. The edge you see is the inside face that gets incorrectly selected as well. I attached the fixed water-tight mesh. Try selecting the roof with box select in face select mode and then see on the inside, it gets selected as well as demonstrated in the gif. Dec 24, 2022 at 9:22
• That's wierd! Try enabling Face Orientation, The outside is fine, but if you look at the roof from the inside half of the faces appear to be inverted! Selecting one individual face from the inside and deleting it doesn't show as a hole from the outside and some of them appear to span two faces vertically. It also looks as if there's Z-fighting looking from the inside but attempting to merge vertices finds nothing. Selecting and moving an internal face moves the outside geometry too! :^( Dec 24, 2022 at 9:42
• John is right. The geometry of the roof isn't clean. There are double faces. I think that's why Blender is confused and has these selecting problems. [1]: i.stack.imgur.com/Q6GT5.gif Dec 24, 2022 at 12:52

I would remove the inner faces like this.

• Choose edge selection. 2
• Box/Circle select visible edges.
• Choose face mode and hide the faces. 3H
• Select all and delete the faces. AX > Faces

Only the outer faces remain.

• Hi thank you for your response. Unfortunately I would love to have a general solution to select all the outer faces only with a python algorithm. I think this is possible with some light_exposure > 0 test since internal faces have zero light exposure or some other algorithm? Dec 27, 2022 at 14:23
• Sorry I should have specified it in the title that i'm looking for a python solution since the manaul selection process would not be feasible since there are way too many faces to select in the model. I updated the title. Sorry again.. Dec 27, 2022 at 14:27
• Don't worry. The python tag should be enough. I understood what you are looking for, but this answer is a bit of a frame challenge, that may be helpful for users who reach this question via the search. If you think it is not fitting or doesn't suit the question you can always downvote, that way useful answers rise to the top. =) Dec 27, 2022 at 15:01
• Hey thats a good point! gonna downvote it right now hahaha just kidding. My workaround was selection in vertex mode and now with this answer I realized that Edge selection is even more convenient as the workaround so thanks for that! I hope though i can find a python solution. That be sooo powerful since I could easily eliminate internal faces for any mesh! personally i think blender should have such a built-in selection feature. Dec 27, 2022 at 15:21