- 用户指南
- Components
- 寻路
- 动画组件
- 资源组件
- 音频组件(AudioComponent)
- 音频侦听器(AudioListener)
- 音频源(AudioSource)
- 音频过滤器(AudioFilter)(仅限专业版)
- 混响区域(ReverbZone)
- 麦克风(Microphone)
- 物理组件(PhysicsComponent)
- 箱体碰撞体(BoxCollider)
- 胶囊碰撞体(CapsuleCollider)
- 角色控制器(CharacterController)
- 角色关节(CharacterJoint)
- 可配置关节(ConfigurableJoint)
- 恒定力(ConstantForce)
- 固定关节(FixedJoint)
- 铰链关节(HingeJoint)
- 网格碰撞体(MeshCollider)
- 物理材质(PhysicsMaterial)
- 刚体(Rigidbody)
- (SphereCollider)
- 弹簧关节(SpringJoint)
- 交互布(InteractiveCloth)
- 蒙皮布(SkinnedCloth)
- 车轮碰撞体(WheelCollider)
- 游戏对象(GameObject)
- 图像效果(ImageEffectScripts)
- 高光溢出和镜头光晕(BloomandLensFlare)
- 模糊(Blur)
- 相机运动模糊(MotionBlur)
- 颜色修正曲线(ColorCorrectionCurve)
- 颜色修正(ColorCorrection)
- 颜色修正查找纹理(ColorCorrectionLookupTexture)
- 对比度增强(ContrastEnhance)
- 对比度拉伸(ContrastStretch)
- 起皱(Crease)
- 视野深度(DepthofField)3.4
- 视野深度(DepthofField)
- 边缘检测(EdgeDetection)
- 鱼眼(Fisheye)
- 全局雾(GlobalFog)
- 发光(Glow)
- 灰度(Grayscale)
- 运动模糊(MotionBlur)
- 噪波和颗粒(NoiseAndGrain)
- 噪波(Noise)
- 屏幕叠加(ScreenOverlay)
- 棕褐色调(SepiaTone)
- 边缘检测效应
- 阳光照射(SunShaft)
- 屏幕空间环境光遮蔽(SSAO)(ScreenSpaceAmbientOcclusion(SSAO))
- 倾斜位移(TiltShift)
- 色调映射(Tonemapping)
- 旋转(Twirl)
- 渐晕(Vignetting)(和色差(ChromaticAberration))
- 状态同步详细信息
- 旋涡
- 设置管理器(SettingsManager)
- 网格组件(MeshComponents)
- 网络组
- 效果
- 渲染组件
- 变换组件(TransformComponent)
- UnityGUI组
- 向导
- 地形引擎指南(TerrainEngineGuide)
- 树木创建器指南
- 动画视图指南
- GUI脚本指南
- 网络参考指南
- 移动设备上的网络连接
- 高级网络概念
- Unity中的网络元素
- RPC详细信息
- NetworkLevelLoading
- 主服务器
- 最小化网络带宽
- 社交API
- 内置着色器指南
- Unity的后台渲染
- 着色器参考
- ShaderLab语法:Shader
- ShaderLab语法:Properties
- ShaderLab语法:子着色器(SubShader)
- ShaderLab语法:Pass
- ShaderLabsyntax:Color,Material,Lighting
- ShaderLab语法:剔除和深度测试(Culling&DepthTesting)
- ShaderLab语法:纹理组合器(TextureCombiners)
- ShaderLab语法:雾(Fog)
- ShaderLab语法:Alpha测试(Alphatesting)
- ShaderLab语法:混合(Blending)
- ShaderLab语法:通道标记(PassTags)
- ShaderLab语法:名称(Name)
- ShaderLab语法:绑定通道(BindChannels)
- ShaderLab语法:使用通道(UsePass)
- ShaderLab语法:GrabPass
- ShaderLab语法:子着色器标记(SubShaderTags)
- ShaderLab语法:回退(Fallback)
- ShaderLab语法:自定义编辑器(CustomEditor)
- ShaderLab语法:其他命令
- ShaderLab语法:Pass
- 高级ShaderLab主题
- ShaderLab内置值
- 其他
- 网络视图
- 导航网格 (Navmesh) 和寻路 (Pathfinding)(仅限专业版 (Pro))
- Mecanim 动画系统
- 动画状态机
- 混合树 (Blend Tree)
- 在 Mecanim 中使用动画曲线 (Animation Curves)(仅限专业版 (Pro))
- 循环动画片段
- Animation State Machine Preview (solo and mute)
- 动画参数
- 旧动画系统
- 使用类人动画
- 动画层
- 资源导入与创建
- 音轨模块
- 减少文件大小
- 光照贴图 UV
- 资源准备和导入
- 如何安装或升级标准资源 (Standard Assets)?
- FBX 导出指南
- 从 Maya 中导入对象
- 从 Cinema 4D 中导入对象
- 从 3D Studio Max 中导入对象
- 从 Cheetah3D 中导入对象
- 从 Modo 中导入对象
- 从 Lightwave 中导入对象
- 从 Blender 中导入对象
- 为优化性能建模角色
- 如何使用法线贴图 (NormalMaps)?
- 如何修正已导入模型的旋转?
- 程序材质
- 如何使用水?
- 分析器(仅限专业版)
- 绘制调用批处理
- 遮挡剔除(仅限专业版)
- Unity 中的高动态范围 (High Dynamic Range) 渲染
- 在 Unity 4 中使用 DirectX 11
- 文本场景文件格式(仅限专业版)
- 使用网络播放器模版
- 平台依赖编译
- 日志文件
- 首选项
- 粒子系统曲线编辑器
- 渐变编辑器
- 怎样制作网格粒子发射器?(旧粒子系统)
- 深入了解光照贴图
- 光照贴图快速入门
- 着色器
- 动画脚本(旧版)
- 自定义
- 布局模式
- 扩展编辑器
- 网络实例化
- 材质和着色器
- 如何使用细节纹理?
- 着色器:顶点和片段程序
- Unity 中的阴影
延时光照渲染路径
本页面详细说明了延时光照 (Deferred Lighting) 渲染路径。有关延时光照的技术概述,请参阅本文。
延时光照 (Deferred Lighting) 渲染路径是具有最高光照和阴影保真度的渲染路径。影响物体的光线数量没有限制,并且采用逐像素的方式评估所有光照,这意味着这些光照将全部与法线贴图准确交互。此外,所有光照都可有 cookie 和阴影。
延时光照有这样一个优点:无论光线照射的物体数量是多少,光照的处理开销与屏幕上的光线尺寸成正比。因此,保持较小的光线尺寸可提高性能。延时光照还有高度一致和可预测的行为。每束光线的效果都是按逐像素光照计算的,因此不会出现在大三角形等上崩溃的光照计算。
延时光照的缺点是没有实际的抗锯齿支持,也不能处理半透明物体(这些必须使用“正向渲染”(Forward Rendering) 来渲染)。同时不支持网格渲染器 (Mesh Renderer) 的接收阴影 (Receive Shadows) 标识,并且剔除遮蔽图的支持方式也有限。(具体而言,您最多可以使用四个剔除遮蔽图。即:剔除层遮蔽图必须至少包含减去 4 个任意层后的所有层,所以 32 层中必须设置 28 层。否则会得到图形假象。)
要求
延时光照只能用于 Unity 专业版。延时光照要求 Shader Model 3.0(或更高版本)的图形卡,并且支持深度 (Depth) 渲染纹理和双面模板缓冲区。大多数 2004 年后制作的图形卡都支持延时光照,包括 GeForce FX 或其更高版本、Radeon X1300 或其更高版本、Intel 965 / GMA X3100 或其更高版本。然而,目前移动平台和 Flash 平台都不支持延时光照。
性能注意事项
延时光照中实时光线的渲染开销与光线照射的像素数量成正比,而非取决于场景的复杂性。所以微小点或者聚光灯耗费的渲染资源非常少。如果它们被场景物体完全或部分遮住,甚至会更加便宜。
当然,带阴影的光源比不带阴影的光源要昂贵许多。延时光照中,阴影投射物体仍需为每个阴影投射光进行一次或多次渲染。而且,产生阴影的光照着色器的渲染开销比禁用阴影时使用的光照着色器更高。
实施细节
当使用延时光照 (Deferred Lighting) 时,Unity 中的渲染过程分为三步,如下所示:-
- 基础通道:渲染物体以生成带有深度、法线和高光强度的屏幕空间缓冲区。
- 光照通道:使用上一步生成的缓冲区将光照计算到另一个屏幕空间的缓存区中。
- 最终通道:再次渲染物体。将已计算好的光照取出并与颜色纹理混合,然后添加任何环境/放射性光照。
带有不能处理延时光照着色器的物体在该过程完成后会使用正向渲染路径进行渲染。
基础通道
基础通道对每个对象渲染一次。视图空间法线和高光强度被渲染进单个 ARGB32 渲染纹理中(法线在 RGB 通道、高光强度在 A 通道)。如果平台和硬件支持将 Z 缓冲区读取为纹理,那么深度不会进行明确渲染。如果 Z 缓冲区不能以纹理的方式进行访问,则用着色器替换在其他某个渲染通道中渲染深度。
基础通道的结果是被屏幕内容填满的 Z 缓冲区以及带有法线和高光强度的渲染纹理 (Render Texture)。
光照通道
光照通道根据深度、法线和高光强度计算光照。光照是在屏幕空间中计算的,因此所需的处理时间与屏幕复杂性无关。光照缓冲区是单独的 ARGB32 渲染纹理 (Render Texture),纹理的 RGB 通道有漫反射光照,A 通道有单色高光光照。光照值采用对数值编码,从而提供 比 ARGB32 纹理通常所能达到的动态范围更广的动态范围。延时渲染的唯一光照模式是 Blinn-Phong。
没有跨越相机近平面的点光源和聚光灯被渲染成三维形状,并启用针对场景的 Z 缓冲区测试。这使部分或全部遮挡住的点光源和聚光灯所耗费的渲染资源很少。跨越近平面的方向灯或点光源/聚光灯被渲染成全屏四边形。
如果光源开启阴影,则这些光源会在此通道中加以渲染和应用。请注意阴影并不是“免费”的,需要渲染阴影投射器并运用更加复杂的光线着色器。
可用的唯一光照模式为 Blinn-Phong。如果想要不同的模式,可以通过将内置着色器中修改后的 Internal-PrePassLighting.shader 文件版本放置到“资产”文件夹中名为“资源”的文件夹来修改光照通道着色器。
最终通道
最终通道生成最终渲染图像。所有物体都将用着色器再次渲染,其中着色器将采集光照,将光照与纹理混合,并添加任何放射性光照。光照贴图也会应用到最终通道中。靠近相机时使用实时光照,并只添加烘焙反射光照。这样做可交叉淡化成远离相机的全烘焙光照。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论