<p>You can approximate the view of a hypercentric camera with an ordinary 3D perspective camera if you are able to manipulate the projection matrix, and/or reverse the direction of the depth test.</p>
<p>In a hypercentric perspective the camera rays converge at a point in front of the camera. This is just the same as a regular perspective camera but with the direction of rays reversed. You can get the same collection of rays by placing an ordinary 3D camera at the hypercentric focal point, aimed backward toward the hypercentric camera lens. Then, you have to render the scene with the depth test reversed (or equivalently, swap the near and far planes in the projection matrix) so that surfaces farthest from the camera (closest to the hypercentric lens) will occlude others. You may also need to flip the direction of the backface culling test.</p>
<p>This should produce a hypercentric perspective. The caveat to this is that it won't render anything farther away than the hypercentric focal point (contrary to a real hypercentric camera). That's because those points are behind the perspective camera, so will get clipped during rasterization. This could however be addressed by rendering the scene in two passes: first draw everything beyond the hypercentric focal point with a camera facing forward (and turned upside down), and then clear the depth buffer and draw everything in front of the hypercentric focal point with the camera facing backward as described above.</p>
<p>It's unlikely that any of this can be accomplished in Unity with the default camera model as it's not designed for these unusual situations. You'll have to get deeper in, to a point where you can manipulate render passes, the depth buffer, and the projection matrix.</p>

CC BY-SA 4.0
2021-09-12T02:23:34.980Z
2021-09-12T02:23:34.980Z
Nathan Reed
<p>The answer is yes.</p>
<p>You need 2 things:</p>
<ul>
<li>View space coordinates of the object</li>
<li>Projection function for the hypercentric perspective camera.</li>
</ul>
<p>The second one can be found in <a href="https://link.springer.com/article/10.1007/s00138-019-01032-w" rel="nofollow noreferrer">here</a>.</p>
<p>The overview of the model
<a href="https://i.sstatic.net/vnlE1.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/vnlE1.png" alt="enter image description here" /></a></p>
<p>Here is a small discription in case the link goes away.</p>
<ul>
<li><p>You project the point using this <span class="math-container">$\begin{aligned} \left( \begin{array}{@{}c@{}} x_\mathrm {u} \\ y_\mathrm {u} \end{array} \right) = \frac{c}{z_k} \left( \begin{array}{@{}c@{}} x_k \\ y_k \end{array} \right) , \end{aligned}$</span> where components with <span class="math-container">$k$</span> represents the coordiantes of the point in camera space.</p>
</li>
<li><p>You then model the lens distortion with <span class="math-container">$\begin{aligned} \left( \begin{array}{@{}c@{}} x_\mathrm {d} \\ y_\mathrm {d} \end{array} \right) = \frac{2}{1+\sqrt{1-4\kappa r_\mathrm {u}^2}} \left( \begin{array}{@{}c@{}} x_\mathrm {u} \\ y_\mathrm {u} \end{array} \right) , \end{aligned}$</span> where <span class="math-container">$r_\mathrm {u}^2=x_\mathrm {u}^2 + y_\mathrm {u}^2$</span></p>
</li>
<li><p>Then you transform the distorted points to image space with <span class="math-container">$\begin{aligned} \left( \begin{array}{@{}c@{}} x_\mathrm {i} \\ y_\mathrm {i} \end{array} \right) = \left( \begin{array}{@{}c@{}} x_\mathrm {d}/s_x+c_x \\ y_\mathrm {d}/s_y+c_y \end{array} \right) , \end{aligned}$</span> where where <span class="math-container">$s_x$</span> and <span class="math-container">$s_y$</span> are the pixel pitch on the sensor and <span class="math-container">$(_,_)^⊤$</span> denotes the principal point.</p>
</li>
</ul>
<p>The description here is very brief, the paper in the link explains various transformations for arriving to the camera space as well; plus other topics such as camera calibration and stereo matching with hypercentric perspective cameras.</p>

CC BY-SA 4.0
2021-09-12T01:27:34.393Z
2021-09-12T01:27:34.393Z
Kaan E.
<p>I came across some Non-Euclidean Games which involve Hyperbolic Spaces, Spherical Spaces, Portals, etc. And, I noticed that they give quite deep feel of what Non-Euclidean Spaces feel like. So, I was thinking whether space rendering was possible for other unconventional perspectives, for example, <strong>Hypercentric Perspective</strong> (Objects that are farther away from the lens produce larger images than objects that are closer to the lens, contrary to the human eye where farther-away objects always appear smaller.) Due to physical restrictions, only a handful of images for Hypercentric Perspective exists on the internet, but these should give some idea:</p>
<p><a href="https://i.sstatic.net/dxiGG.jpg" rel="noreferrer"><img src="https://i.sstatic.net/dxiGG.jpg" alt="enter image description here" /></a></p>
<p><a href="https://i.sstatic.net/TJkxV.jpg" rel="noreferrer"><img src="https://i.sstatic.net/TJkxV.jpg" alt="enter image description here" /></a></p>
<p>Now, my question is how to render Hypercentric Perspective in preferably 3 Dimensional Space?</p>
<p>I tried doing this in Unity by varying the physical parameters of the virtual physical camera, but  it was no success. What can be the other way of approaching the problem? Preferably, the optimal approach? I'm very new to Computer Graphics so please pardon me if I missed something obvious here.</p>
<p>Please help me here.</p>
<p>Thank you.</p>

