3D网页游戏原理的原理

posts - 56,&
comments - 4,&
trackbacks - 0
Unity3D实现3D立体游戏原理及过程
& &&下面的教程是我今天整理的资料,教大家一步步完成自己的3D立体游戏,并向大家介绍一些3D成像的原理。
& & 理论上,每个普通的非立体3d游戏,都可以改为3D立体游戏,看完这篇帖子,你们都可以把自己之前做过的3D游戏改为立体游戏,那效果。。。
& &一直想尝试用unity做3D立体游戏,昨天终于入手了一台3D显示器,并成功模拟出3D信号,出现了3D效果:
& & 带上眼镜后的观看效果不错,个人感觉比一般的3D电影的立体效果还要强。
& & 第一步:了解偏振式3D成像原理
& & 偏振式3D成像是根据人眼成像原理发明的,人眼看到的景象呈现立体感,是由于双眼所观察到的景象有略微的差别,因为瞳距(两眼球之间的距离)导致观察的物体的角度不同。
& & 所谓偏振成像就是将两幅不同偏振态的图像送到双眼,每只眼睛只允许看到其中一幅,我们用unity制作3D游戏,其实就是制作这两幅图像。或者说模拟3D信号。
& & 第二步:了解现在的硬件技术能帮我们做什么,我们需要做什么
& & 在3D显示器出现之前,我们要做3D立体游戏,估计只能用两台投影仪来实现3D效果了,不过现在的3D液晶显示器大多都是集成好一键转3D功能,在这里这个转3D功能指的是自动识别左右半宽的信号(上下的就不考虑了,一般都是左右),并将其融合,转换为偏振的3D信号,并通过3D眼镜观看到3D效果。当然现在的3D显示器经常会宣传说一键2D转3D功能,这个功能不是我刚才说的融合,而是显示器根据2D影像自动给加上景深,生成左右两幅图像,其实是伪3D,试了一下,的确略微有些效果,不过效果真的不怎么样。。。我们这里还是做真的3D立体吧。
& & 知道了显示器能够帮我们自动融合左右图像后,我们就只需要模拟出左右半宽的图像就OK了
& & 第三步:如何用Unity3D模拟出3D信号
& & 这步才是我们要做的重点。要模拟出真实的3D立体影像,首先要知道人眼成像原理,上面第一步说了,因为我们有两只眼睛,并分开一定距离(大约150px),这样就出现了距离感。我们都知道unity中的摄像机是模拟人的眼睛的,一般我们在unity中观察场景都是创建一个摄像机,当然就没有立体感了,要模拟人的眼睛,就要创建两个摄像机(好吧,废话一大堆,其实我就是想说,请先创建两个摄像机。。。)。
& & 把场景本来存在的主相机删掉,把创建的两个摄像机放在同一平面,分开很小的距离,角度调成一样,注意不是往中间看,而是平视,人的双眼也都是平视向前的,这个和焦距是两个概念,别弄混了,类似于下面这样:
& & 至于相距多少,这个视环境而定,两个摄像机之间的距离类似于人眼之间的距离。我们用自带的第一人称控制器来解释这个距离。导入第一人称控制,把这两个摄像机拖到第一人称控制器的摄像机下,作为子物体,把第一人称控制自带的相机关掉(enabled=false),就是把camera组件对号去掉。把左右相机的位置改为这样:
& & 左相机:
& & 右相机:
& & 对于第一人称控制器的大小来说,这个0.06的距离够用了,为什么说是够用了,不是正好,是因为距离大点小点都是可以的,距离越大,景深越大,看起来更清晰,好像是距离拉近了,不过给人观看的感觉更累了,这个很好理解,人的眼睛距离变大,就相当于人变成了巨人,或者眼前的景象拉近,也就是你把手指从远处拉到眼前的感觉,当近到一定程度是,你要看你的手指就会很吃力,要不就重影~~再近,就是斗鸡眼了,斗鸡眼的感觉,你懂的。。。
& & 如果距离拉近的话,3D感会渐渐变弱,最近就是两个相机重合,重合后就没有立体感了。所以这个距离要根据你看的场景而定,对于自带的第一人称控制器,它的大小作为人的大小的话,它所存在的场景比例就是固定的,此时的瞳距根据你想要的效果而定,具体可以在显示器上测试。
& & 当两个摄像机的距离固定后,怎么把影像分开呢?因为我们用3d显示器来融合,就不需要考虑unity的融合图像部分,只需要把两个相机的影像分为左右半宽同时输出即可。要达到这样的效果,用RenderTexture是个很好的解决方案,我们新建两个RenderTexture,分别用来显示左右两个相机的视野:
& & 把新建的两个RenderTexture放到plane上,并排放到一起,并新建一个垂直摄像机来单独显示这两个RenderTexture,这个摄像机也是我们最后看到的画面所使用的相机。所以它的depth要设置的高一点。
& & 关于RenderTexture,我们需要稍微调整一下,size改为,注意不要改为,即使这样会更加清晰,但是会出现显示不全的情况。注意,此时这两个plane的scale大小只有设为2:1的比例才不会出现图像变形,也就是说plane的大小要和RenderTexture的比例一样才会显示正常比例内容,但是我们需要的并不是正常比例,只要融合后是正常比例既可,显示器的融合功能是将左右部分先放大到整个屏幕,再进行偏振融合,所以我们要的3d信号是压缩一半之后的两个影像,所以降2:1的比例压缩后就成了1:1.也就是plane的大小还是1:1的方形,这样在融合后才不会出现比例失真的情况。
& & 大多数的3D显示器的屏幕比例都是,也就是16:9,现在的3D视频分辨率大多也是这个比例,这样在全屏的时候就不会变形或者出现黑边,我们玩游戏全屏不失真的话,也要按这个比例(16:9),当然不全屏的话也是看不了3D的,因为左右半宽的窗体无法融合,3D显示器也不认识这样的3D信号。
& & 再回到上面说的RenderTexture的大小(分辨率)问题上来,假如选择了,而game窗口比例又是16:9,unity的RenderTexture为了显示1:1的比例,就把摄像机中间部分显示出来,两侧内容裁减掉了,造成视野缺失,所以要选择size为,不过这样又出新的问题,Game窗口是16:9,也就是摄像机视野比例是16:9,比,也就是2:1的比例要小,造成RenderTexture两侧多显示了一部分,这部分是左右相机视野中没有的部分,必须要去掉的。去掉的方法其实很简单,通过更改材质的UV值即可,也就是让这两个RenderTexture,显示的影像往中间偏移,偏移的量,通过计算可以算出为0.05555&,我们改变UV偏移:
& & 由于我们的摄像机视野时16:9,所以附有RenderTexture的plane的两侧内容并不在我们的视野内,这样主相机的显示影像只有左右相机的视野影像,不会有其他的内容.
& & 到这里,我们在unity中要做的3D方面的操作已经差不多了,剩下的内容就是我们做普通游戏的流程,只要把我们曾经用的相机改为上面做的两个相机即可,我们可以把这两个相机连它们的父物体导出一个预制体,看向RenderTexture主相机和两个附有RenderTexture的plane导出另一个预制体,这两个预制体导出包package,这个package包就是一个转3D立体游戏的插件了,要转化哪个游戏为立体游戏,就把这个包导入,把两个预制体拖进场景,把相机替换为左右两个相机,然后导出游戏就是3d立体游戏了。
& & 将导出的游戏(exe)打开,电脑要连好3D显示器,这样在选择比例的时候才有, Windowed的对号去掉,保证是全屏,导出设置里面也有默认全屏,
& & 打开后,将显示器改为3D模式,3D显示器一般都有按键在下面或者侧面,有转换3D的功能键,打开后,带上眼镜就可以体验3D立体效果了!
& & 最终搞出来的效果:
& & 注:假如感觉立体效果不明显,就把两个相机的距离拉开一点.
阅读(...) 评论()3D跨平台游戏开发
3D跨平台游戏开发
这套课程主要讲授3D 网络游戏开发的核心技术与主要的功能实现,特别是游戏引擎的应用与设计开发。
3D 程序基础阶段包含《3D 游戏程序基础》、《3D 高级渲染及优化》。此阶段主要学习DirectX 编程、图形图像程序渲染技术、3D 摄像机设定等关键的3D 程序开发技术。
技术应用阶段包含《服务器和数据库》、《C# 基础》,该阶段将实现3D 网络游戏的数据通讯、多线程运算以及游戏数据库的编程与管理。
游戏引擎应用阶段需要掌握Unity3D 游戏引擎的基本原理,把之前的3D 渲染知识在引擎中展现出来,并通过实战案例,熟练地使用该款引擎。
课程&&&&&&&大纲
课程设计:源自于企业真实岗位技术规范、流程! &教学方法:源自于全球公认的迭代式高效学习法! &教学案例:源自热门行业过亿元商业项目!精益求精,这是高薪就业岗位课程
3D 游戏程序基础
3D 图形编程是计算机图形学的核心技术,除了需要了解3D 成像原理之外,还需要掌握DX 绘图、顶点缓冲、地形与天空盒、灯光贴图渲染等必要的基础编程能力。
3D 高级渲染及优化
由于多了一个维度,游戏中的模型碰撞检测、摄像机镜头、骨骼动画、粒子特效、模型渲染与阴影变得更为复杂,实时运算后表现出的视觉效果也会无比真实,令人身临其境。
"3D 游戏程序基础、3D 高级渲染及优化"对应学习目标
《剑灵》是韩国网络游戏开发商NCSoft 开发的3D 奇幻大型多人在线动作类游戏,为玩家展示了东方武侠世界、人物造型、轻功绝学、打斗体验、战斗过程,以及任务情节。
"3D 游戏程序基础、3D 高级渲染及优化"阶段,主要帮助我们对3D 游戏的渲染有一个清楚的认识。3D 游戏与2D 游戏最主要的区别在于渲染方面,而程序的整体框架及游戏系统的划分与2D 游戏并无本质区别。我们会学习到如何一步步渲染出一个美妙的3D 世界。
服务器和数据库
完整的3D 网络游戏除了三维视效的表现外,还需要数据通讯、数据库管理、多线程运算等底层功能支持,保证高效的协同运算与即时的操作效果。
游戏案例实践
依据教师提供的游戏案例源码,综合运用所学过的游戏开发编程技术,进行相对完善的功能开发,不仅要实现游戏程序的框架,还要在框架内实现一个3D 游戏应有的游戏系统,体现游戏的娱乐性。
阶段考核(K1)
阶段考试K1 的形式为在线考试,利用汇众教育自主研发的在线考试系统进行程序知识的在线答题。本次阶段考试主要考察3D 图形学原理,3D 图形学原理是任何3D 游戏开发、3D 引擎开发不可或缺的知识,是衡量一个3D 游戏程序员合格与否的标杆。
C# 是微软公司发布的一种面向对象的、运行于.NET Framework 之上的高级程序设计语言。是一种安全的、稳定的、简单的、优雅的,由C 和C++ 衍生出来的面向对象的编程语言。C# 语言也是Unity3D 游戏引擎所支持的重要脚本编程语言之一,对于后续学习Unity3D 引擎有很大帮助。而我们之前所学过的C++ 语言对于我们学习C# 语言同样具有很大的帮助。
Unity3D 功能介绍
Unity3D 具有很强大的功能,同时也是目前最流行的3D 游戏开发引擎。我们要从界面操作入手,以游戏案例的形式,逐步深入讲解该引擎的基本构架、游戏对象、游戏组件、预制体、Mecanim 动画系统、Shuriken 粒子系统、LightMapping 的烘培等功能。
Unity3D 项目实战
在掌握了引擎的基本使用后,学员将独立完成若干个准商业游戏案例的开发,类型包括但不局限于飞行射击游戏、塔防游戏、消除游戏、第一人称射击游戏、角色扮演游戏、卡牌类游戏、动作类游戏等游戏的设计与开发。通过开发,更深入地掌握Unity3D 引擎。
"C# 基础、Unity3D 功能介绍、Unity3D 项目实战"对应学习目标
《我叫MT2》是乐动卓越开发的精美3D 手游,延续了传统《我叫MT》的经典特色。精美建模、华丽技能、宏大世界,让你体验前所未有的畅快战斗。作为《我叫MT》的续作,《我叫MT2》突破了"2D 卡牌"局限,以"3D 视角"再现可爱角色,为玩家呈现出一个无比真实的游戏世界。
"C# 基础、Unity3D 功能介绍、Unity3D 项目实战"阶段,主要帮助我们认识Unity3D 这个游戏引擎,从界面操作开始,逐渐学习引擎的框架、预制体、游戏组件、动画系统、粒子系统、物理系统、常用开发插件等,同时学习使用C# 语言编写Unity3D 中的脚本,综合运用所学到的知识,最终完成商业化游戏的开发。
Unity3D 通信及打包
在游戏基本完成后,我们需要为游戏添加网络通信的功能,使其具备在互联网中进行数据连接、通信的功能,并在最终封装游戏的时候,导出为满足各个目标平台(IOS/Android)可运行的版本,并讲解在目标平台上线的流程。
Unity3D引擎虚拟现实(VR)设计
VR中摄像机的使用技巧
交互方式:碰撞检测及视线检测
交互设备的触发方式(暴风SDK接入)
VR中UI与传统UI的区别
Shader在VR开发中的使用技巧(性能优化)
CameraPath插件
镜头角度锁定
效率优化及打包调试技巧
虚拟现实(VR)是目前数字娱乐产业除游戏外最火爆的前沿发展领域,我们将为大家介绍Unity3D引擎在虚拟现实(VR)领域的使用技巧,从VR摄像机处理、全新交互方式、分屏处理、优化技巧等开始,带领大家实现:体验式VR场景、交互式VR游戏,从而具备进入全新的虚拟现实领域的能力
阶段考试(K2)
按照商业项目要求,模拟商业项目开发流程,制作游戏程序技术开发文档,绘制出对应的UML 程序结构图,对游戏进行编码,实现游戏框架及各个游戏模块的功能,最终编译为可直接运行的游戏并提供整个游戏项目的设计文档。
专业&&&&&&&软件
Unity 是由Unity Technologies 开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。可发布游戏至Windows、Mac、Wii、iPhone、和Android 平台。也可以利用Unity web player 插件发布网页游戏,支持Mac 和Windows 的网页浏览。
DirectX(简称DX)是由微软公司创建的多媒体编程接口。它可以使基于Windows的计算机成为运行和显示具有丰富多媒体元素(例如全色图形、视频、3D 动画和丰富音频)的应用程序的理想平台。DirectX 主要由显示部分、声音部分、输入部分和网络部分API 构成。
C# 是一种安全的、稳定的、简单的、优雅的面向对象的编程语言。由微软公司发布,运行于.NET Framework 之上。C# 是兼顾系统开发和应用开发的最佳实用语言,并且很有可能成为编程语言历史上的第一个"全能"型语言。
就业&&&&&&&领域
3D跨平台游戏开发平均薪资
(注:薪资数据为工作1-2年后的工资,仅供参考)
师资&&&&&&&力量
80%来自知名和一线开发企业
创意超豪华的400人专家团队
75%担任过开发组长以上职务
质量教师每年参加教学体系上岗认证
专职一班一师全程教学
5年平均5年以上开发经验
就业&&&&&&&保障
入学即签订《就业推荐保障协议》,此协议包含学校为学员成功就业所承担的法律责任,让学员能够在汇众安心学习!学员需要参加学习流程中设定的相关考试,并达到考核标准,便可获得对应的认证***。发证机构:汇众教育和工业和信息化部软件与集成电路促进中心(CSIP)
汇众教育就业实训基地超过25家,分布在北京、上海、广州、深圳、大连、青岛、成都、重庆、西安、杭州、武汉、合肥、郑州、济南等全国各大城市。学员结业后可以任意选择就业城市,由汇众教育总部统筹推荐到您喜爱的城市就业。
就业&&&&&&&案例
汇众教育11年来共培养动漫游戏人才60000余名,毕业学员97%以上就业于专业岗位,全国70%以上的动漫游戏公司都有汇众教育培养的学员,并在2-3年后成为企业的开发骨干。
范毅学历:本科就职:北京紫金翎科技月薪:20000+¥
杨青彦学历:大专就职:八七六零网络科技公司月薪:15000¥
梁平学历:大专就职:杭州天格科技月薪:15000¥
白建新学历:大专就职:北京双米互动月薪:10000¥
姚更学历:大专就职:北京方舟互联科技月薪:7000¥
鲁贺贺学历:大专就职:北京七维视觉月薪:6000¥
付永昌学历:本科就职:境界网络技术月薪:12000+¥
侯烨学历:大专就职:北京网秦天下科技公司月薪:5000¥
合作&&&&&&&名企
全国与汇众教育进行人才培养合作的游戏企业有2000余家,动漫企业有1300余家,业内人才供给比例高达38%。内容字号:
段落设置:
字体设置:
精准搜索请尝试:
3D游戏制作常用技巧“法线贴图”原理解析(基础篇)
来源:作者:水煮鱼丸责编:晨风
1、法线贴图基本概念在制作3D游戏时,常常遇到这样一个问题:一个平面,这个平面在现实中并不是一个“平”面,例如砖墙的表面带有石质浮雕等等。这种情况下如果只是简单的做一个平面,则让人感觉严重失真,如图1所示;而如果用很密集的三角形去表示这类略有凹凸的表面,则性能上大大下降。研究人员发现,人眼对物体的凹凸感觉,很大程度上取决于表面的光照明暗变化,如果能通过一张贴图在一个平面上表现出由凹凸造成的明暗变化,则可以让人眼感觉这个平面是凹凸不平的(虽然这个平面还是平的)。法线贴图正是为了这个目的而产生的。图1不同细节程度的蜡烛准确的说,法线贴图是Bump Mapping(凹凸贴图)的其中一种。第一个Bump Mapping由Blinn在1978年提出,目的是以低代价给予计算机几何体以更丰富的表面信息。30年来,这项技术不断延展,尤其是计算机图形学成熟以后,相继出现了不少算法变体,法线贴图就是其中很重要的一种。研究人员对法线贴图进一步改进,出现了Parallax Mapping(视差贴图), Relief Mapping等技术,实现了更逼真的效果。本文仅针对法线贴图进行介绍。一条法线是一个三维向量,一个三维向量由x, y, z等3个分量组成,在法线贴图中,把(x, y, z)当作RGB3个颜色的值存储(如图2),并将其每个分量映射到[-1, 1]。例如,对于x, y, z各有8位的纹理,[0,128,255]表示法向量(-1, 0, 1)。图2利用彩色通道存储法线贴图2、切线空间法线贴图中存储的法线最初是定义在世界空间中,但在实际中,这种方式很少见,因为只要物体移动,法线贴图则不再有效。另一种方式就是将法线存储在物体的局部空间中,物体可以进行刚体变换(平移,旋转,缩放),法线贴图依旧有效,但是这种方法并不能应对任何方式的变换,并且法线贴图不能在不同物体进行复用,增加了美工的负担。所以,现在现在普遍采用的解决方案是将法线存储在切线空间中。简单的来说,切线空间可以理解为纹理空间的u,v方向和法向量n,这3个方向构成了切线空间,一般使用T、B和N表示,如图3所示。具体解释,这个博客解释的很好,没见过的童鞋可以看一看,第一次理解可能会有点困难。图3切线空间3、法线贴图的使用法线贴图的制作过程如图4所示,通过对比高模和低模的差异,生成法线贴图,在运行时使用法线贴图+低模即可表现出接近高模的效果,但是大大降低了显卡的负担。计算法线贴图的算法在3ds Max中已实现,美术人员只需针对同一个模型制作一个高模和一个低模,烘焙出一张法线贴图,在游戏中使用低模+法线贴图即可。图4法线贴图制作过程在渲染模型表面的时候,需保证光照方向和法线是处在同一坐标空间。光照方向在世界空间中,而法线在切线空间,将他们变换到同一坐标空间无非两种方法:1、将光照方向变换到切线空间;2、将法线变换到世界空间。在大部分情况下,使用第一种方案会比较好,因为只需针对每个顶点进行变换,然后在三角形中对变换后的光照方向进行插值;而使用第二种方案,则需要对每个像素进行变换。显然,在光源较少的情况下,使用第一种方案可以减少计算量。当然,在光源数量较多的情况下,到底使用那种方案,需要值得考虑,因为使用第二种方案只需要变换一次法线,而第一种方案需要有多个光照方向需要变换。值得注意的是,第一种方案中的插值对于点光源来说存在一个近似,光照方向在一个三角形上变化的很慢,所以可以进行插值,不过对于方向光则没有这个问题。4、法线贴图效果法线贴图+低模可以表现出接近高模的效果,在图4中可以看到,加上法线贴图的低模,效果很接近高模;图5为unity3d中法线贴图的示例,上图(没有法线贴图)和下图(有加入法线贴图)相比,明显下图的立体感更强。图5 unity3d中法线贴图的示例。上图中的方块没有法线贴图,下图加入了法线贴图5、法线贴图的压缩和mipmap归一化的法线长度为1,且在切线空间下,法线的z分量不可能为负数,所以只需要存储x和y值即可。当然,仅仅是这种简单的压缩是不够的,但是传统的纹理压缩方法如DXTC等,不能直接对法线贴图使用,需要进行一定的变化。使用传统mipmap方法生成的法线贴图对于漫反射表面基本没问题,但是在镜面表面会导致严重的视觉问题。对于漫反射表面来说,光照的计算公式为l?n,l为光线方向的相反方向,n为法线,l?n1&+&l?n2&+&l?n3&+&l?n4&=&l?(n1&+&n2&+&n3&+&n4) / 4,而mipmap则是事先计算(n1&+&n2&+&n3&+&n4) / 4,所以对于漫反射表面,对法线贴图使用传统方式的mipmap基本没问题。为什么是基本没问题而不是完全没问题呢?因为这里存在一个近似,若l?n&& 0,则光照值为0(光照不能为负),若将这个因素考虑进去,漫反射表面也会有问题,不过在实际当中这种情况表现不明显,所以可以认为基本没问题。对于镜面表面来说,当视线偏离反射光线方向的时候,光照强度会急剧下降,反映在公式中是因为其含有cosm(h?n)项(具体公式可以自行搜索),而漫反射光照是线性变化,所以对于镜面表面,不能使用传统方法生成法线贴图的mipmap,需要用特殊的技术手段进行处理,具体方法见下一篇《》。
大家都在买
软媒旗下软件:
IT之家,软媒旗下科技门户网站 - 爱科技,爱这里。
Copyright (C) , All Rights Reserved.
版权所有 鲁ICP备号

参考资料

 

随机推荐