Origin
zhuanlan.zhihu.com
Tags
性能优化
渲染
风格化
项目
破晓传说
收藏夹
创建时间
收藏类型
Cubox 深度链接
更新时间
原链接
描述
来自 CEDEC2019 株式会社——小林弘幸
notion image

概述:

初次以本世代主机为主 (要渲染品质) 的系列作品 本次作品的美术目标: —要表现成熟、存在感与紧迫感 —要让新作有品质飞跃提升的感觉
  • 实现该目标的技术与秘诀
—要保留作为系列特征的动漫风格的美术氛围
  • 要有手绘水彩的插画感,色彩考究,细节要清楚传达
美术侧的一些需求: 要充分利用渲染技术来呈现画面 (降低对手绘绘技术的依赖)
  • 要满足大资源量与大量人员协同开发
渲染相关开发目标:
  • 使用 UE4 作为引擎开发环境
  • 渲染功能兼容已有与自定义实现。
—绘制方式调整
—降低消耗,提高开发便利性
  • 改进开发便利性和图形渲染品质
  • 增加美术可自定义范围
—增加专有技术的未来可复用性
  • 在本次演讲中,我将重点介绍自定义实现的部分。(所有图片为正在开发中的效果)
美术效果展示:
notion image
notion image
notion image
 

目录: 一:渲染管线概述 二:环境光照与阴影 三:大气与体积雾的实现 四:体积云的实现 五:角色光影 六:更高性能的半透明渲染 ※在本次讲座中,我们将以 PS4 中(1080p)的一些渲染数值为例。 对于 Xbox One,ARISE 也使用了相同的优化策略。

一:渲染管线概述

渲染流程设计策略 • 延迟渲染 + 其他 Pass 阴影过滤 —采用延迟光照设计 • DepthPrePass(全分辨率)+ BasePass 绘制(Gbuffer 生成) —首先是减少渲染算法的 GPU 消耗 • 美术方面需要实机进行确认,调整比较困难的部分 —模型顶点数据消耗增加,但是… • 可以利用减面或 LOD 工具(美术易于调整的部分) • 在模型绘制上尽可能采用异步计算 —以实现 “隐藏” 绘制消耗的目的 绘制深度与 Gbuffer 渲染
notion image
异步计算
notion image
模型绘制管线 异步 PrePass 渲染
notion image
异步计算
notion image
异步 PrePass
  • 与 Depth PrePass 同时执行
  • 处理可以从帧开始就立即计算的元素
・后期处理的一部分
・一些缓冲区的初始化
・屏幕空间 GI(漫反射 GI)
・体积照明和雾
・体积云绘制 异步 BasePass 渲染
notion image
异步计算
notion image
异步 BasePass
  • 与 BasePass 同时异步执行
  • 只要深度固定,可计算处理的目标。
・基于 Tile 的灯光剔除
・基于 Tile 的屏幕空间阴影
・ 屏幕空间反射
・ 基于 RayMarch 的高度图阴影(中景到远景的实时阴影)
・低成本且兼容太阳方向的动态变化(太阳方向的 RayMarch)
异步 AO 与延迟阴影 渲染
notion image
异步计算
notion image
异步 AO
  • 在绘制阴影贴图的同时异步执行
  • SSAO
・基于比例的环境遮蔽
  • 高度图 AO
・ 从较高位置开始,比例略大的 AO 异步延迟阴影
  • 使用遮挡剔除和分 Tile 绘制的异步执行
  • 在屏幕上绘制阴影
・阴影贴图 ・高度图阴影 ・云影 直接光照、着色器及过滤器 渲染
notion image
异步计算
notion image
直接照明
  • 平行光源(太阳光)
  • 点光源、聚光灯
・ Tile
  • 倍增光
・用于阴影和着色
阴影 + 过滤器 ・用于间接光 ・用于雾和云的绘制 ・用于增强画面插画感效果 ・用于阴影颜色控制、轮廓线、过滤器
  • GPU 绘制时,要注意 GPU 的负载的元素
