Camera 光模拟器光线跟踪器透镜和传感器的设计与定位 我在C++中为3D场景创建了一个光模拟器,现在是康奈尔盒子。这是我正在做的一个图形课程的项目,我不想让它变快,仅仅渲染一个像样的图像对我来说是很好的,即使它需要几个小时。我想演示全局照明和自由度

Camera 光模拟器光线跟踪器透镜和传感器的设计与定位 我在C++中为3D场景创建了一个光模拟器,现在是康奈尔盒子。这是我正在做的一个图形课程的项目,我不想让它变快,仅仅渲染一个像样的图像对我来说是很好的,即使它需要几个小时。我想演示全局照明和自由度,camera,render,simulation,raytracing,light,Camera,Render,Simulation,Raytracing,Light,光线不是常规的光线跟踪器,而是从点光源发射,在场景中的几何体上反弹,最终击中光传感器(在3D环境中为矩形),并根据光线击中传感器的位置,增加屏幕上该像素的强度 在传感器和场景之间,有一个镜头,我试图设计并正确定位,以模拟摄像机。透镜也是平面,但光线击中透镜并发生折射时的法线是根据薄球面透镜计算的 我当前的设置是从镜片的公式推导出来的,我在维基百科上找到了: The Cornell box: x, y and z in between -1 and 1 Sensor dimensions: 0.2

光线不是常规的光线跟踪器,而是从点光源发射,在场景中的几何体上反弹,最终击中光传感器(在3D环境中为矩形),并根据光线击中传感器的位置,增加屏幕上该像素的强度

在传感器和场景之间,有一个镜头,我试图设计并正确定位,以模拟摄像机。透镜也是平面,但光线击中透镜并发生折射时的法线是根据薄球面透镜计算的

我当前的设置是从镜片的公式推导出来的,我在维基百科上找到了:

The Cornell box: x, y and z in between -1 and 1
Sensor dimensions: 0.2 x 0.2 (too large?)
Sensor position: 0, 0, -2.9
Sensor resolution: ~ 150 x 150 px
Lens dimensions: 0.4 x 0.4 (rectangular shape for now, spherical normals)
Lens position: sensor position + (0, 0, 0.1037) (in front of sensor)
Lens IOR: 1.52 (glass)
Lens focal length: 0.1
Lens radius: 0.104
所看到的主要是点光源,未聚焦


理想情况下,我希望-5到-5之间的框z的一半被聚焦,这样自由度就可以被看到。我的问题是:如何校准传感器和镜头以显示图像?我不认为我可以把镜头和传感器做得太小,那么几乎所有的光线都会被丢弃,因为它们不会击中相机,从而使渲染在计算上不可行。

我想你要问的是:把相机放在哪里?如果你知道镜头的焦距,也就是说,镜头后面平行入射光线的聚焦距离,那么你就可以直接知道视野并放置相机,这样场景就被正确地框起来了。这就是你要问的吗


如果是这样,请计算相交距离,其余部分将就位。

传感器与针孔相机位于同一位置。当我使用常规光线跟踪器进行渲染时,渲染图像确认相机的位置至少正常。我怀疑镜头和/或传感器可能太大,导致景深太窄,几乎整个场景都变得模糊。光源看起来不应该太大,因为它是一个全向点光源。如果你使用了一个真正的针孔模型,即光线穿过针孔,图像被渲染为上下颠倒,然后调整透镜曲率或折射率,使其焦距与针孔到图像平面的距离相同。然后将镜头放在针孔曾经所在的位置。要对焦,要么将镜头移向被摄对象,要么实际上减小镜头的大小,提高虚拟f/stop。用放大镜和直尺,或任何像单反相机或测距仪这样的手动对焦相机,几分钟的时间,在这里可能会有所启发。