Unity 项目中如何使用光照
主要参考文档:https://docs.unity3d.com/cn/2019.4/Manual/BestPracticeLightingPipelines.html
1. Global Illumination
图形学中的光照技术是为了模拟真实世界的光照计算,通过各种方法计算光源发射的光线和物体之间交互作用后到达视线的能量强弱。
Global illumination = Direct illumination +Indirect illumination
间接光照不仅会计算光源和物体,还会计算光的能量物体之间的间接传递,得到更真实的效果。一般来说全局光照技术都是为了更好的计算间接光照的算法,所以有时我们也将Indirect Lighting称作GI。
2. Unity GI System
主要的光照信息由GI提供,为了节省实时计算的开销,我们会将物体的光照信息记录下来,静态物件的光照信息烘焙到Lightmap(光照图),动态物件使用烘焙到Light Probes(光照探针)上的光照信息。
理论上反射、折射、阴影也属于全局光照的范畴,所以全局光照还包含了环境光(Skybox)、Reflection、Shadow、AO等光照信息。
3. Which GI System?
Unity项目中如何选择使用哪一种光照方案?
4. Which Light Mode?
Unity Light Type:Directional、Point、Spot、Area
Light Mode:Baked、Mixed、Realtime
在项目中使用哪些灯光类型,每盏灯光使用哪种模式,需要有清晰的规划。
5. Which Mixed Lighting Mode?
Mixed Lighting Mode:Baked Indirect、Shadowmask、Subtractive
Baked Indirect:只烘焙间接光照
Shadowmask:烘焙间接光照和阴影
Subtractive:烘焙直接光照、间接光照和阴影
ShadowMask Mode:Shadowmask、Distance Shadowmask
Shadowmask Mode为Shadowmask时,使用Lightmap_shadowmask上的烘焙阴影。
Shadowmask Mode为Distance Shadowmask时,根据设置的Shadow Distance参数值对实时阴影和烘焙阴影进行融合。
Mixed Lighting Map:Lightmap_light、Lightmap_shadowmask
Mixed灯光产生实时的Direct Lighting与Lightmap_light上的Indirect Lighting一起计算静态物件的光照;Mixed灯光产生的实时阴影与光照图Lightmap_shadowmask上的阴影信息一起计算静态物件的阴影;对动态物件计算实时阴影。
使用混合光照可以理解为间接光照、直接光照、阴影之间进行混合。
关于混合光照的使用,详细可以参考 Unity移动平台下的光照烘焙及优化
6. Which Render Pipeline?
Unity Render Pipeline:3D Template、High-Definition RP(HDRP)、Lightweight RP(LWRP)、Custom SRP
非SRP渲染管线下的光照控制可以参考Unity Volume System的设计。
Unity项目怎样选择Render Pipeline?这应该是首先要考虑的问题,但是在此之前要对Unity的光照系统有基本的了解,所以Unity Render Pipeline这一节放在了文章的最后。
7. How to light a project?
Unity官方Spotlight团队总结的如何在项目中使用光照。