・两者都会运行许多全分辨率的 Pass ・着色模型(人物 / 背景)因绘制需求不同而有所差异。
  • 理想情况是能够从负载的角度对角色和背景执行专用着色器
・ UberShader 尽量精简(减少注册压力和 Wave 占用率) ・ “获取着色器 ID⇒条件分支⇒执行专用着色器” 也很浪费(全屏) ⇒ 使用深度着色器掩码执行着色器(HiZ 测试) 使用深度创建着色器蒙版 • 根据着色器 ID 创建深度蒙版 – 16 位深度 – 着色器 ID ⇒ PS 到深度导出(DefaultLit 是初始值 ⇒ z 压缩) – PS4 大约 0.1 毫秒
notion image
  • 利用 EarlyZ + HiZ(每个图块的深度测试)
notion image
  • 批量执行 DefaultLit + Foliage(背景照明)
  • 批量执行 DefaultLit + Foliage + Unlit(背景阴影、过滤器)
  • 角色素材批量或单独执行(照明,阴影,过滤器)
  • 仅为特定材质执行专用着色器(注意测试的粒度) HiZ & z 压缩效果
notion image
※关于模板 – 基于其他目的、压缩、HiS 处理等的角度来选择深度。 半透明与后处理 渲染
notion image
异步计算
notion image
  • 半透明
  • 混合分辨率渲染(在的幻灯片中)
  • 后期处理
  • Bloom + Glow(无阈值的模糊发光)
・为了能够绘制 Glow 专用的材料(怪物使用)
  • Temporal AA 和 SMAA 的混合体
・ TAA 是异步计算的 GPU 消耗 渲染
notion image
异步计算
notion image
Gpu 消耗(PS4)
notion image
AsyncCompute 对 GPU 基本没额外占用 (graphics 和 Wave 分配恰当即可) 调整 Wave 的并发执行次数很重要(Wave Limit) • 对于每个着色器 • 对于每个模型
二:环境照明和阴影(间接光和过滤器)
环境间接光表现
  • 基本实时计算(不包括 IBL)
– 对应照明环境的动态变化(阳光、路灯等)
– 资产配置⇒ 专注于可以立即检查外观的环境(工作成本)
  • 间接光包含
– 天光 + 反射 IBL
– AO(SSAO + 高度图 AO)
– 屏幕空间漫反射 GI
– 屏幕空间反射
屏幕空间漫反射 GI
  • 对周围环境反射和颜色的变化做 Trick
– 光照效果及材质的自发光等。
notion image
notion image
notion image
notion image
notion image
notion image
设置(AsyncPrePass)
notion image
应用于场景 (着色 Pass)
notion image
需要考虑像素的法线和深度
  • 降低模糊缓冲区的访问次数 (这里访问 3 次)
  • 辅以强度校正
前景中的自发光作用于远景时:
notion image
notion image
PS4 上的 GPU 消耗:
notion image
屏幕空间反射 可通过深度计算的平面反射 – 过场动画和现场运动中最明显的反射是地板表面(负载响应) - 支持基于光泽度的反射 • 模糊宽度根据粗糙度而变化 – 实现为基于 Ray March 的多级反射
notion image
效果:
notion image
notion image
notion image
notion image
反射计算(AsyncBasePass)
notion image
应用于场景 (着色 Pass) • 比较像素法线朝向和上方向做淡入淡出 –法线方向做 UV 偏移(轻微) • 根据粗糙度插入对应模糊反射缓冲区PS4 上的 GPU 消耗:
notion image
半透明的 SSR • 采用不透明和半透明计算方式通用的方法 –在材质计算时,SSR 会运行两次
notion image
背景着色与滤镜
  • 滤镜处理以增加手绘水彩插图的感觉
–颜色变化阴影颜色、阴影中的颜色和阴影饱和度
–大气通透感和雾化效果在稍后的幻灯片中
–滤镜以改善手绘效果
效果:
notion image
notion image
notion image
notion image
notion image
notion image
notion image
notion image
滤镜处理概要
  • 自定义 SNN + 锐化 + 轮廓线
