草庐IT

Unity --- 光照系统

Metallic Cat 2023-04-04 原文

 

 

 

1.Color是用来调整光的颜色的,Intensity是用来调整光的强度的(光强越大,光就越亮,光强为0时就相当于不发射光了)

2.光照也具有Culling mask,它的功能和摄像机类型,我们可以在这里选择光能够照射到的层,每选择的层就是光照射不到的(无光照)

3.点光源的特点就是从一个点出发,向四周发射光线(球形) --- 它多了一个Range参数,这个range设置的就是点光源的光照范围

1.对于Spot,聚光灯有两个参数,一个是Range,一个是Spot Angle(聚光角度)

Range 指的是聚光灯能够射出的长度,Spot Angle指的是聚光灯锥顶的角度大小

1.圈中的那个按钮如果被点上了,我们才能够在场景中看到光模拟,如果不点的话就不会进行光模拟,咱程序员在改代码的时候一般都不点这个按钮,在场景中不显示光(如果电脑不好又点击显示的话就会导致在移动场景的时候非常卡顿,不利于操作)

2.ctrl + shift +f 可以快速的将摄像机对准当前场景处显示的位置

1.每个组件的顶部最右边都有一本蓝色的小书,点击后就能够打开这个组件的说明文档

1.如果我们想单独让某些物体不显示阴影该怎么办?

选中不想显示阴影的游戏物体,然后在这个游戏物体的mesh render组件中将

1.投射阴影选项选为off,以及不勾选接收阴影选项,这样渲染这个游戏物体时就不会渲染它的阴影同时它也不会受到其它游戏物体的阴影的影响了

1.在投射阴影的选项中,除了on 和 off 外还有两个很有意思的选项,一个是shadows only 选择了这个选项的话对应的游戏物体本身不会被渲染,但是它的阴影会被渲染出来

2.由于渲染阴影是非常消耗性能的,所以我们需要做一个阴影剔除的工作,这个工作其实就是设置一个距离x,如果游戏物体和摄像机之间的距离小于x的话,就渲染这个游戏物体的阴影,如果和摄像机之间的距离大于x的话就不渲染这个游戏物体的阴影,以此来起到一个优化的作用

Ambient --- 周围环境的

1.点击Unity上方的windows,选择lighting,然后在inspector面板中调出lighting面板,选择场景scene

1.第一个ambient source 指的是环境光的来源,第二个是强度,第二个是全局光照的算法选择

2.环境光是会对场景中的所有游戏物体造成影响的

1.最后一个参数指的是反射光的反弹次数

2.Unity中的光照是由多种光组合而成的

1.注意和反射光进行区分,反射光指的是光照到天空盒后反射出的光,而间接光指的是光照到游戏物体后反射出的光

2.间接光照是最不好实现的,也是最消耗性能的

3.标记为静态的游戏物体就不能够再移动了

4.由于想让一个场景中的游戏物体能够呈现出间接光时CPU需要处理的计算量非常的大,需要的计算时间很长,所以我们需要在开发期间,将需要显示间接光的游戏物体标记为静态的,然后进行间接光照烘焙,将为了呈现出间接光需要进行的计算提前做好并将计算结果存储到内存中,这样加载场景的时候就只需要读取计算好的结果就可以了,不需要再重新进行计算,大大提升了游戏时的效率,但是问题就是这是静态的,无法动态改变(如今的技术已经能够实现实时光照了,但是需要的硬件性能很高)

1.注意这里能够修改的只有光源,不能修改游戏物体的位置等!

2.这个技术实现的前提是我们已经进行了烘焙(即为了使游戏物体显示间接光提前进行的大量计算,也可以称为预计算),该技术就是以预计算的结果为基进行操作的 

3.使用ctrl + shift +f调整摄像头的前提是我们要先选中摄像头游戏物体,才能用这个快捷键调整它的位置

cache :缓存 preferrence : 参数

1.光照是非常吃性能的,最直观的一个例子就是draw call ,开启光照时渲染游戏物体的draw call数值是关闭光照时渲染游戏物体的draw call的好几倍甚至十几倍

(precomputed --- 预计算)

2.area light --- 区域光,这个光非常的消耗性能,只能在烘焙后看见,正常的情况下是看不见的

1.游戏物体的表面显示的是什么由材质决定,而一个材质受不受光照的影响则是由它对应的shader决定的,如果我们在一个shader中设定了通过它生成的材质都会受到光照的影响的话,那么这个材质就会受到光照影响,否则就不会

1.使用烘焙后我们就会将光照关闭掉,此时所有静态游戏物体的光照效果都用贴图的方式表示出来,但是问题来了,场景中的动态游戏物体没有进行烘焙,所以没有光照效果贴图,同时我们还将实时光给关闭了,也就是说此时动态游戏物体感受不到任何光,变成了纯黑色,与场景格格不入

2.为了解决 1 中的问题,人们开发出了光源侦测技术,使得动态游戏物体在烘焙的场景中运行时也能够发生实时光影变化

3.实现原理是通过light probes(probe : 侦察)组件在场景中设置几个小球,这几个小球的功能是收集当前场景中的光照信息,收集完后进行烘焙,烘焙后将光关闭使其不进行工作,此时动态游戏物体处于场景中的某点时light probes组件就会将收集到的光照信息和游戏物体的位置信息,模型信息等传给光照系统,然后实时渲染出当前游戏物体的光照效果

light probes 组件要以游戏物体的形式添加到场景中

 

 

1.在场景中添加了light probes groub游戏物体(其实就是一个单独挂载了light probe groub组件的游戏物体),场景中就会出现这八个小球,这个八个小球负责接收场景中的光照信息

 

有关Unity --- 光照系统的更多相关文章

  1. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  2. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  3. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  4. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  5. unity---接入Admob - 2

    目录1.AdmobSDK下载地址2.将下载好的unityPackagesdk导入到unity里​编辑 3.解析依赖到项目中

  6. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  7. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  8. ruby - 在没有基准或时间的情况下用 Ruby 测量用户时间或系统时间 - 2

    因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实

  9. ruby - 以毫秒为单位获取当前系统时间 - 2

    在Ruby中,以毫秒为单位获取自纪元(1970)以来的当前系统时间的正确方法是什么?我试过了Time.now.to_i,好像不是我想要的结果。我需要结果显示毫秒并且使用long类型,而不是float或double。 最佳答案 (Time.now.to_f*1000).to_iTime.now.to_f显示包含十进制数字的时间。要获得毫秒数,只需将时间乘以1000。 关于ruby-以毫秒为单位获取当前系统时间,我们在StackOverflow上找到一个类似的问题:

  10. ruby-on-rails - 如何构建复杂的 Rails 系统 - 2

    关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭8年前。Improvethisquestion我们有以下(以及更多)系统,我们将数据从一个应用推送/拉取到另一个:托管CRM(InsideSales.com)Asterisk电话系统(内部)横幅广告系统(openx,我们托管)潜在客户生成系统(自行开发)电子商务商店(spree,我们托管)工作板(本土)一些工作网站抓取+入站工作提要电子邮件传送系统(如Mailchimp,自主开发)事件管理系统(如eventbrite,自主开发)仪表板系统(大量图表和

随机推荐