<rendering><physically-based><perspective><physics><unity>
Rendering Hypercentric Perspective
Monster196883
# Rendering Hypercentric Perspective

(Asked by: username_0 on 2021-09-11)

I came across some Non-Euclidean Games which involve Hyperbolic Spaces, Spherical Spaces, Portals, etc. And, I noticed that they give quite deep feel of what Non-Euclidean Spaces feel like. So, I was thinking whether space rendering was possible for other unconventional perspectives, for example, **Hypercentric Perspective** (Objects that are farther away from the lens produce larger images than objects that are closer to the lens, contrary to the human eye where farther-away objects always appear smaller.) Due to physical restrictions, only a handful of images for Hypercentric Perspective exists on the internet, but these should give some idea:

[![enter image description here](https://i.sstatic.net/dxiGG.jpg)](https://i.sstatic.net/dxiGG.jpg)

[![enter image description here](https://i.sstatic.net/TJkxV.jpg)](https://i.sstatic.net/TJkxV.jpg)

Now, my question is how to render Hypercentric Perspective in preferably 3 Dimensional Space?

I tried doing this in Unity by varying the physical parameters of the virtual physical camera, but it was no success. What can be the other way of approaching the problem? Preferably, the optimal approach? I'm very new to Computer Graphics so please pardon me if I missed something obvious here.

Please help me here.

Thank you.

**Tags:** rendering, physically-based, perspective, physics, unity


---

## 2 answers

### Answer by username_1 on 2021-09-12. Score: 3 | Accepted answer

You can approximate the view of a hypercentric camera with an ordinary 3D perspective camera if you are able to manipulate the projection matrix, and/or reverse the direction of the depth test.

In a hypercentric perspective the camera rays converge at a point in front of the camera. This is just the same as a regular perspective camera but with the direction of rays reversed. You can get the same collection of rays by placing an ordinary 3D camera at the hypercentric focal point, aimed backward toward the hypercentric camera lens. Then, you have to render the scene with the depth test reversed (or equivalently, swap the near and far planes in the projection matrix) so that surfaces farthest from the camera (closest to the hypercentric lens) will occlude others. You may also need to flip the direction of the backface culling test.

This should produce a hypercentric perspective. The caveat to this is that it won't render anything farther away than the hypercentric focal point (contrary to a real hypercentric camera). That's because those points are behind the perspective camera, so will get clipped during rasterization. This could however be addressed by rendering the scene in two passes: first draw everything beyond the hypercentric focal point with a camera facing forward (and turned upside down), and then clear the depth buffer and draw everything in front of the hypercentric focal point with the camera facing backward as described above.

It's unlikely that any of this can be accomplished in Unity with the default camera model as it's not designed for these unusual situations. You'll have to get deeper in, to a point where you can manipulate render passes, the depth buffer, and the projection matrix.


---

### Answer by username_2 on 2021-09-12. Score: 2

The answer is yes.

You need 2 things:

* View space coordinates of the object
* Projection function for the hypercentric perspective camera.

The second one can be found in [here](https://link.springer.com/article/10.1007/s00138-019-01032-w).

The overview of the model
[![enter image description here](https://i.sstatic.net/vnlE1.png)](https://i.sstatic.net/vnlE1.png)

Here is a small discription in case the link goes away.

* You project the point using this $\begin{aligned} \left( \begin{array}{@{}c@{}} x\_\mathrm {u} \\ y\_\mathrm {u} \end{array} \right) = \frac{c}{z\_k} \left( \begin{array}{@{}c@{}} x\_k \\ y\_k \end{array} \right) , \end{aligned}$ where components with $k$ represents the coordiantes of the point in camera space.
* You then model the lens distortion with $\begin{aligned} \left( \begin{array}{@{}c@{}} x\_\mathrm {d} \\ y\_\mathrm {d} \end{array} \right) = \frac{2}{1+\sqrt{1-4\kappa r\_\mathrm {u}^2}} \left( \begin{array}{@{}c@{}} x\_\mathrm {u} \\ y\_\mathrm {u} \end{array} \right) , \end{aligned}$ where $r\_\mathrm {u}^2=x\_\mathrm {u}^2 + y\_\mathrm {u}^2$
* Then you transform the distorted points to image space with $\begin{aligned} \left( \begin{array}{@{}c@{}} x\_\mathrm {i} \\ y\_\mathrm {i} \end{array} \right) = \left( \begin{array}{@{}c@{}} x\_\mathrm {d}/s\_x+c\_x \\ y\_\mathrm {d}/s\_y+c\_y \end{array} \right) , \end{aligned}$ where where $s\_x$ and $s\_y$ are the pixel pitch on the sensor and $(\_,\_)^⊤$ denotes the principal point.

The description here is very brief, the paper in the link explains various transformations for arriving to the camera space as well; plus other topics such as camera calibration and stereo matching with hypercentric perspective cameras.


---

