- Home /
Calculating an oblique clipping matrix / making occlusion matrix equal to projection matrix?
This problem has been eating at me for a little while now, and it's extremely frustrating. Unity calculates culling matrices incorrectly. From the matrix, it seems to generate the actual occlusion culling itself scaled proportionally to the projection matrix, at least when it comes to the near clipping plane. This can typically be fixed by simply calculating a new projection matrix with half the near clip plane distance, but my problem is unfortunately not that simple. I want to calculate an oblique culling matrix, and this near-clip-doubling is making it impossible to do as no matter what method I use to calculate the matrix, it is proportionally incorrect. I cannot figure out how to counter-compute against the multiplication that Unity uses. I am simply not familiar enough with linear algebra and matrix math to intuitively understand the problem.
Here is the code that is being used to calculate the oblique matrix
//clipPlane is a vector4 in camera space (direction + distance from camera)
Matrix4x4 CalculateObliqueOcclusion(Matrix4x4 projection, Vector4 clipPlane, float signSide) {
//signSide determines whether it is the near or the far clipping plane that moves to the clipPlane
Vector4 q = projection.inverse * new Vector4(
signSide,
signSide,
1.0f,
1.0f
);
Vector4 c = clipPlane * (2F / (Vector4.Dot(clipPlane, q)));
//Left/Right sizing
projection[2] = c.x - projection[3];
//Top/Down sizing
projection[6] = c.y - projection[7];
//Near/Far clipping plane adjustment. Used to move far clipping plane.
projection[10] = (c.z - projection[11]);
//Scale adjustment- used to move near clipping plane
projection[14] = (c.w - projection[15]);
return projection;
}
Here is a video demonstrating the issue. the clipping plane is being generated correctly off of the object, but as you can see, the clipping matrix is wildly out of control. https://i.stack.imgur.com/oD6v3.gif
Your answer
![](https://koobas.hobune.stream/wayback/20220612104946im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Render a camera multiple times in a single frame? 1 Answer
Scissor test/early rejection 2 Answers
Is it possible to override Unity camera rendering? 1 Answer
Render Single Camera to Two Displays 0 Answers
Using stencil buffer for outline effect 0 Answers