全局照明方法试图解决由光线追踪所带来的一些问题。一个光线追踪器往往模拟光线在遇到漫反射表面时只折射一次,而全局照明渲染器模拟光线在场景中的多次反射。由全局照明方法产生的图片看起来真正让人信服。表4-2全局照明的优缺点用直接照明照亮一个简单的场景如下。图4-1用全局照明照亮这个简单的场景图4-2用Terragen渲染场景原本灰色地墙面,再也不是原始的灰色,在它们上面有了些暖意。......
2023-10-17
1)问题
(1)性能。算法的递归性质和大数目的追踪光线,渲染过程可能持续数小时。80%~90%的渲染时间花费在计算光线和物体交点上。
(2)走样。
(3)尖锐的阴影。基本的光线追踪算法只能得到尖锐的阴影(因为模拟的是点光源)。
(4)局部光照和着色。算法只追踪少数目的光线,只有四种类型的光线被考虑在内,物体之间的漫反射光没有被考虑在内,即算法并不包括全局光照。
2)解决方案
(1)性能。
①使用更多或者更好的硬件。
②大规模并行计算。每一个光线都相互独立。将图像分割,分配在多核上或者分布式网络上;或者分配在多个线程上。
③限制交点检测的数目。使用包围盒的层次关系。快速判断光线是否和一组物体相交。物体被分组在封闭的包围盒中。利用空间细分技术:octree、BSP、grid。
④优化交点检测。
⑤限制追踪光线的数目。确定最大的递归层数。根据光线对当前像素点贡献值大小来限制递归深度。一个阈值用来确定后续光线由于对像素点贡献太小而不会被追踪。
(2)走样:使用超采样(super sampling)、抗锯齿(antialiasing)、(jittering)
①追踪额外的主光线并取平均值。即超采样,相对于每一个像素点取一条光线,你可以取特定数目的光线。每一个像素被分为亚像素,对每一个亚像素发射一条光线。当所有的亚像素点都处理完毕,对亚像素点的颜色值取平均值,并将其赋值给该像素点(见图3-16)。这种方法大大增加了渲染时间。
图3-16 每个亚像素发射一条光线
②自适应抗锯齿。在颜色剧烈变化的地方使用追踪的主光线,颜色变化不大的地方使用最少的主光线(见图3-17)。(www.chuimin.cn)
图3-17 自适应抗锯齿
③随机抗锯齿。随机取样代替常规取样(见图3-18)。
(3)尖锐的阴影。
原因:使用点光源,每个交点仅仅对应一条阴影光线。
①区域光(area light)。使用一系列点光源来模拟区域光源。对于每一个交点,需要和点光源数目一样多的追踪光线(见图3-19)。
②Monte Carlo光线追踪法。使用随机超采样,光源建模成球形光源,阴影光线指向代表光源的球上面的点(见图3-20)。阴影光线颜色的平均值决定该交点最终的颜色值。
图3-18 随机取样
图3-19 区域光
图3-20 蒙特·卡罗光线追踪
(4)全局光照。
依旧可以使用蒙特·卡罗(Monte Carlo)法,使用辐射度(radiosity)算法。
有关虚拟现实理论基础与应用开发实践的文章
全局照明方法试图解决由光线追踪所带来的一些问题。一个光线追踪器往往模拟光线在遇到漫反射表面时只折射一次,而全局照明渲染器模拟光线在场景中的多次反射。由全局照明方法产生的图片看起来真正让人信服。表4-2全局照明的优缺点用直接照明照亮一个简单的场景如下。图4-1用全局照明照亮这个简单的场景图4-2用Terragen渲染场景原本灰色地墙面,再也不是原始的灰色,在它们上面有了些暖意。......
2023-10-17
图3-2光子反射过程图3-3前向光线追踪现在从计算机图形的角度来看待这种情况。在这种情况下,发射的光子将撞击图形平面上许多像素的一个,并将该点的亮度增加到大于零的值。这种技术称为前向光线追踪,因为我们是沿着光子从光源向观察者前进的路径。此外,我们也不能保证物体的表面被光子完全覆盖,这是这项技术的主要缺点。另外,正如我们将看到的,射线追踪器中最昂贵的任务是找到射线几何交点。......
2023-10-17
1)对传统的逆向光线追踪的改进传统的逆向光线追踪算法有两个突出的缺点,即表面属性的单一和不考虑漫反射[24]。这里的百分比可以这样理解,当一根光线打在该表面后,它有20%的概率发生反射,30%的概率发生折射,50%的概率发生漫反射。然后通过多次计算光线跟踪,每次按照概率决定光线的反射属性,这样它就把漫反射也考虑了进去。相对于普通光线追踪,蒙特卡罗光线追踪引入了更复杂的漫反射模型,从而增加了需要跟踪的光线数量。......
2023-10-17
尝试添加一个刚体到刚创建的物体上。选择该物体并从菜单中选择Component→physics→Rigidbody。它们使用一个粒子发射器,粒子动画和粒子渲染器来创建一组移动的粒子。音频剪辑是一个引用属性。移除组件如果你想移除一个组件,在检视面板的头部使用option-或右击然后选择移除组件。例如,如果你想访问变换组件的变换功能,你只需要使用transform.Translate()或gameObject.transform.Translate()。使用GetComponent()有许多组件不能成为一个游戏物体类的成员。通过调用GetComponent并存储一个引用到结果中。......
2023-10-17
1)随机采样在基本光线追踪算法中,只追踪有限数目的光线。这是一个采样过程。可以使用随机采样绘制平滑的阴影;绘制模糊的反射和折射;考虑景深;考虑运动模糊。图3-21小规模采样效果通过追踪交点周围所有路径的光线来计算间接光照,为了避免无限渲染次数,所有的可能光线路径使用随机采样。双向路径追踪额外追踪了发自光源的光线,减少了路径追踪的采样次数。......
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
首先创建一个文件夹Animation用来存放GameController文件,在文件夹内右击新建一个Animator Controller。图8-163发现新Tab将PlayerController放到主角身上的Animator组件里面的Controller。图8-173加入函数到Update()图8-174主角移动,播放Move动画又一个bug出现,主角停下来时,还是播放Move动画,因为刚刚的Animator并没有设计从Move状态转为Idle状态的条件。图8-175主动停止,仍在播放Move动画isMoving设置false,再运行游戏,主角就正常的Move和Idle了。......
2023-10-17
Unity引擎的更新迭代速度很快,从2017年开始每个季度都会有次大版本的更新,比如2017.1,2017.2等,至今正式的大版本升级到了2018.2版本。Unity LTS版本将从TECH版本每年最后一个版本开始,持续支持二年的时间。如果读者实际准备发布上线的项目,为了稳定起见,建议使用LTS版本,即2017.4最新的版本,以保证项目最大限度地稳定运行。如果发现没有红色报错信息,基本可以确定大部分版本升级是成功的。......
2023-10-17
相关推荐