– 自定义 SNN
  • 手绘模糊、渗色和表面破碎
– 锐化 + 轮廓(法线) • 添加少量细节
  • 什么是 SNN 过滤器?
  • 比较对角线像素并找到平均值
  • 像素混合噪波后感觉良好
  • 需要进行模糊、过滤器大小、性能等调整
notion image
如图对角线取像素的平均值 (颜色会更接近中心像素)SNN 的自定义元素 • 引入混合权重 –双边加权(模糊措施) • 过滤器形状
–通过轮廓强度调整过滤器宽度
  • 是横向还是纵向,及其强度等。
  • 过滤强度 –根据相机距离变化 • 性能优化策略
–水平和垂直方向分开进行
  • 7 + 7 个采样数
PS4GPU 消耗
notion image

三、大气与体积雾的实现

破晓中大气的表达 • 改善环境表现 –尘埃和沙尘、大气通透度、天气表现(风、雪)等。 • 画面的夸张表现 –夸大距离感和合适的细节量 –阳光和阴影表现上的强调 –手绘图片般的精致和细腻 • 上述效果在基于物理正确性下的调整 –着重性能上的优化
效果:
notion image
notion image
notion image
notion image
notion image
notion image
大气表现的构成要素——雾 雾 = Merge(高度雾,体积雾) 体积雾密度不均匀的动画——使用 Ray March 和 3D 噪声实现
(雾 + 阳光散射)* 太阳体积阴影 + 雾 * 局部体积照明
来自太阳方向的光散射效应
・仅考虑视线与光源的夹角
・不依赖于雾或深度的计算
・在抑制雾霾的同时让它看起来很漂亮
太阳的体积阴影——用于强调光的方向,增强印象
局部体积照明
点、聚光灯照明——Raycast + Ray March
每个元素独立计算,应用于场景时进行合并 —体积计算部分做了简化,计算精度也进行了调整
notion image
notion image
大气表现的构成要素——体积阴影 • Ray March 进行简化计算 –仅阴影积累 –DepthPrePass 和异步计算 (AsyncPrePass)
notion image
notion image
体积阴影的效果
  • 表现光线传播中的阴影渐变
—增加大气对光线的散射感和细腻感
  • 场景应用
—使用深度进行手动线性插值 —为每个地图增加阴影颜色 效果:
notion image
notion image
notion image
notion image
PS4 上的 GPU 消耗:
notion image
  • 分辨率、样本数 / 光线、纹理数量和复杂度 / 样本
  • 3D 贴图非常方便
  • 降低分辨率
  • 用于计算

四:体积云的实现

游戏中天空的表现
  • 照顾广阔的天空(高度差、深度)
—天上的两颗星星其实是巨大的模型
notion image
—表现空间的层次结构鸟 ⇒ 卷云 ⇒ 山峰 ⇒ 远处的云 ⇒ 星星
  • 体积云的目标
  • 形状的复杂性(+ 不同天气的云)
  • 干净的颜色
  • 动态云卷云舒和消失的动画
  • 用 Ray March 进行实现
效果:
notion image
notion image
notion image
云渲染的概述:
  • 云的出现
–通过云层的透射和反射并被相机接收的光
notion image
–云渲染 = 光的衰减 * 遮蔽(阴影)计算 • 如何决定光线的衰减程度 –云层厚度 • 密度 • 厚度计算 –用 Ray March 计算 • 暗度计算 –定义一个很棒的密度计算函数 (这是云渲染的初始数据) 云的 RayMarch 计算 • 云层之间的 RayMarch
notion image
  1. 计算云的密度(绿色)
  1. 每次采样的光照计算
  1. 执行自遮蔽 RayMarch(黄色) 1. 这里称为 Shadow RayMarch
  1. 综合考虑密度的光照结果
  1. 被光线路径上的前景云所衰减
  • 注意消耗 —50 次采样 * 10 次采样(阴影)= 550 次采样 —密度纹理的数量也很重要⇒2 张:1100 次,3 张:1650 次,4 张:2200 云密度图的计算 云的分布图:决定云的大体形状
