图3-2光子反射过程图3-3前向光线追踪现在从计算机图形的角度来看待这种情况。在这种情况下,发射的光子将撞击图形平面上许多像素的一个,并将该点的亮度增加到大于零的值。这种技术称为前向光线追踪,因为我们是沿着光子从光源向观察者前进的路径。此外,我们也不能保证物体的表面被光子完全覆盖,这是这项技术的主要缺点。另外,正如我们将看到的,射线追踪器中最昂贵的任务是找到射线几何交点。......
2023-10-17
1)对传统的逆向光线追踪的改进
传统的逆向光线追踪算法有两个突出的缺点,即表面属性的单一和不考虑漫反射[24]。我们不难通过模型的修正来缓解这两个问题。我们首先认为一个表面的属性可以是混合的,比如它有20%的成分是反射,30%的成分是折射,50%的成分是漫反射。这里的百分比可以这样理解,当一根光线打在该表面后,它有20%的概率发生反射,30%的概率发生折射,50%的概率发生漫反射。然后通过多次计算光线跟踪,每次按照概率决定光线的反射属性,这样它就把漫反射也考虑了进去。具体的算法如下[25]:
(1)从视点出发,经过投影屏幕上的每一个像素向场景发射一根虚拟的光线。
(2)当光线与景物相交时按照俄罗斯轮盘赌规则决定它的反射属性。
(3)根据不同的反射属性继续跟踪计算,直到正常结束或者异常结束。如果反射的属性为漫反射,则随机选择一个反射方向进行跟踪。
(4)重复前面的过程,把每次渲染出来的贴图逐像素叠加混合,直到渲染出的结果达到满意程度。
该方法是一种比较简易的基于物理模型的渲染,其本质就是通过大量的随机采样来模拟半球积分。这种方法在光照细节上可以产生真实度很高的图像,但是图像质量有比较严重的走样,而且效率极其低下。
2)蒙特卡罗光线追踪-采样(www.chuimin.cn)
蒙特卡罗光线追踪的本质就是通过概率理论,把半球积分方程进行近似简化,使之可以通过少量相对重要的采样来模拟积分。蒙特卡罗光线追踪理论中的采样方案有很多,有时候还要混合使用这些采样方案。
蒙特卡罗光线追踪已经是一个比较完备的渲染方案,他有效地解决了光线追踪的模型缺陷和效率问题,使得在家用图形硬件上做基于物理的渲染成为一种可能。但是我们仍然无法实时的进行计算,而且如何解决图像走样的问题也是蒙特卡罗光线追踪的一大难点。
相对于普通光线追踪,蒙特卡罗光线追踪引入了更复杂的漫反射模型,从而增加了需要跟踪的光线数量。但是它又通过采样算法减少了需要跟踪光线,所以其核心效率取决于采样模型。
与普通光线追踪一样,为了减少不必要的求交检测,蒙特卡罗光线追踪也需要使用空间划分技术,最常用的是平衡k-d tree。蒙特卡罗光线追踪虽然是一种逆向光线追踪算法,但是其采样的理论却与光线追踪的方向无关,可以用于任何一种渲染方案。
此外,使用蒙特卡罗光线追踪不容易计算焦散(caustics)现象。也就是说它不容易计算由镜面反射或者规则透射引起的漫反射(但是很容易计算由漫反射引起的镜面反射或者规则透射)。
蒙特卡罗光线追踪本身也是一种逆向光线跟踪。逆向光线追踪最初被设计出来是为了只计算那些会影响最终屏幕像素的光能传递过程,这一思想在早期硬件并不发达,对最终影响要求也不高的年代是非常实用的。但是我认为由于对屏幕上每个像素的跟踪都是无关的,即每两次跟踪之间都不会建立通信说哪些是计算过的,哪些是没计算过的,所以这里面必然会包含大量重复计算的中间过程。当我们对图像所表现效果的真实度非常高的时候,必然会产生巨量的采样,然后重复计算的问题就会放大,而由逆向追踪思想带来的那些优势也将荡然无存。而且,对场景中光能贡献越大的光源应该被越多的采样跟踪覆盖到,但是逆向光线跟踪只是对屏幕上每个像素反复遍历追踪,其结果应该趋向于采样平均覆盖各个光源,如果要想对高亮度光源采很多的样本,必然也会导致对其他光源也过多地采取了样本,这会非常浪费效率。重新考虑正向光线追踪,光由光源发出,打在场景之中,每一次光能转化都被记录下来,最后只要收集这些信息就可以知道任意点上面的亮度,这个方法的描述非常贴近真实的自然,关键在于如何保证速度。
另外,完全的逆向光线追踪根本就不应该作为实时渲染的算法,道理很简单,光能的传递过程不变,只要视点一变,就要重新计算。
有关虚拟现实理论基础与应用开发实践的文章
图3-2光子反射过程图3-3前向光线追踪现在从计算机图形的角度来看待这种情况。在这种情况下,发射的光子将撞击图形平面上许多像素的一个,并将该点的亮度增加到大于零的值。这种技术称为前向光线追踪,因为我们是沿着光子从光源向观察者前进的路径。此外,我们也不能保证物体的表面被光子完全覆盖,这是这项技术的主要缺点。另外,正如我们将看到的,射线追踪器中最昂贵的任务是找到射线几何交点。......
2023-10-17
80%~90%的渲染时间花费在计算光线和物体交点上。基本的光线追踪算法只能得到尖锐的阴影。2)解决方案性能。③限制交点检测的数目。快速判断光线是否和一组物体相交。确定最大的递归层数。一个阈值用来确定后续光线由于对像素点贡献太小而不会被追踪。图3-16每个亚像素发射一条光线②自适应抗锯齿。阴影光线颜色的平均值决定该交点最终的颜色值。图3-18随机取样图3-19区域光图3-20蒙特·卡罗光线追踪全局光照。......
2023-10-17
全局照明方法试图解决由光线追踪所带来的一些问题。一个光线追踪器往往模拟光线在遇到漫反射表面时只折射一次,而全局照明渲染器模拟光线在场景中的多次反射。由全局照明方法产生的图片看起来真正让人信服。表4-2全局照明的优缺点用直接照明照亮一个简单的场景如下。图4-1用全局照明照亮这个简单的场景图4-2用Terragen渲染场景原本灰色地墙面,再也不是原始的灰色,在它们上面有了些暖意。......
2023-10-17
1)随机采样在基本光线追踪算法中,只追踪有限数目的光线。这是一个采样过程。可以使用随机采样绘制平滑的阴影;绘制模糊的反射和折射;考虑景深;考虑运动模糊。图3-21小规模采样效果通过追踪交点周围所有路径的光线来计算间接光照,为了避免无限渲染次数,所有的可能光线路径使用随机采样。双向路径追踪额外追踪了发自光源的光线,减少了路径追踪的采样次数。......
2023-10-17
1)辐照度Total amount of energy received per unit area of a surface。2)照明度Essentially same as irradiance,the difference is that illuminance measures the amount of visible light energy in photometric terms。3)辐射Measure of energy that is reflected by the surface。4)亮度Measure of photometrically weighted light energy that leaves the surface。5)Amount of light energy that is emitted by the surface in a given direction。实际上称为反向光线追踪,因为计算是从camera开始发射光线,而不是从光源发射光线。图3-9胶片被分成离散网格对于每一个像素,从camera位置追踪一条光线,指向该像素点。......
2023-10-17
尝试添加一个刚体到刚创建的物体上。选择该物体并从菜单中选择Component→physics→Rigidbody。它们使用一个粒子发射器,粒子动画和粒子渲染器来创建一组移动的粒子。音频剪辑是一个引用属性。移除组件如果你想移除一个组件,在检视面板的头部使用option-或右击然后选择移除组件。例如,如果你想访问变换组件的变换功能,你只需要使用transform.Translate()或gameObject.transform.Translate()。使用GetComponent()有许多组件不能成为一个游戏物体类的成员。通过调用GetComponent并存储一个引用到结果中。......
2023-10-17
先选择Assets→Models→Characters选项,将主角Player拖到场景中。图8-148主向Player加入场景给主角添加Rigidbody组件。图8-151主角移动代码将代码拖拽到主角的面板上,单击运行。发现主角掉下去了,这是个严重的问题。图8-152给主角添加CapsuleCollider组件②调整大小,差不多框住主角。图8-154给地板添加BoxCollider图8-155主角倒地图8-156锁住旋转轴XZ......
2023-10-17
图8-177CameraFollow脚本offset是相机初始时与主角之间的距离,speed是相机移动的速度,target设置为public,待会直接拖动主角挂到这里。Lerp是插值的概念,简单来说就是使相机平滑地移动而不是瞬间移位。图8-178脚本挂到相机将游戏场景中的物体加入BoxColider。图8-179加入BoxColider单击Window→Navigation自动寻路组件,Unity只对静止的物体计算,选中所有的场景物体,选择static项。图8-183加入NavMeshAgent组件图8-184添加Player标签图8-185怪物出生点设置图8-186新建脚本EnemyManager将这个脚本挂在一个空物体上。......
2023-10-17
相关推荐