Unity3D光照贴图的Lightmapping技术教程
unity渲染篇
General GI的设置
Directional Mode :一般选择Directional
7.渲染结果效果图
在画圈的地方可以看到光线的反射,所有物体或者阴影有些偏橙色,这是物体旁边是橙色的物体。
上面的渲染简单流程是实时光照的渲染流程。烘培的也是光照信息。并不是烘培光照贴图,下面介绍下光照贴图
渲染流程简单介绍
1.模型导入设置,这个步骤主要是烘培贴图UV的设置
导入模型,在unity中设置烘培贴图UV,烘培UV也可以在max中使用第二套UV制作成烘培UV,烘培UV不能有任何UV重叠。
Unity设置如下
2.接下来把模型拖入Hierarchy视图中,勾选Static
3.接下来要设置渲染参数
在Other Settings
红色圈圈里是动态物体,阴影是可以影响到周边物体的。
9.在Lighting设置下的Auto最好是取消勾选,需要烘培时手动烘培就好。烘培的主要流程和方法就这些了。
6.接下来技术调整参数去渲染场景了。下图是使用实时光照的渲染参数,
Skybox:旋转当前场景的天空盒子
Sun:旋转当前场景的平行光
Ambient Source:这个环境源选择有几个选项,可以选择天空盒子,渐变色,颜色,可以更具需求去选择,我比较爱用颜色设置,这样可以很好调整环境色彩和亮度。
Reflection Source:反射源,这个就是反射球的设置,如果场景中有需要去反射环境,就可以根据需求设置。
这种渲染要特别注意场景中有无动的物体,如果全是不动的物体,那么全部勾选Static,把灯光baking 修改为baked,直接烘培就好。烘培完成后在lightmaps中有这样的灯光贴图出现:
Unity 3D、2D手机游戏开发:从学习到产品(第4版)
1.7读取资源和实例化
1.7.1在脚本中创建一个Game Object 1.7.2通过序列化方式引用资源 1.7.3通过IO方式读取资源
01
2.1游戏介 绍
02
2.2导入美 术资源
03
2.3创建场 景
04
2.4创建主 角
06
2.6物理碰 撞
05
2.5创建敌 人
2.8声音与特效
2.7高级敌人
2.9敌人生成器
6.1 Web服务器简介
6.2在Windows上安 装部署Apache
6.3 PHP开发环境 6.4 WWW基本应用
6.6 MD5验证
6.5分数排行榜
6.7小结
6.2在Windows上安装部署Apache
6.2.1安装Apache 6.2.2 Apache常用命令 6.2.3安装MySQL 6.2.4安装PHP 6.2.5安装Redis
5.1 Unity 2D系统 简介
5.3动画制作
5.4 2D物理 5.5捕鱼游戏
5.6 2D材质 5.7小结
5.2创建Sprite
5.2.1使用SpriteEditor创建Sprite 5.2.2使用SpritePacker创建Sprite 5.2.3图层排序 5.2.4 Sprite边框和重复显示
1
10.1 Android简介
2
10.2安装 Android SDK
3
10.3运行 Android游戏
4 10.4使用
Android Studio
5 10.5从Unity
到Android Studio
1
10.6使用脚本 编译游戏
2
10.7获得签名 证书的sha1值
Unity3D教程:Unity批量处理修改烘培LightMap
中国第一免费Unity3D教程手册
Unity3D教程:Unity批量处理修改烘培LightMap
用Unity烘培后的多重纹理不能直接转到Unity中,还需要一个个的手动指认Shader。
在Max 里建立你的模型,然后Diffuse Map贴这个模型上,导出一个Fbx文件,然后再相同的模型和相同的Diffuse Map通道上,贴好烘培图,同样导出一个Fbx文件,最终的结果是2个Fbx文件,模型是相同的,其中一个包含材质UV信息,另一个包含LightMap 材质UV信息。
这个Unity资源包包含两个编辑器脚本,即"合并"两个模型网格和将一个模型上的UVs复制到另一个模型物体上并创建一个文本文件记录UV坐标信息.其他的脚本是重新导入Fbx物体的时候重新赋予UVs。
它还能自动设置所有LightMap材质,因此你不必手动的设置Shader和重新赋予LightMap纹理。
唯一的"副作用"是用来取LightMap的UV坐标的网格模型的LightMap通道会被Diffuse Map所占据,但这不是一个真正的问题,作为LightMap 网格模型可以在UV转移后删除掉。
使用本脚本的方法,你必须像下图这样选择两个网格物体文件,然后右键菜单中选择TransferUVs。
Unity3D教程:Unity批量处理修改烘培LightMap
这个脚本不仅测试了从LW 9.5导出的OBJ模型,它也可以很好的用于其他软件导出的模型文件。
中国第一免费Unity3D教程手册。
Unity3D创建简单漫游 代码
1. 建模中使用的图片、文件、文件夹等以及模型中物体、材质等的名称都不能使用中文或者特殊符号,可以使用英文字母、数字、下划线等2. 调整Max的单位为米3. 烘培光影的设置4. 模型的中的植物效果,第一种是单面片植物,需要设置其轴心为其物体的对称中心;第二种是十字交叉的植物效果;第三种则是到Unity3D编辑器中通过地形编辑器系统添加基本设置5. Fbx导出插件下载地址:/adsk/servlet/item?siteID=123112&id=10775855 6. 将Max文件中用到的图片都拷贝到Textures目录下,如7. 再打开Max文件,导出为FBX文件,使用默认设置,FBX文件也放置在和Max文件相同的目录下,如导出的时候,可以将模型简单的分类,如地面、植被、楼房等,也可以将模型分为几个区域,如小区1,小区2,学校等等分开导出8. 将包含Max文件、Fbx文件和Textures文件夹的文件夹拷贝到Unity3D项目的Assets目录下,如下图中红圈在下一次用Unity3D编辑器开启本项目的时候,编辑器将自动导入/更新该文件夹中的信息,并生成Materials文件夹,如9. 启动Unity3D编辑器10. 选择刚才拷贝进来的文件中的Fbx文件,如修改其中的Meshes下的Scale Factor和Generate Colliders,如点击其他Fbx文件或者单击其他区域将弹出如下的对话框点击Apply即可,类似的方式设置其他Fbx文件注意,其中植物/植被类的Fbx文件不需要设置Generate Colliders项11. 将Fbx文件直接拖放到Hierarchy区域,如12. 点击Hierarchy区域中的对象,同时将鼠标移动三维显示区域,同时点击键f,则该对象自动适配显示到三维区域中心,如13. 将全部fbx添加完成后,提高场景亮度如下单击Ambient Light,如下调整为即可设置完成14. 设置第一人称浏览删除场景中Main Camera将Project区域的Standard Assets下的Prefabs下的First Person Controller拖到Hierarchy区域中点选First Person Controller,调整First Person Controller的位置到场景中合适的位置,并设置其高度为1.37到2.1左右设置First Person Controller的高度在场景中地面之上15. 点击运行,即可测试修改视角控制键为右键16. 打开Project区域中的StandardAssets下的CameraScripts下的MouseLook 脚本,在在Quaternion originalRotation;void Update (){if (axes == RotationAxes.MouseXAndY){// Read the mouse input axis中添加一行代码修改为Quaternion originalRotation;void Update (){if(Input.GetAxis ("Fire2")==0) return;if (axes == RotationAxes.MouseXAndY){// Read the mouse input axis如何取消浏览窗口上的右键菜单只要设置Unity对象的参数即可禁止右键菜单的显示,如下:<object id="UnityObject" classid="clsid:444785F1-DE89-4295-863A-D46 C3A781394"width="600" height="450"codebase="/download_webplayer/UnityWeb Player.cab#version=2,0,0,0"><param name="src" value="MyDataFile.unity3d" /><param name="disableContextMenu" value="true" /><embed id="UnityEmbed" src="MyDataFile.unity3d" width="600" heig ht="450"type="application/vnd.unity" pluginspage=" /unity-web-player-2.x"disableContextMenu="true" /></object>植物效果设置17. 对于单面片的植物效果,需要设定其材质为Transparent/VertexLit类型,并为其添加公告板脚本设定前设置材质类型为Transparent/VertexLit类型,如下给单面片植物添加公告板脚本的方法是先选择该植物,然后点击菜单component下的scripts下的camera Facing Billboard即可,如下设置材质类型和添加公告板脚本后,如下如果没有该脚本组件,可以打开脚本编辑器,拷贝如下代码到脚本中,保存到Assets\Scripts下,命名为CameraFacingBillboard.cs即可using UnityEngine;using System.Collections;public class CameraFacingBillboard : MonoBehaviour{public Camera cameraToLookAt;void Start(){cameraToLookAt = Camera.main;}void Update(){Vector3 v = cameraToLookAt.transform.position - transform.position ;v.x = v.z = 0.0f;transform.LookAt(cameraToLookAt.transform.position - v);}}18. 对于十字交叉的植物,需要将其材质设定为Nature/Vegetation Two Pass unlit 类型设置前的效果设置后的效果水面效果的设置19. 创建一个网格面片20. 给该水面面片设置水材质和水脚本,如即可烘培光影贴图的处理21. Unity3D光影烘培的要求U3D的光影贴图使用的是3Dmax中的标准材质的自发光贴图通道来存储光影贴图相关参数,如22. 给每个物体都附上贴图,如果是纯色物体,也付给纯色贴图23. 打光后,选择要烘培的物体设置输出路径添加烘培输出的贴图类型添加“LightingMap”类型设置烘培贴图大小和目标贴图位置为“自发光”设置烘培材质,选择“输出到源”点击“渲染”即可24. 标准材质贴图的烘培光影处理a) 物体据有标准材质b) 烘培渲染后,物体具有两个贴图c) 导出Fbx即可25. 多重子材质贴图的烘培光影处理a) 物体据有多重子材质贴图b) 渲染烘培后每个子材质都据有两个贴图c) 选择该物体,执行“多维材质2标准材质.ms”脚本,将该多维材质物体按其材质数量分解为标准材质的多个物体,新物体的名字以“原多维材质物体名字~其材质名称”命名,如点击“开始转换”,则将该物体从多维材质物体按期子材质分解为多个具有标准材质的物体d) 将全部的具有多维材质类型的物体分解完成后,即可导出26. 多个物体使用同一贴图的烘培光影处理因为我们在导入fbx文件到Unity3D编辑器中的时候,使用的都是按贴图来生成材质文件,所以多个物体使用同一贴图时会发生错误,修改其中任何一个的材质设置时,其他的使用该贴图的物体都会受到影响,解决的方法便是在Unity3D编辑器中生成一个具有该贴图的新材质,然后重新付给当前物体。
Lightmapping_zhendong_1104
三种Lightmapping模式的比较
• Non-Directional • 简单且较高效的表现方 式 • 只有diffuse效果
三种Lightmapping模式的比较
• • • • Non-Directional 简单且较高效的表现方 式 只有diffuse效果 Directional 支持Bump效果 缺失Specular效果
•
GI的局限
• Realtime GI和Baked GI都只能影响static的 Object,非static Object无法受全局光照影响, 也无法影响static Object
Light Probes
Light Probes简介
• • 采样每个探测点Probe处的光照信息,将临近点的采 样结果插值映射到动态物体上。 高效的实时映射,使动态物体与静态场景很好的融 合。
实时全局光照 Realtime GI
• 使用Realtime GI
• 光源的Baking类型设为 “Realtime”
•
•
勾选“Precomputed Realtime GI”
光源的Bounce Intensity大于0,等于0 的时候就是一般局部实 时光照 依然只影响“Lightmap Static”的Object
实时全局光照 Realtime GI
• Realtime GI的实现方式
• 内部实现也是lightmap的方 式,预计算场景内所有可能 的光线反射信息,而不是固 定灯光条件下的反射信息 Directional Specular的实 现方式不同,使用三张纹理 (Intensity,Direction, Normal),代价相当于一个 un-shadowed的光源
•
5.x
Unity3d游戏场景优化
Unity3d游戏场景优化涉及到Lod技术 (Levels of Detail,多细节层次),选择剔除(Culling),光照贴图(Lightmap)(一) 光照贴图动态实时灯光相比静态灯光,非常耗费资源。
所以除了能动的角色和物体静态的地形和建筑,通通使用Lightmap。
强大的Unity内置了一个强大的光照图烘焙工具Beast,这个东东是Autodesk公司的产品(可怕的垄断,感觉和3d沾边的软件丫都要插一手)。
据说用来制作过杀戮地带和镜之边缘。
镜之边缘建筑场景漂亮干净的光影,Lightmap的效果。
在Unity中制作Lightmap很方便,调节几个参数后直接烘焙即可。
支持GI,Skylight,效果一流!!!当然你需要一台好点的机器,不然漫长的烘焙过程你就有的等了。
内置的光照图烘焙工具BeastP场景准备和光照图烘焙点选Window --> Lightmapping 打开光照图烘焙面板:1.确认所有将要被用来烘焙光照贴图的网格体 UVs正确无误. 最简单的办法是在meshimport settings中选择 Generate Lightmap UVs选项(由Beast自动分uv)2.在Object面板中将所有网格体或地形标注为 static –这将告诉 Unity, 这些物体将不会被移动和改变并且可以被赋予光照贴图。
3.为了控制光照贴图的精度, 进入Bake 面板并调整Resolution 的值. (为了更好的了解你的lightmap texels使用情况, 在Scene 视窗中找到Lightmap Display 小窗口并且选择ShowResolution).1. 点击 Bake 按钮。
2. Unity Editor's 会出现一个进度条,位置处于右下角.3. 当烘焙结束, Lightmap Editor窗口会显示已经烘焙好的光照图.Scene 和 game 视图会同时自动更新–现在你的场景已经有了光照图的效果! Unity Lightmap的设置还有更详细和更高端的内容,请参考自带的文档!(二) LODLOD(Level-of-detail)是最常用的游戏优化技术。
Unity烘焙教程
unity自带LightMapping和3Ds Max烘焙贴图的小对比对于做虚拟现实的朋友来说,烘焙贴图应该不是一个陌生的东西。
想要在有限性能的电脑上面即时运算较好的光影效果,一般都会采用烘焙贴图的方法。
而除了在3dmax里面烘焙贴图之外,Unity3D也自带了LightMapping烘焙贴图的功能。
下面我们来做一个小例子,对两者的意义和效果做一个小对比。
在3dmax里面,我简单的建立了几个模型,并分别赋予他们不同的颜色:然后使用3dmax自带的光线追踪渲染一下,会出现这样的效果:很明显的,光线追踪之后的渲染效果比没有光线追踪时立体感强了很多。
这是因为高级渲染器模拟了真实环境里面光线的各种反射和散射,使物体看起来接近真实的效果。
我们所要做的烘焙,其实就是把这种经过高级渲染器计算的光影效果,记录在贴图上面。
我对上面的几个物体展了UV,并使用3dmax的烘焙功能,烘焙出相应的贴图。
并把这个带着UV信息的模型导出为FBX,放进Unity里面。
在unity里面,我拉出了两个模型,一个按照原来的颜色直接给予他材质,另外一个把3dmax里面烘焙的贴图贴上了模型,会出现上图的情况。
场景里面也没有打灯光,假如是只有颜色的材质时,模型会没有任何的轮廓和立体感。
而贴上了烘焙贴图的模型,看起来会和在3dmax里面使用光线追踪时渲染的效果差不多。
接下来我们对只有颜色的这个模型进行LightMapping烘焙处理。
选择该模型,然后在Static里面选择Lightmap Static。
在菜单栏的Window——>lightMapping打开lightMapping面板,在bake栏里面设置一下烘焙的参数,我这里用了如下参数:设置好之后,就可以烘焙了,在烘焙之前先保存场景,然后点击Bake Scene按钮。
经过漫长的等待(等待的时间取决于你的模型的复杂程度),烘焙结束,生成了贴图,我们可以在maps里面查看:这时候,我们可以进行一个小对比了:同样是场景里面没有灯光,但不论是经过Lightmapping烘焙的模型,还是在3DMax里面烘焙贴图的模型,都有了较为真实的光影效果。
unity 灯光-烘焙光照贴图剖析
灯光-Light对于每一个场景灯光是非常重要的部分。
网格和纹理定义了场景的形状和外观,而灯光定义了场景的颜色和氛围。
可以通过从菜单中选择 GameObject->Light并将其添加到你的场景中。
有3种类型的灯光。
一旦添加了一个灯光你就可以像操作其他物体一样操作它。
相关属性介绍◆Type:灯光的类型⏹Directional:平行灯,类似太阳光;⏹Point:点光源,类似灯泡;⏹Spot:聚光灯,类似舞台聚光灯;◆Baking:该选项有三个选择⏹Realtime:即光源不参与烘焙,只作用于实时光照;⏹Baked:表示光源只在烘焙时使用⏹Mixed:该光源会在不同的情况下做不同的响应;在烘焙时,该光源会作用于所有参与烘焙的物体;在实际游戏运行中,该光源会作为实时光源作用于那些不参与烘焙的物体或者动态的物体(不作用于静态的物体,就是勾选了Static);◆Color:光源的颜色,根据不同的环境设置不同的颜色,营造出不同的氛围;◆Intensity:光线强度;◆Bounce Intensity:光线的反射强度;◆Shadow Type:设置是否显示光源作用在的物体的阴影,⏹No Shadows不显示阴影,阴影不存在;⏹Hard Shadows:硬阴影(无过滤),效果不是很自然比较生硬;⏹Soft shadows:柔化阴影,更加贴近实际生活中的阴影显示,但比较消耗资源;◆Strength:阴影黑暗程度,取值范围0~1◆Resolution:阴影的清晰度,细化度,越高消耗越大;◆Bias:阴影的偏移量,越小,物体表面会有来自它自身的阴影,太大光源就会脱离了接收器;◆Cookie:灯光投射的纹理,如果灯光是聚光灯和方向灯就必定是一个2D纹理,如果是点光源必须是一个Cubemap(立体贴图);◆Cookie Size:缩放Cookie的投影,只适用于方向光◆Draw Halo:如果勾选,那光源带有一定半径范围的球形光源◆Flare:在选中的光源的位置出现镜头光晕;◆Render Mode:此项决定了选中的光源的重要性,影响照明的保真度和性能;⏹Auto:渲染的方法根据附近灯光的亮度和当前的质量设置在运行时由系统确定;⏹important灯光是逐个像素渲染的;⏹Not Important灯光总是以最快速度渲染;Culling Mask:剔除遮罩,类似摄像机的遮罩,选中指定的层收到光照影响,未选中的不受到光照影响;设置全局光照和烘焙光照贴图-LightMap一个场景中灯光添加多了资源消耗也就大了,为了降低资源的消耗,可以选择烘焙光照贴图;把光源的效果烘焙到贴图上,形成自带光源效果的贴图,这样就可以减少灯光的使用。
游戏引擎中三大及时光照渲染方法介绍(以unity3d为例)
重要:在目前市面上常见的游戏引擎中,主要采用以下三种灯光实现方式:顶点照明渲染路径细节 Vertex Lit Rendering Path Details正向渲染路径细节 Forward Rendering Path Details延迟光照渲染路径的细节 Deferred Lighting Rendering Path Details以unity3d为例,以下将详细讲解三种灯光渲染方式的实现、原理及缺陷。
顶点照明渲染路径细节Vertex Lit Rendering Path DetailsVertex Lit path generally renders each object in one pass, with lighting from all lights calculated at object vertices.顶点照明渲染路径通常在一个通道中渲染物体,所有光源的照明都是在物体的顶点上进行计算的。
It's the fastest rendering path and has widest hardware support (however, keep in mind: it does not work on consoles).顶点照明渲染路径是最快的渲染路径并且有最广泛的硬件支持(然而,请记住:它无法工作在游戏机上)。
Since all lighting is calculated at vertex level, this rendering path does not support most of per-pixel effects: shadows, normal mapping, light cookies, highly detailed specular highlights are not supported.由于所有的光照都是在顶点层级上计算的,此渲染路径不支持大部分的逐像素渲染效果:如,阴影、法线贴图、灯光遮罩、高精度的高光。
lightmap原理
lightmap原理
Lightmap是一种用于实时计算的光照渲染技术,它是一张保存了场景中各种表面的光照信息的二维纹理,通常与场景相结合,以提供逼真的光照效果。
Lightmap技术的基本原理是将场景中各种表面提交到计算机系统中,计算出每个表面上的光照信息,然后将这些光照信息存储到一张纹理图中。
这张纹理图被称为lightmap,由于lightmap中保存了所有几何形状表面的光照信息,因此通常可以用于实现不同的光照方案。
一般来说,实现Lightmap需要进行以下的步骤:
1. 创建场景模型,包括地形、建筑、道路等几何形状的模型。
2. 选择合适的光源,对场景进行照明。
3. 计算每个表面上的光照信息,根据光照方程计算出反射、折射、漫反射等光照效果。
4. 投射光源,将光照信息映射到场景模型的表面上,生成lightmap纹理图。
5. 将lightmap与场景模型进行合并,实现逼真的光照效果。
总之,Lightmap技术通过在场景模型中计算和储存光照信息,实现了逼真的光照效果,是目前计算机图形处理中常用的一种技术。
unity3d贴图说明
Unity3D美术方面贴图我们都知道,一个三维场景的画面的好坏,百分之四十取决于模型,百分之六十取决于贴图,可见贴图在画面中所占的重要性。
在这里我将列举一些贴图,并且初步阐述其概念,理解原理的基础上制作贴图,也就顺手多了。
我在这里主要列举几种UNITY3D中常用的贴图,与大家分享,希望对大家有帮助。
01首先不得不说的是漫反射贴图:漫反射贴图diffuse map漫反射贴图在游戏中表现出物体表面的反射和表面颜色。
换句话说,它可以表现出物体被光照射到而显出的颜色和强度。
我们通过颜色和明暗来绘制一幅漫反射贴图,在这张贴图中,墙的砖缝中因为吸收了比较多的光线,所以比较暗,而墙砖的表面因为反射比较强,所以吸收的光线比较少。
上面的这张图可以看出砖块本身是灰色的,而砖块之间的裂缝几乎是黑色的。
刨去那些杂糅的东西,我们只谈明显的,漫反射贴图表现了什么?列举一下,物体的固有色以及纹理,贴图上的光影。
前面的固有色和纹理我们很容易理解,至于后面的光影,我们再绘制漫反射贴图的时候需要区别对待,比如我们做一堵墙,每一块砖都是用模型做出来的,那么我们就没有必要绘制砖缝,因为这个可以通过打灯光来实现。
可是我们如果用模型只做了一面墙,上面的砖块是用贴图来实现,那么就得绘制出砖缝了。
从美术的角度,砖缝出了事一条单独的材质带外,还有就是砖缝也是承接投影的,所以在漫反射图上,绘制出投影也是很有必要的,如下图:没有什么物体能够反射出跟照到它身上相同强度的光。
因此,让你的漫反射贴图暗一些是一个不错的想法。
通常,光滑的面只有很少的光会散射,所以你的漫反射贴图可以亮一些。
漫反射贴图应用到材质中去是直接通过DiffuseMap的。
再命名规范上它通常是再文件的末尾加上“_d”来标记它是漫反射贴图。
凹凸贴图Bump maps凸凹贴图可以给贴图增加立体感。
它其实并不能改变模型的形状,而是通过影响模型表面的影子来达到凸凹效果的。
再游戏中有两种不同类型的凸凹贴图,法线贴图(normalmap)和高度贴图(highmap)。
unity lightmap原理
unity lightmap原理
《Unity Lightmap原理》
Unity的Lightmap是一种用于静态场景中的光照信息的技术,它可以帮助开发者在游戏中尽可
能真实地模拟光照效果。
Lightmap的实现原理主要是通过预烘焙的方式,将场景中的光照信息计算出来并保存到贴图中。
在使用Lightmap之前,首先需要设置场景中的光照。
这可以通过Unity内置的照明系统或者第三方的照明插件来完成。
当光照设置完成后,开发者可以通过Unity的菜单选择“Bake”来触发Lightmap的计算。
在计算过程中,Unity会通过光线追踪等技术,计算每个像素点的光照值,并将其保存到贴图中。
这些贴图包括主光照贴图、间接光照贴图等。
同时,Unity还会计算物体表面的阴影信息,并将其保存为阴影贴图。
当游戏运行时,Unity会根据场景中物体的位置和光照信息,自动选择合适的Lightmap贴图来
渲染物体表面的光照。
这样就可以在不实时计算光照的情况下,提升游戏运行的性能表现。
总的来说,Unity的Lightmap原理是通过预烘焙的方式,将场景中的光照信息计算出来并保存
到贴图中,从而实现在游戏中尽可能真实地模拟光照效果的目的。
如此,开发者可以在不牺牲性能的情况下,获得更好的视觉体验。
unity面试题(答案)
unity⾯试题(答案)⼀.什么是渲染管道?是指在显⽰器上为了显⽰出图像⽽经过的⼀系列必要操作。
渲染管道中的很多步骤,都要将⼏何物体从⼀个坐标系中变换到另⼀个坐标系中去。
主要步骤有:本地坐标->视图坐标->背⾯裁剪->光照->裁剪->投影->视图变换->光栅化。
⼆.如何优化内存?有很多种⽅式,例如1.压缩⾃带类库;2.将暂时不⽤的以后还需要使⽤的物体隐藏起来⽽不是直接Destroy掉;3.释放AssetBundle占⽤的资源;4.降低模型的⽚⾯数,降低模型的⾻骼数量,降低贴图的⼤⼩;5.使⽤光照贴图,使⽤多层次细节(LOD),使⽤着⾊器(Shader),使⽤预设(Prefab)。
三、动态加载资源的⽅式?(有时候也问区别,具体请百度)1.Resources.Load();2.AssetBundle四:什么是协同程序?在主线程运⾏的同时开启另⼀段逻辑处理,来协助当前程序的执⾏,协程很像多线程,但是不是多线程,Unity的协程实在每帧结束之后去检测yield的条件是否满⾜。
五:中的碰撞器和触发器的区别?碰撞器是触发器的载体,⽽触发器只是碰撞器⾝上的⼀个属性。
当Is Trigger=false时,碰撞器根据物理引擎引发碰撞,产⽣碰撞的效果,可以调⽤OnCollisionEnter/Stay/Exit函数;当Is Trigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调⽤OnTriggerEnter/Stay/Exit函数。
如果既要检测到物体的接触⼜不想让碰撞检测影响物体移动或要检测⼀个物件是否经过空间中的某个区域这时就可以⽤到触发器六:物体发⽣碰撞的必要条件?两个物体都必须带有碰撞器(Collider),其中⼀个物体还必须带有Rigidbody刚体,⽽且必须是运动的物体带有Rigidbody脚本才能检测到碰撞。
七:请简述ArrayList和List的主要区别?####ArrayList存在不安全类型(ArrayList会把所有插⼊其中的数据都当做Object来处理) 装箱拆箱的操作(费时) List是接⼝,ArrayList是⼀个实现了该接⼝的类,可以被实例化⼋:如何安全的在不同⼯程间安全地迁移asset数据?三种⽅法1.将Assets⽬录和Library⽬录⼀起迁移2.导出包,export Package3.⽤unity⾃带的assets Server功能九:OnEnable、Awake、Start运⾏时的发⽣顺序?哪些可能在同⼀个对象周期中反复的发⽣Awake –>OnEnable->Start,OnEnable在同⼀周期中可以反复地发⽣。
unity 灯光烘焙原理
unity 灯光烘焙原理Unity是一款广泛应用于游戏开发的引擎,其中灯光烘焙是其重要的功能之一。
本文将介绍Unity灯光烘焙的原理和作用。
一、什么是灯光烘焙灯光烘焙(Lightmapping)是指将场景中的灯光效果预先计算并存储为纹理的过程。
在运行时,游戏引擎会根据这些预计算的灯光纹理来渲染场景,从而提高渲染效率和画面质量。
二、灯光烘焙的作用1. 提高渲染效率:灯光烘焙可以减少实时计算光照的工作量,从而提高渲染性能。
在运行时,引擎只需要根据预计算的灯光纹理来渲染场景,大大减少了CPU和GPU的负荷。
2. 提高画面质量:通过灯光烘焙,可以实现更加真实的光照效果。
预计算的灯光纹理可以包含更多的光照信息,使场景中的物体产生更加明暗的阴影,增强真实感。
三、灯光烘焙的原理1. 光照贴图:灯光烘焙的核心原理是将场景中的光照信息计算并存储为光照贴图(Lightmap)或光照图(Lighting Map)。
光照贴图是一张纹理,其像素值表示场景中每个点的光照强度和颜色。
2. 光照计算:在进行灯光烘焙之前,需要设置场景中的光源和材质属性。
Unity会根据光源的类型(如点光源、聚光灯、方向光等)和材质的属性(如反射率、折射率等)来计算场景中每个点的光照强度和颜色。
3. 光照采样:为了生成光照贴图,Unity会在场景中的每个点进行光照采样。
采样过程中,会考虑光源的位置、颜色、强度等因素,以及材质的反射率、折射率等属性。
通过多次采样和计算,得到最终的光照贴图。
4. 光照传递:在生成光照贴图之后,Unity会将光照贴图应用到场景中的物体上。
渲染时,引擎会根据物体的UV坐标和光照贴图的像素值来确定物体的光照强度和颜色。
通过多次传递光照,实现场景中物体的明暗效果。
5. 光照合并:在场景中存在多个物体时,为了提高渲染效率,Unity会将多个物体的光照贴图进行合并。
合并过程中,需要考虑物体之间的遮挡关系,以及光照的传递效果。
通过合并光照贴图,可以减少纹理的数量,提高渲染性能。
202212 虚拟现实技术应用师(初级)考前冲刺卷A3卷
2022.12 虚拟现实技术应用师(初级)考前冲刺卷A3卷1.【单选题】在Unity中可以给场景中的游戏对象添加不同的层级关系,实现这个功能的系统是()。
A:Prefab预制体系统B:Layer层级系统C:GameObject锁定系统D:Physics物理系统正确答案:B2.【单选题】代码transform.Translate(Vector3.forward*moveSpeed*Time.deltaTime),其中Time.deltaTime代表的含义是()。
A:逝去的时间B:将来的时间C:持续时间D:完成上一帧所用的时间正确答案:D3.【单选题】开发者使用Unity会被收取版权分成费用吗()。
A:会B:不会C:超过一定数量的收入会收取D:由签署协议规定正确答案:B4.【单选题】已知OnEnable和OnDisable事件的触发是即时的,下列说法正确的是()。
A:OnEnable是在脚本状态由disabled变为enabled状态时触发一次,Unity内部一定将脚本初始置为disabledB:如果我们实例化一个激活的GameObject,并且在挂上一个enabled的脚本后把它加入场景会调用一次OnEnable,并且早于StartC:在脚本由enabled状态变为disabled状态时会调用OnEnableD:在OnEnable里面把脚本设置为disabled,同时在OnDisable中把脚本设置为enabled,不会导致死循环正确答案:B5.【单选题】使用Prefab预制物体的好处是()。
A:Prefab一个重要的优势就是编辑Prefab资源后,场景中所有使用Prefab克隆的游戏对象将全部使用新编辑的资源,无需一个一个的给场景中的对象赋值B:当游戏中需要频繁创建一个物体时,使用Prefab能够节省内存C:当你在一个场景中增加一个Prefab,你就实例化了一个PrefabD:其它选项都正确正确答案:D6.【单选题】在哪个模块下可以修改渲染路径Render Path ()。
Unity3D之Lightmap入门、烘焙贴图、场景技巧
Unity3D之Lightmap入门作者:李志健Unity内置的光照贴图烘培工具是Illuminate Labs 的Beast。
烘培光照贴图流程被完美的整合到Unity中。
这就意味着使用Beast可以根据你的网格物体,材质贴图和灯光属性的设置来烘培你的场景,从而得到完美的光照贴图。
同时也意味着光照图将作为渲染引擎的一部分。
只要你烘培一次光照贴图你就不需要其他任何操作。
光照图将自动指定到物体上。
准备需要烘培的光照贴图的场景从菜单栏选择Window – Lightmapping打开光照图工具窗口。
1.检查你将要烘培的模型上是否存在一个合适的用来定位光照贴图的UVs。
你也可以从mesh import settings面板中的勾选Generate Lightmap UVs选项来生成一个用于定位光照图UV的集。
2.在物体面板中将要烘培光照贴图的物体设置为Static(静态),这样Unity就会知道哪些物体是需要被烘培的。
3.在Bake面板下调整Resolution的值控制光照贴图的分辨率。
(在Scene View面板里勾选上小窗口LightmapDisplay中的Show Resolution选项可以帮助你更直观的查看贴图分辨率设置)。
4.点击Bake(烘培)5.在Unity编辑器底部的状态栏的右边会出现一个进度条。
6.当烘培结束时,你可以从光照图编辑器的底部预览窗口中查看所有烘培好的贴图。
场景和游戏窗口将会更新。
现在在你的场景中已经可以看到光照贴图效果了!Tweaking Bake Settings 调节烘焙设置最终场景的渲染效果取决与你对灯光和烘培选项的更多设置。
让我们来看一个通过基础设置改进光照的质量的小例子。
这是一个简单的场景,包含一组立方提和一个位于场景中心的点光源。
灯光产生硬阴影,看起来这个效果十分的晦暗和不自然。
Selecting the light and opening the Object pane of the Lightmapping window exposes Shadow Radius and Shadow Samples properties. Setting Shadow Radius to 1.2, Shadow Samples to 100 and re-baking produces soft shadows with wide penumbra - our image already looks much better.选择灯光打开物体面板,展开阴影范围和阴影采样属性。
Unity3D教程:关于LightMapping和NavMesh烘焙的动态加载
Unity3D教程:关于LightMapping和NavMesh烘焙的动态加载熟悉Unity的朋友都应该知道,unity有内部LightMapping烘焙和NavMesh寻路的功能。
但这些非常好用的功能,都是基于对某个已经保存的关卡(scene)进行烘焙(Bake)的操作,我一直以为,一般来说这样很难做到外部加载或者动态加载的。
但通过最近一段时间的研究,发现其实这些基于scene的功能,也是可以动态加载的,虽然在使用上是有一定的限制,不过合理利用还是能做到不少想要的效果的。
假设我们限制有这样的项目要求,游戏项目是网页游戏,由于容量的关系,我们所有的场景都是外部动态加载的,但为了效果好,我们使用了LightMapping烘焙了场景,而为了有寻路功能,我们对场景进行了NavMesh的烘焙。
我们希望把这个烘焙了的场景像一般的assetBundle那样从外部加载进来。
现在我们需要把这个烘焙好的场景导出成assetBundle。
使用的方法是:BuildPipeline.BuildPlayerBuildPipeline.BuildPlayer 编译播放器例如我们把上面烘焙好的场景保存成scene001,那么我们就可以写成:这样我们可以把这个scene001的场景导出成了scene001.unity3d的assetBundle。
当我们想从外部加载这个烘焙好的场景时,可以使用WWW来下载他,但用法和一般的www加载assetBundle有点不同的用法。
假设我们把这个导出的asssetBundle放在了一个路径(url),那么我们可以这样加载它:可以看出,在前两步,我们的做法和普通的www加载assetBundle是一样的,都是获取一个新的WWW资源,但下面的一步就有点不一样,由于他是一个场景,而不是一个GameObject,所以我们不能通过Instantiate 来实例化他,而是用Application.LoadLevel 或者Application.LoadLevelAdditive 之类的加载关卡的方法来读取他的。
unity实现物体高亮闪烁效果的方法
unity实现物体高亮闪烁效果的方法在Unity中,实现物体高亮闪烁效果可以通过以下步骤实现:第一步:创建高亮材质首先,我们需要创建一个新的材质来实现高亮效果。
在Unity中,创建一个新的材质可以通过右键点击Project面板中的任意位置,选择"Create" > "Material"。
然后,将新材质命名为"Highlight"或其他你喜欢的名称。
第二步:设置高亮材质属性双击打开新创建的材质,确保Inspector面板处于显示状态。
在Inspector面板中,我们需要将材质的颜色属性设置为高亮的颜色。
点击颜色属性后,选择一个适合的颜色(例如黄色)。
你还可以根据需要调整材质的其他属性,如透明度、光照、反射等。
第三步:编写脚本实现高亮闪烁逻辑创建一个新的C#脚本,可以命名为"HighlightObject"或其他你喜欢的名称。
将此脚本附加到你要高亮闪烁的物体上。
在脚本中,我们需要使用Coroutine协程实现高亮闪烁的逻辑。
以下是示例代码:```csharpusing UnityEngine;using System.Collections;public class HighlightObject : MonoBehaviour{public Material highlightMaterial;private Material originalMaterial;private Renderer objectRenderer;private void Start(){objectRenderer = GetComponent<Renderer>(); originalMaterial = objectRenderer.material;}public void StartHighlight(){StartCoroutine(BlinkHighlight());}private IEnumerator BlinkHighlight(){objectRenderer.material = highlightMaterial; yield return new WaitForSeconds(0.5f);objectRenderer.material = originalMaterial;}}```在上面的代码中,我们首先定义了一个公共变量highlightMaterial,用于存储高亮材质。
unity3D学习之光照贴图
光照贴图完全集成到Unity 中,可在编辑器(Editor) 中创建整个关卡,然后对其进行光照映射,让所有材质自动获取光照贴图,无需手动进行。
对Unity 中的光照贴图来说,所有灯光属性会直接映射到Beast 光照烘培贴图工具中并烘培到纹理,提高性能。
Unity 专业版扩展了全局照明(Global Illumination) 功能,可烘培出真实、美观的光照,实时的相反操作则不可行。
此外,Unity 专业版提供天光和发光材质,使场景照明更加有趣。
在本页中,您将看到光照贴图(Lightmapping) 窗口中出现的所有属性的深入描述。
要打开光照贴图(Lightmapping) 窗口,请选择窗口(Window) –光照贴图(Lightmapping) 选项。
检视器顶部有三个场景筛选器(Scene Filter) 按钮,供用户将操作应用到所有对象或限制在灯光或渲染器内。
对象(Object)每个对象的灯光、网格渲染器和地形烘培设置根据当前的选择而定。
单击场景筛选器(Scene Filter) 按钮可在层级视图(Hierarchy) 中轻松看到灯光、渲染器或地形。
文章来自【狗刨学习网】网格渲染器和地形(Mesh Renderers and Terrains):静态光照贴图(Lightmap Static) 网格渲染器和地形(Mesh Renderers and Terrains) 须标为静态才能进行烘培。
光照贴图比率(仅用于网格渲染器(Mesh Renderers))值越大,网格渲染器的分(Scale In Lightmap) 辨率越高。
最终分辨率将成比例(光照贴图缩放(Scale))*(对象的世界坐标空间所占面积)*(全局烘培设置分辨率(Resolution) 值)。
值设置为0 将不烘培对象(但仍会影响其他烘培对象)。
光照贴图大小(Lightmap Size) (仅用于地形)地形实例的光照贴图大小。
地形不与其他对象共用图集,而是有自己的光照贴图。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学IT技能上我学院网
Unity3D光照贴图的Lightmapping技术教程今天我们来讲解Unity3d中光照贴图Lightmapping技术,Lightmapping光照贴图技术是一种增强静态场景光照效果的技术,其优点是可以通过较少的性能消耗使静态场景看上去更加真实,丰富,更加具有立体感;缺点是不能用来实时地处理动态光照。
当游戏场景包含了大量的多边形时,实时光源和阴影对游戏的性能的影响会很大。
这时使用Lightmapping技术,将光线效果预渲染成贴图使用到多边形上模拟光影效果。
烘焙参数
Object选项卡
“All”组中的参数
Lightmap Static:选中则表示该物体将参与烘焙。
Scale In Lightmap:分辨率缩放,可以使不同的物体具有不同的光照精度。
这样可以根据实际场景,令远景中的物体采用较低的分辨率,节省光照贴图的存储空间。
而较近的物体采用较高的分辨率,使贴图更加逼真。
学IT技能上我学院网
Lightmap Index:渲染时所使用的光照贴图索引。
值为0,表示渲染时使用烘焙出来的第一张光照图;值为255,表示渲染时不使用光照图。
Tiling X/Y和Offset X/Y共同决定了一个游戏对象的光照信息在整张光照图中的位置,区域。
“Lights”中的参数
Lightmapping:有3种类型可选
1)RelatimeOnly:光源不参与烘焙,只作用于实时光照。
2)Auto:表示光源在不同的情况下作不同的响应。
在烘焙时,该光源会作用于所有参与烘焙的物体;在实际游戏运行中,该光源会作为实时光源作用于那些动态的或者没有参与过烘焙的物体,而不作用于烘焙过的静态物体。
在使用Dual Lightmaps的情况下,对于小于阴影距离(shadow Distance,Unity中用于实时生成阴影的范围,范围之外将不进行实时生成阴影)的物体,该光源将作为实时光源作用于这些物体,不管是静态还是动态。
3)表示光源只在烘焙时使用,其他时间将不作用于任何物体。
学IT技能上我学院网
Color:光源颜色。
Intensity:光线强度。
Bounce Intensity:光线反射强度。
Baked Shadows:烘焙阴影。
有三种类型可以选择
1)Off:光源对象不产生阴影。
2)On(Realtime:Hard Shadows):产生轮廓生硬的阴影。
3)On(Realtime:Soft Shadows):产生平滑的阴影。
Shadow Samples:阴影采样数,采样数越多生成阴影的质量越好。
Shadow Angle:光线衍射范围角度。
Bake选项卡
Mode:映射方法。
1)Single Lightmaps:最简单直接的方法,对性能及空间的消耗相对较小。
可以很好地表现大多数静态场景的光影效果。
学IT技能上我学院网
2)Dual Lightmaps:在近处使用实时光照和部分Lightmap光照,在远处则使用Lightmap 光照,同时在实时光影和静态光影之间做平滑过渡,使得动态光照和静态光照可以很好的融合。
3)Directional Lightmaps:一方面将光影信息保存在光照贴图上,同时还将收集到的光源方向信息保存在另一张贴图中,从而可以在没有实时光源的情况下完成Bump/Spec映射,同时也还原了普通光照图的光影效果。
Quality:生成光照贴图的质量。
Bounces:光线反射次数,次数越多,反射越均匀。
Sky Light Color:天空光颜色。
Sky Light Intensity:天空光强度,值为0时,天空色无效。
Bounces Boost:加强间接光照,用来增加间接反射的光照量,从而延续一些反射光照的范围。
Bounces Intensity:反射光线强度的倍增值。
Final Gather Rays:光照图中每一个单元采光点用来采集光线时所发出的射线数量,数量越多,采光质量越好。
Interpolation:控制采光点颜色的插值方式,0为线性插值,1为梯度插值。
Interpolation Points:用于插值的采光点个数。
个数越多,结果越平滑,但是过多的数量也可能会把一些细节模糊掉。
所以说采光点并不是越多越来,这容易导致过度平滑。
Ambient Occlusion:环境光遮蔽效果。
LOD Surface Distance:用于从高模到低模计算光照贴图的最大世界空间距离。
类似于从高模到低模来生成发现贴图的过程。
Lock Atlas:选中,则会将所有的光照图区域锁定,即将物体使用光照图相关的Tiling X/Y 和Offset X/Y属性锁定,同时也将不可以再调整光照贴图的分辨率属性以及添加新的烘焙物体到光照图。
Resolution:光照贴图分辨率。
勾选视图窗口右下角Lightmap Display面板的ShowResolution选项,即可显示单元大小。
假设Resolution为50,那么在10*10个单位面积的平面网格上将占用光照贴图上500*500个像素的空间。
Padding:不同物体的烘焙图的间距。
学IT技能上我学院网
Maps选项卡
Light Probes:用于设置当前使用的Light Probes Group的引用。
Array Size:设置光照贴图个数。
Compressed:启用使用压缩纹理格式。
烘焙
Bake Scene有三个选项:
1)Bake Scene:烘培整个场景,如果场景中有编辑好的Light Probes,那么也同时烘焙Light Probes。
2)Bake Selecte:只烘焙选择的部分。
采用Bake Selected功能在原有基础上进行添加或者更新,同时系统会保留之前的光照图。
这样不会因为部分改动而需要重新烘焙整个场景,只需要烘焙改动的部分,大大提高了烘焙效率。
3)Bake Probes:只烘焙Light Probes。
示例
1 创建一个项目,在场景中绘制如下:
学IT技能上我学院网
选中Cube,在Inspector面板中勾选Static,这样可以使得Cube参与烘焙。
2 打开菜单栏中Window->Lightmapping选项,会弹出Lightmapping视图。
此时选中场景中的Directional Light,在Lightmapping视图中的Object标签页中会出现对光源的设置。
参数设置如下:
学IT技能上我学院网
学IT技能上我学院网
学IT技能上我学院网
学IT技能上我学院网
5 单击Lightmapping视图右下角的Bake Scene,选中Bake Scene映射模式,就开始生成Lightmaps。
前后对比效果如下:
1)烘焙后:
2)烘焙前:
学
IT 技能上我学院网
Unity3D|Cocos|php|HTML5|Java|ios|Android|C#|AS3|UI 设计|原画设计|动漫美术|游戏策划
注:必须将plane 的属性设置为Static ,否则Cube 将不会有阴影显示。
没有将plane 的属性设置为Static ,效果图如下所示:
好了这就是今天的内容,希望对大家有帮助!想获取更多Unity3D 视频教程,请关注我学院网:/。