Hey Silvertongue!
So I was recently a part of a CS1.6 mapping contest where team TWHL pushed the limits of goldsource -
http://twhl.info/vault.php?map=6044 - I was lead optimizer.
Here are some things I've learned:
1)
definitely null every face you don't need - Some people have null as a base texture and then put a texture on the seen faces. really, it's up to you. Keep in mind that any face touching the void will be nulled at compile, but it's always good practice.
2)
func_illusionary > func_detail / func_wall - Why? - Func_wall and func_detail create clip nodes even if they're set to be non solid. They render the same regardless. And if you have super detailed geometry, just clip over it
EXAMPLE. If you have some world geometry that's in an inaccessible area, take parts, and func_illusionary them. Trust me; I've ran the tests, and If you don't believe me, I"ll do some more and share the results.
Behind the func_illusionaries, use a large-scaled texture (Scale: 5-10) to block vis. You
could use null, but if you have any visible parts behind your illusionary details, you'll get the hall of mirrors.
3)
hint brushes are your friend - At one point during the level development, we were hitting around ~10K wpolys (Almost the entire map was rendered at points even thought the player couldn't 'see' it. Don't quote me on the exact w_poly count though, it's been a while and I don't remember the exact number) I put a hint brush across every major room threshold and even split large vertical rooms in half or thirds. I managed to take the W_polys down about 60%!
4)
Modern computers can handle GldSrc easily but I'd recommend blocking out rooms first and then detailing inward from there. The worst thing is when you have an insanely detailed map and you have to go back and clean it up. Mapping clean from the start will save you time down the road. "If you have time to go back and fix something, you have time to do it right the first time" - Probably every dad ever.