notion image
notion image
notion image
notion image
上图:3D 纹理 XY: 512 * 512 水平方向空间 Z:16 个时间方向 Z 在时间轴上的变化 (MirrorRepeat) 每帧 2 张 Z 的线性插值 R 是 Perlin + Voronoi 噪声 细节噪点:添加更加精细的形状
notion image
3D 纹理 XY: 256 * 256 水平空间 Z: 32 空间高度方向 Perlin + Voronoi 噪声 Z 方向的张数少(考虑 RayMarch 的样本数) 效果:
notion image
notion image
notion image
notion image
云的绘制流程 • 以不同的 Pass(不同的分辨率)分别绘制阴影和云彩
notion image
notion image
效果:
notion image
notion image
绘制云的 GPU 消耗(PS4)
notion image
五:人物光影
效果:本作的角色渲染表现 • 基于写实并结合插画式风格
notion image
notion image
notion image
notion image
notion image
本作的角色渲染表现
  • 基于写实并结合插画式风格
–成人与存在主义的表达
  • 基于造型的法线引入 / 调整(衣服 / 金属)
  • 从纹理的绘制到考虑光照的资产的调整
–插画风格:阴影的控制和色彩变化的丰富度
notion image
每种材质的阴影控制 (皮肤  头发  衣服  金属  眼睛) 加强颜色变化和光影变化 材质感增强 (金属反射等) 插画感的提升 降低赛璐璐的三维效果 每种材质都有单独的着色器来执行(使用深度着色遮罩区分) 加强颜色变化(ShaderPass) • 对光照结果在着色器上应用颜色的变化 —应用颜色 LUT(每种材质都不同)
notion image
下面就本作中尤为重要的皮肤(面部)和金属部分会着重讲下 皮肤的渲染
  • 重点强调一下令人难受的阴影(尤其是面部)处理的实现
—外观 + 减少艺术家法线调整的成本
notion image
主光源从上方照射的情况 控制皮肤阴影
notion image
  • 使用立方体贴图烘培辅助灯光
–沿光源的光轴旋转
  • 将亮面与光源方向对齐
–带方向的阴影校正
–亮度和对比度由美术进行调整
  • 皮肤和眼睛:对比度较弱
  • 在 UE4 编辑器中的调整变得容易
notion image
  • 仅将皮肤光源的 z 方向缩放为 0
–主光源通常来自上方
–不会在下巴周围投射不愉快的阴影
–其他材质基本没有不适感
  • 阴影贴图强度
–减弱难看的自阴影
–由艺术家进行调整 • 熟悉环境 • 熟悉皮肤和衣服等各种材料
面部细节强化
notion image
  • 面部周围的信息量和对比度往往会降低 —在刘海和脖子周围添加动态阴影 • 刘海的阴影 —改变发型 + 支持头发运动 —Ray March 屏幕深度 • 脖子上的阴影 —专门的体积阴影 —深度比较的软阴影
notion image
notion image
notion image
notion image
应用滤镜 + 轮廓线 • 与背景相似的绘制过程 —使角色保持的细节更容易调节 • 主要目的 —降低脸部的立体感 —改进手绘插画感 • 适用于整个角色
notion image
notion image
notion image
notion image
角色金属质感的表现 • 角色表达中的重要元素(盔甲、武器等) • 基于图像光照 (IBL) 的反射处理 —Cubemaps 对应每张地图 • 开发过程中出现的挑战 —对昼夜变化的熟悉程度 —对角色各种材质(亮度)的熟悉程度 —实时光线变化下的效果表现 • 在保持金属质感的同时来表现风格化 角色金属的光照
  • 与角色的衣服光照基本相同。
—兼顾基础颜色(漫反射)和镜面反射的光照
—也要适合其他材质的亮度
—主光源方向的明暗对比
  • 使用 IBL 来丰富金属的表现
