实例化预设使用上面章节中描述的创建预设的方法。一旦你创建了预设,你就可以简单快速地得到一个预设的拷贝,称为实例。为了创建任何预设的一个实例,从工程视图中拖动一个预设到层次或场景视图中。添加组件和脚本当你选中任何预设或物体时,你可以通过使用组件来向其中添加一些额外的功能。脚本也是组件的一种类型。缺省情况下脚本也包含在组件菜单中。你可以通过Components→Camera-Control来找到它。......
2023-10-17
光的基本传递模型基础知识:
(1)在一个要渲染的场景中,我们认为光能由预先指定的光源发出,然后以光线来描述光能的传递过程,当整个场景中的光能信息被计算出来后,收集这些信息转化为顶点的亮度。
(2)光线经过物体表面可以产生反射和漫反射,光线透过物体可以产生折射和散射。具体产生哪种出射效果,依据物体的表面属性而定。物体的表面一般不会是理想的某种单一属性的表面,表面可以同时存在反射、折射、漫反射等多种属性,各种属性按一定比例混合之后才是其表面反射模型。
(3)一点的在某一个视线方向上的光亮度=该点在该方向的自身发光亮度+半球入射光能在该方向所产生的反射光亮度。
(4)关于散射,高度真实的散射是一个很难模拟的物理过程,一般在渲染中都不会采用过于复杂的物理模型来表示散射,而是采用一些取巧的办法来计算散射。
(5)在常见的渲染中,有两种效果很难模拟,但是它们会使人眼觉得场景更真实。
①(color bleeding):入射光为漫反射,受光表面属性为漫反射,出射光是漫反射。比如把一本蓝色的纸制的书靠近白色的墙,墙上会有浅浅的蓝晕。
②(caustics):入射光为镜面反射或折射,受光表面属性为漫反射,出射光是漫反射。比如把一个装了红色葡萄酒的酒杯放在木桌上面,会有光透过杯中的酒在桌上形成一块很亮的红色区域。
传统的阴影算法和光线追踪算法:
1)传统的阴影算法
游戏中传统的光照算法,是利用公式法来计算特定类型光源的直接光照在物体表面所产生的反射和漫反射颜色,然后再使用阴影算法做阴影补偿[23]。标准的阴影算法不能计算面光源,改进以后的阴影算法通过对面光源采样,可以模拟出软阴影的效果。但是这些方法计算的光照都是来自直接光源的,忽略了光的传播过程,也就无法计算出由光的传播所产生的效果。通过特定的修正,我们也可以计算特定的反射折射或漫反射过程,但是无法给出一种通用并且物理正确的方法。目前游戏中大多是采用改进的阴影算法来进行渲染,它的优点是效率比较高,结合预计算的话,还是可以产生比较生动可信的效果。
2)传统的逆向光线追踪
正如前面描述的那样,要想计算光能在场景中产生的颜色,最自然的考虑就是,从光源出发,正向跟踪每一根光线在场景中的传递过程,然后收集信息。然而这个想法在被提出来的那个时代的计算机硬件上是不可能实现的,当时人们认为,正向光线追踪计算了大量对当前屏幕颜色不产生贡献的信息,而且它把看不见的物体也计算在内,极大的浪费了效率。
于是人们想出的另一个方法是:只计算有用的,从人眼出发,逆向跟踪光线。
逆向光线追踪从视点出发,向投影屏幕发出光线,然后追踪这个光线的传递过程。如果这个光线经过若干次反射折射后打到了光源上,则认为该光线是有用的,递归的计算颜色,否则就抛弃它。很显然,这个过程是真实光线投射的逆过程,它同样会产生浪费(那些被抛弃的逆向光线),而且只适用于静态渲染。
逆向光线追踪算法中的顶点亮度主要包括三个方面:
(1)由光源直接照射而引起的光亮度。
(2)来自环境中其他景物的反射折射光在表面产生的镜面反射光亮度。
(3)来自环境中其他景物的反射折射光在表面产生的规则透射光亮度。(www.chuimin.cn)
3)预设定的顶点漫反射颜色
显然,这一过程仅跟踪景物间的镜面反射光线和规则透射光线,忽略了至少经过一次漫反射之后光能传递,而且该算法中的物体表面属性只能是单一的,因而它仅模拟了理想表面的光能传递。
对于该算法的具体描述如下:
(1)从视点出发,经过投影屏幕上的每一个像素向场景发射一根虚拟的光线。
(2)求光线与场景最近的交点。
(3)递归跟踪:
①如果当前交点所在的景物表面为理想镜面,光线沿其镜面反射方向继续跟踪。
②如果当前交点所在的景物表面为规则投射表面,光线沿其规则投射方向继续跟踪。
(4)递归异常结束:
①光线与场景中的景物没有交点。
②当前交点所在的景物表面为漫反射表面。
③跟踪层次已经超过用户设定的最大跟踪层数。
④所跟踪的光线对显示像素的光亮度的贡献小于预先设定的阈值。
(5)递归正常结束:
光线于光源相交,取得光亮度值,按递归层次反馈。
传统的光线追踪技术可以较好地表现出反射折射效果,也可以生成真实度比较高的阴影。但是它的光照都比较硬,无法模拟出非常细腻的柔化效果。
光线追踪需要对大量的光线进行多次与场景中物体的求交计算。如何避免这些求交计算成为光线追踪追求效率的本质。早期的光线追踪算法都是通过各种空间划分技术来避免无谓的求交检测,这些方法对于之后的理论同样有效,常见的空间划分方法分为两类,一类是基于网格的平均空间划分,一类是基于轴平行的二分空间划分。
有关虚拟现实理论基础与应用开发实践的文章
实例化预设使用上面章节中描述的创建预设的方法。一旦你创建了预设,你就可以简单快速地得到一个预设的拷贝,称为实例。为了创建任何预设的一个实例,从工程视图中拖动一个预设到层次或场景视图中。添加组件和脚本当你选中任何预设或物体时,你可以通过使用组件来向其中添加一些额外的功能。脚本也是组件的一种类型。缺省情况下脚本也包含在组件菜单中。你可以通过Components→Camera-Control来找到它。......
2023-10-17
图8-32Ball脚本创建1)概要前面创建了一个游戏项目,并且创建了玩家角色和小球这些游戏对象,还通过添加游戏脚本实现了小方块的弹跳。图8-33游戏开始状态图8-34Ball项文本变为蓝色图8-35多出一个小球对象将Player和Floor游戏对象也做成预设。图8-37创建文件夹并修改其名称图8-38移动Player预设和Floor预设至Prefabs文件夹将预设Ball Prefab拖拽到Prefabs文件夹下。图8-39保存文件夹回到Assets图8-40游戏对象命名5)发射小球在窗口顶部菜单中依次单击GameObject→Create Empty。......
2023-10-17
在Assets→Audio文件夹下,右击Create→AudioMixer。只要在主角受伤时播放音效就可以了,开枪的声音同理。刚刚制作的AudioMixer还没有用到,现在我们开始制作,双击AudioMixer,添加一个SoundEffect。在AudioMixer添加一个Music用来控制背景音乐,SoundEffect用来控制音效,Master用来同时控制二者。图8-261enemies放到怪物的AudioSource的output图8-262添加组件图8-263新建脚本MixLevel图8-264把代码放至Canvas回到MasterMixer,单击volumn,选择exposed。图8-267添加music、sound脚本代码回到UI界面里面的slider条,按照不同的slider条功能添加不同的函数。......
2023-10-17
Unity中可以扩展的相机属性●清除标记:决定场景的哪个部分需要清除。你可以创建多个相机并赋予它们不同的深度。如果当前相机没有设置天空盒,它将缺省使用在渲染设置中的天空盒。武器相机的Clear Flags应该被设置为仅深度。为了使UI显示在所有其他相机视的顶部,你还需要设置Clear Flags和Depth only并确定相机的深度比其他相机的高。图7-53景深相机正交相机。......
2023-10-17
拖尾渲染组件属于特效当中的一种,给一个物体添加拖尾渲染组件的方式。粒子系统是Unity3.5版本新推出的粒子系统,它采用模块化管理,个性化的粒子模块配合粒子曲线编辑器使用户更容易创造出各种缤纷复杂的粒子效果。粒子在Unity中是用来制造烟雾,蒸汽,火及其它气体的效果。Unity中一个典型的粒子系统是一个对象,它包含了一个粒子发射器、一个粒子动画和一个粒子渲染器。Random Between Two Gradients:表示粒子颜色在生命周期内按照两条颜色渐变条中任意一个值。......
2023-10-17
光子的动量与其圆频率ω呈线性关系。继而利用光的波粒二象性中的电磁波函数导出式:E=e·eiθ。按照现代光学波粒二象性理论[11],同一时刻在同一地点出现的同一个频率的光子数的概率振幅,等效于同一频率的复振幅。这里另辟蹊径,用的数学模型仅仅抓住了光色的矢量特征,在复频谱上模拟了光与色的映射关系。......
2023-11-18
图9-71创建游戏管理器的逻辑脚本游戏胜负逻辑是与GameManager等脚本关联起来的。图9-76添加Look At Target组件运行游戏,发现收集物状态UI已经可以正常显示,面向摄像机了。图9-78添加Wall Mover组件图9-79组件关联在Scripts文件夹内右键Create→C# Script,重命名GoalZone,用于处理到达终点的逻辑。找到VR Win Panel→Exit Game Button上的Button组件,设置On Click事件调用为Game Manager UI→GameManager.ExitGame方法。图9-84设置完成的效果显示成功拾取到4个盾牌收集物到达GoalZone,也会弹出VR Win Panel的UI,可以进行一样的操作。......
2023-10-17
图8-120公有变量初始化这里要注意的是,Tank Mask的选取必须是Players,否则后面子弹的爆炸将不会作用于坦克。图8-121FireTransform的transform设置2)发射子弹接下来就要实现子弹的发射功能,并且子弹可以蓄能,蓄能越久射击距离也就越长,因此也就需要有一个蓄能状态的指示。首先,选中Hierarchy层级下的Tank,为它新建一个子对象Create Empty,命名为FireTransform。该对象主要是规定子弹的射出位置。测试完毕之后,把Hierarchy层的Tank删除掉,保存当前场景。......
2023-10-17
相关推荐