当前位置: 首页 > news >正文

全局光照

global illumination

gi is a system that models(动态模拟的意思) how light is bounced off of surfaces onto other surfaces (indirect light) rather than being limited to just the light that hits a surface directly from a light source (direct light).

modelling (模拟)indirect lighting allows for effects that make the virtual world seem more realistic and connected(更加逼真,更加连续), since objects affect each other’s appearance. once classic example is ‘color bleeding’ where, for example, sunlight hitting a red sofa will casuse red light to be bounced onto the wall behind it.

another is when sunlight hits the floor at the opening of a cave and bounces around inside so the inner parts of the cave are illuminated too.

global illumination in the scene view. note the subtle effect of indirect lighting.

gi concepts

traditionally, video games and other realtime graphics applications have been limited to direct lighting, while the calculations required for indirect lighting were too slow so they could only be used in non-realtime situations such as CG animated films. a way for games to work around this limitation is to calcualte indirect light only for objects and surfaces that are known ahead of time to not move around (that are static). thay way the slow computation can be done ahead of time, but since the objects do not move, the indirect light that is pre-calcualted this way will still be correct at runtime.

unity supports this technique, called baked gi (also known as baked lightmaps), which is named after “the bake” the process in which the indirect light is precalcualted and stored (baked). in addition to indirect light, bakded gi also takes advantage of the greater computation time avaiable to generate more realistic soft shadows from area lights and indirect light than what can normally be archieved with realtime techniques.

additionally, unity 5.0 adds support for a new technique called precomputed realtime gi. it still requires a precomputation phase similar to the bake mentioned above, and it is still limited to static objects.

however, it does not just precompute how light bounces in the scene at the time it is built, but rather it precomputes all possible light bounces and encodes this information for use at runtime.

so essentially for all static objects it answers the question “if any light hits this surface, where does it bounce to?”

unity then saves this information about which paths light can propagate by later use.

the final lighting is done at runtime by feeding the actual lights present into these previously computed light propagation paths.

this means that the number and type of lights, their position, direction and other propertiers can all be changed and the indirect lighting will update accrodingly. similarly it is also possible to change material properties of obejcts, such as their color, how much light they emit themselves.

limitations of gi

both baked gi and precomputed realtime gi have the only static objects can be included in the bake/precomputation— so moving objects can not bounce light onto other objects and vice versa.反之亦然

however they can still pick up bounce light from static objects using LightProbes. light probes are positions in the scene where the light is measured (probed) during the bake/precompuation, and then at runtime the indirect light that hits non-static objects is approximated using the values from the probes

so for example a red ball that rolls up next to a white wall would not bleed its color onto the wall, but a white ball next to a red wall could pick up a red color bleed from the wall via the light probes.

相关文章:

  • Springboot学习之–将springboot注册为windows系统服务(转)
  • django xadmin 安装和使用
  • Linux-Vim基本操作
  • unity手动创建网格
  • hibernate一级缓存session的操作
  • baked lighting
  • 201902142017_《Node.js之事件一二事(1)》
  • machine_math
  • baked light+bake indirect+sampling lightmap
  • linux基础随记
  • 随手练——十六进制转八进制 (不限制长度)
  • 认识DiffuseAndSpecularFromMetallic和UNITY_BRDF_PBS
  • 如何将自发光和漫反射添加到烘焙贴图中
  • Qt+QGIS二次开发:QGIS中使用QgsRubberBand类创建临时图形
  • Shadowmask和Distance Shadowmask的区别
  • 时间复杂度分析经典问题——最大子序列和
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 【面试系列】之二:关于js原型
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • canvas绘制圆角头像
  • javascript 哈希表
  • JAVA多线程机制解析-volatilesynchronized
  • js对象的深浅拷贝
  • Kibana配置logstash,报表一体化
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • spring security oauth2 password授权模式
  • 从零开始的无人驾驶 1
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 关于使用markdown的方法(引自CSDN教程)
  • 观察者模式实现非直接耦合
  • 推荐一个React的管理后台框架
  • 学习笔记:对象,原型和继承(1)
  • python最赚钱的4个方向,你最心动的是哪个?
  • ​2020 年大前端技术趋势解读
  • ​Linux·i2c驱动架构​
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • $jQuery 重写Alert样式方法
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (23)Linux的软硬连接
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (ros//EnvironmentVariables)ros环境变量
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (笔试题)合法字符串
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)Sublime Text3配置Lua运行环境
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .a文件和.so文件
  • .NET CLR基本术语
  • .Net Remoting(分离服务程序实现) - Part.3