notion image
  • 使用屏幕空间 GI 颜色来校正局部反射颜色
notion image
notion image
金属镜面高光(粗糙度)降低
  • 调整直接光高光的锐度(和强度)
—反射粗糙,高光锐利度
notion image
 

六:更高性能的半透明渲染

Mixed Resolution Rendering(混合分辨率渲染)
  • 结合两种分辨率的半透明渲染
—减少渲染区域(半透明重绘)的消耗
notion image
notion image
notion image
notion image
在小分辨率下绘制半透明 在小分辨率下检出画面变化大的部分 在全分辨率下合成场景及绘制蒙版 全分辨率下半透明绘制
—仅在变化较大的区域以屏幕分辨率绘制
  • 保留清晰的细节
—其他缓冲区与场景缓冲区的混合绘图⇒ 使用 ESRAM 方式(XboxOne)
notion image
notion image

最后:整体总结

概括
  • 光照 + 阴影 + 滤镜结合的方式
—系列最新作品的更高品质 + 手绘水彩插画风格
  • 通过积极使用异步计算来减少消耗
  • 利用基于 Ray March 的渲染
—体积雾、体积云、照明效果等。
  • HiZ 和 Z 压缩等的 GPU 硬件功能也非常强大
感谢您的倾听!! 特别鸣谢:
  • 艺术指导
——岩本 稔
  • 场景艺术
——梶原 優子、中村 基典、土佐 香織
  • 角色艺术、角色 TA
——小林 美由紀、新井 誠馨
  • 怪物艺术
——井爪 広樹、川口 徹
  • 株式会社 • 万代南梦宫
参考文献 • Ramy El Garawany, 2016, Deferred Lighting in Uncharted 4, ACM SIGGRAPH 2016 • Emil Persson, 2007, Depth In-depth • Cyril Soler & Olivier Hoel & Frank Rochet, 2010, A Deferred Shading Algorithm for Real-Time Indirect Illumination, ACM SIGGRAPH 2010 • Tobias Ritschel & Thorsten Grosch & Hans-Peter Seidel, 2009, Approximating dynamic global illumination in image space, Symposium on Interactive 3D Graphics and Games 2009 • Peter Sikachev & Nicolas Longchamps, 2014, Reflection System in Thief, ACM SIGGRAPH 2014 • Michele Giacalone, 2016, Screen Space Reflections in The Surge • Yasin Uludag, 2013, GPU Pro 4: Hi-Z Screen-Space Cone-Traced Reflections • Nathan Vos, 2014, GPU Pro 5: Volumetric Light Effects in Killzone: Shadow Fall • Bartłomiej Wroński , 2015, GPU Pro 6: Volumetric fog and lighting • Benjamin Glatzel, 2014, Volumetric Lighting for Many Lights in Lords of the Fallen, Digital Dragons 2014 • Andrew Schneider, 2015, The real-time volumetric cloudscapes of horizon: Zero dawn, ACM SIGGRAPH 2015 • Andrew Schneider, 2016, GPU Pro 7: Real Time Volumetric Cloudscapes • Andrew Schneider & Nathan Vos, 2017, NUBIS: Authoring Real-Time Volumetric Cloudscapes with the Decima Engine, ACM SIGGRAPH 2017 • Sebastien Hillaire, 2016, Physically based Sky, Atmosphere and Cloud Rendering, ACM SIGGRAPH 2016 • Stephen McAule, 2018, The Challenges of Rendering an Open World in Far Cry 5, ACM SIGGRAPH 2018 • Jeremy Shop, 2009, Mixed Resolution Rendering, GDC 2009 • Padraic Hennessy, 2016, Mixed Resolution Rendering in Skylanders: SuperChargers, GDC 2016
最后——
本文为汉化《 AriseRendering_cedec2019 》,图片高清全尺寸全面汉化版。
转载引用,还请表明出处,谢谢。
> 本文由简悦 SimpRead 转码