There was a serious but with the portal traversal code that for some reason only showed up very rarely. I was recomputing a new projection matrix for each portal in view, in order to calculate a smaller frustum, but then I was passing this matrix down during recursion. This created a problem when projecting the portals to NDC space, as the space changed every time there was a portal traversal. Just keeping the main projection matrix fixed this.
I also stopped calling my frustum culling method ignoring the near plane, and instead added a method that uses the view position as the near plane position. This should provide better culling to things behind the viewer.
Additionaly, I found the anti-portals were only culling from one side, so I added code to find the distance of the camera to the plane of the anti-portal. If too small, I skip the anti-portal, as it wouldn't be good for culling and also may create a degenerate frustum. If the distance to the portal is negative, I create the portal planes with opposite winding order triangles, so the anti-portals work front & back.
Yesterday I attempted to portalize the crypt level, and was having a hard time with it, so I made some much simpler user interface methods. Now you can select several triangles to define the bounding box of where you want the cell, portal or anti-portal to go, then hit a button and the appropriate viz item will be created based on the box you specify.
Next I will add a button to shrink cells so they don't overlap when they're not supposed to.
I also changed the water shader to be a bit more realistic with the fresnel term, and fix it when a large part of the water was in shadow.
Today I've made some editor improvements, and am going to mainly work on gameplay-related things, such as adding key support to doors, etc.