Unity Bakery使用说明
Posted 九本才
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity Bakery使用说明相关的知识,希望对你有一定的参考价值。
什么是Bakery 为什么用Bakery
Bakery 是一款可用于生产的高端 GPU 光照贴图器,其设计考虑了灵活性和性能。
修复各种烘焙伪影,例如接缝、光/阴影泄漏、不正确的阴影终结器等。烘焙光照贴图不会比在离线渲染器中渲染相机帧带来更多问题。
烘焙各种有用的光照数据。不同光源在任何组合中的直接和间接贡献、单独的阴影掩模、方向矢量、球谐函数等。照明也可以按顶点烘焙或放入探针中,而不是使用纹理。
物理正确性。烘焙结果与著名的无偏见渲染器 Mitsuba 进行了彻底的比较。
细节层次支持。
Bakery 还可以利用 RTX 硬件来加速烘焙。
使用说明
Bakery有三种烘焙方式:简单渲染,高级渲染,实验性渲染
Simple:简单模式,速度快,效果差
Advanced:高级渲染模式,速度慢,效果最好,适合最后的烘焙
Experimental:实验模式,速度中,效果还可以,平时最常用
Simple
Render mode:渲染模式,定义了要烘焙的光照贴图的类型
Full Lighting,全照明,为所有的光照提供完整的直接和间接的照明。
Indirect,这这是一种混合模式,它将查看每个灯光上的 Baked Contribution 选择器:如果将其设置为Direct And Indirect,则灯光会像在 Full Lighting 模式下一样烘焙。如果将其设置为Indirect Only,则仅烘焙此灯光的间接贡献 (GI)。
在后一种情况下,您应该在对象上同时保留 Unity的灯和 Bakery 灯,一个提供实时直接贡献,另一个用于预先计算的GI。
Shadowmask,阴影遮模,更高级的混合模式。它通过生成两种类型的光照贴图来工作 - 一种具有烘焙颜色(如在间接模式下),另一种具有来自静态对象的阴影。
Subtractive,减法模式,这个选项对光照贴图没有任何特殊的作用,事实上,它就像全光照一样工作。唯一的区别是它还设置了实时 Unity 灯光以使用减法模式(因为它不能通过 UI 完成)。
Ambient Occlusion Only,仅环境光遮挡,只烤AO(如下图右边只烘焙了AO)
Directional mode
定义方向信息的烘焙方式。标准光照贴图每个纹素只存储一种颜色,而定向光照贴图为着色器提供了光照如何在纹素周围的半球上变化的提示。将完全光照贴图区域与法线贴图结合起来需要此数据。将其插入内置的Bakery 着色器也可以产生近似的镜面反射响应。
None ,没有方向数据,每个纹素单色。
Baked Normal Maps 烘焙法线贴图,依然没有方向数据,但是在渲染光照贴图时会考虑法线贴图。
Domunant Direction 这种模式类似于Unity中的Enlight和Progressive烘焙模式。
RNM, 基于最初为HL2发明的Radiosity Normal Mapping技术,后来用于许多游戏。总共生成3个HDR地图,是所有模式中最需要内存的模式。运行时开销相对较低。这种模式比Domnant Direction更精确,他更擅长再现表面对比度和处理从不同角度影响法线贴图的彩色光。
SH 基于“Frostbite 中的预计算全局照明”这是最高质量的模式,可提供更好的表面对比度并代表来自不同方向的不同颜色的照明。总共生成 4 个映射,其中只有一个是 HDR,因此比 RNM 占用更少的内存。运行时开销略高于 RNM
Texels per unit,每个世界单位的光照贴图纹素的近似数量。影响生成的光照贴图的数量和分辨率。
大型室外区域(一个城市):1 - 5
中等户外区域(一些小巷):10-20
高品质内饰:100
Max resolution,最大光照贴图大小限制。如果对象不能放入单个光照贴图中(给定当前的 Texels Per Unit 值),则会分配额外的光照贴图。同样的 4 个方形物体可以拍摄 4 张 512x512 的地图或一张 1024x1024 的地图。
Bounces ,定义光线应该从表面反弹多少次。对于室外场景(例如城市),通常较低的值就足够了,而对于更封闭的场景(室内、洞穴)则需要较高的值。
Samples ,影响 GI 的质量。典型值为 16 到 32。
GPU priority ,当 GPU 处理光照贴图时,操作系统和其他软件可能会变得反应迟钝。此选项允许您在烘焙速度和系统响应能力之间取得平衡。
Render
为所有打开的场景烘焙光照贴图。
Render Light Probes
为所有打开的场景烘焙光探测器
Render Reflection Probes
为所有打开的场景烘焙反射探针
Update Skybox Probe
为当前天空盒烘焙全局漫反射和反射探针。
Advanced(高级渲染设置)
高级渲染设置包含了简单设置的功能,重复的设置就不介绍了。
Light probe mode(光探头模式)
更改光照探针的烘焙方式。
Legacy:使用 Render Light Probes 按钮生成探针。点光源和定向光源在光照贴图器中计算,而区域/天空/间接光照通过在每个探针位置渲染立方体贴图来收集。结果存储为L2 球谐函数。缺点是立方体贴图渲染性能缓慢,并且在游戏中的着色器不物理表示光照表面或您的项目设置为移动设备(Unity 可以剪掉高强度值)的情况下,光照贴图和探针之间可能不匹配。
L1:点击渲染时,光照探针将与光照贴图一起渲染。此选项提供卓越的烘焙性能,并保证探针照明与光照贴图匹配。结果存储为 L1 球谐函数(常规着色器仍可使用)。通过使用Bakery shader中的 Non-Linear Light Probe SH 选项可以进一步改进结果。
Asset UV processing(资产 UV 处理)
为资产配置 UV 填充调整。可能的值:
Don’t chage,不要改变:不要碰资产。
Adjust UV padding, 调整 UV 填充:将查找具有自动生成的 UV 的模型(资产上的“生成光照贴图 UV”)并进一步调整它们以在每个网格的 UV 岛之间具有适当的填充。导入器设置中的模型范围的包边距被忽略。取而代之的是计算最优值,给定每个网格的面积和光照贴图分辨率。
Remove UV adjustments 移除 UV 调整:恢复所有之前的 UV 调整,使自动展开的模型看起来像 Unity 最初展开它们的方式。
Denoiser (降噪器)
设置所需的降噪器。可能的值:
Optix 5:使用 OptiX 5.1 AI 降噪器(以前称为“Legacy denoiser”)。在 GPU 上运行。支持从Kepler(通常是 GeForce 6xx)到Turing(通常是 Geforce 20xx)的一切。安培(30xx)不支持。OptiX 5.1 使用嵌入其中的静态训练数据集,这意味着它不受驱动程序实施的影响。
Optix 6:使用 OptiX 6.0 AI 降噪器(以前是默认选项)。在 GPU 上运行。似乎在 Kepler (6xx) GPU 上失败了,但可以在更新的所有东西上运行,包括 Ampere (30xx)。从 6.0 开始,OptiX 降噪器的训练数据集在驱动程序中。在驱动程序 v442.50 之前,它的行为类似于 OptiX 5.1;但是,在 NVIDIA更改数据集之后,结果可能会有所不同。更新后的数据集有时可能会产生类似网格的图案和更亮的边缘(仍然可以使用“去噪:修复亮边缘”来修复),但它运行得更快。
Optix 7:使用 OptiX 7.2 AI 降噪器。行为类似于 OptiX 6.0,但可能在 Ampere (30xx) 上得到更好的支持。
OpenImageDenoise:使用英特尔 Open Image Denoise 库。在 CPU(任何支持 SSE 4.1 的 CPU)上运行。可能比 OptiX 稍慢,但质量相当。
Lightmapping tasks(光照映射的设置)
Adjust sample positions 调整样本位置,寻找最佳样品位置以防止漏光。
Unload scenes before render,渲染前卸载场景,在烘焙之前卸载 Unity 场景以释放视频内存。
Denoise去噪,如果启用,将应用去噪算法。
Fix Seams修复接缝,如果启用,将尝试混合由 UV 不连续性创建的接缝。
Split by scene 按场景分割,如果一次加载多个场景并启用此选项,则每个场景将拥有自己的一组光照贴图,不与其他场景共享。
Min resolution,最小光照贴图大小限制。可用于平衡许多小但完全占用的光照贴图与少数未完全填充的光照贴图。
Scale per map type 每个地图类型的比例,允许您以不同方式缩放颜色/阴影蒙版/方向图的分辨率。
Checker preview,如果打开显示检查复选框,场景视图将在可见对象顶部呈现棋盘图案以展示光照贴图纹理大小。
Emissive boost,将任何表面发射乘以该数字。
Indirect boost,将所有反弹光照乘以该数字。与光照组件的间接强度相同,但全局。
Backface GI,确定有多少光通过正面传递到背面,然后被 GI 反射回来。这对于像叶子这样的薄半透明表面特别有用。值在 0-1 范围内。
Ambient occlusion (环境光遮蔽),您可以将简单的非物理环境光遮蔽应用于最终场景照明以达到美学目的。
强度:控制 AO 效果的可见性。值为 0 禁用效果。
半径:确定 AO 效果中使用的光线距离。较小的值会产生局部遮挡(角落、皱纹),而较大的值使其更类似于天光,会产生来自远处物体的阴影。
样本:影响环境光遮挡的质量。典型值为 4 到 32。
RTX Mode,启用 RTX 硬件加速。只有 RTX GPU 会从此选项中受益。支持的最低驱动程序版本为 418。
驱动程序可以在大多数非 RTX Nvidia 卡上模拟 RTX 模式,但结果通常较慢。
必须在 Ampere (3xxx) 卡上启用 RTX 模式。
Export terrain trees,如果启用,绘制的地形树将影响照明。
Terrain optimization,如果启用(默认),地形将使用单独的光线追踪技术来利用其高度场几何。否则,它们将被视为任何其他网格。地形优化显着减少了高分辨率地形所需的内存占用。在某些情况下,它还可以使地形烘焙更快,在其他情况下(尤其是简单的低分辨率景观),禁用它可能是有意义的。
Samples multiplier,将所有阴影和 GI 样本乘以指定的因子。使用它在草稿和最终质量之间快速切换。
GI VRAM optimization,切换用于非常大场景的内存优化,尤其是在一次烘焙太多光照贴图时。如果启用,可能会稍微减慢渲染速度。如果禁用,并且场景太大,Bakery 可能会出现内存不足。
自动:根据开放场景猜测是否需要优化。猜测只是近似值,因此如果您知道场景很大,请将其设置为 Force On。
强制开启:始终启用。
强制关闭:始终禁用。
Tile size,与GPU Priority相同,但不是设置抽象优先级,而是设置图块大小。Bakery 将光照贴图拆分为更小的图块,并一次更新一个。更小的尺寸意味着更多的 GPU 工作中断,并且可以使系统更具响应性。
Experimental(实验性渲染模式)
Unwrapper 解包器,如果启用了调整 UV 填充,则定义将使用的展开器。
默认值:标准Unity解包器。Bakery 将为每个具有不同填充参数的网格
调用Unwrapping.GenerateSecondaryUVSet 。
Xatlas:使用jpcy的xatlas,Ignacio Castaño的thekla_atlas的修改版本。thekla_atlas 用于 The Witness。
Atlas Packer,选择将不同对象 UV 布局打包到大型光照贴图集时使用的算法。
默认值:v1.7 之前使用的原始算法 Bakery。
xatlas:使用 xatlas。
某些功能仅支持一个 atlas 打包器:
默认 | xatlas | |
覆盖分辨率 | Yes | NO |
高效的 LOD 包装 | NO | Yes |
填孔 | NO | Yes |
请注意,也可以为每个 Lightmap Group 单独选择 atlas packer。
Export geometry and maps,如果启用,Bakery 将在渲染之前将场景导出为其格式。如果您确定场景的几何体和纹理以及光照贴图分辨率设置未更改(例如,您只是调整 GI 或光照设置),您可以禁用此复选框以加快下一次渲染速度。
Update unmodified lights,如果启用,Bakery 将重新计算自上次渲染后未更改的光源。如果您只调整一个灯光并且不想等待其他灯光重新渲染,您可以禁用此复选框。
Update modified lights and GI,如果启用,Bakery 将重新计算自上次渲染后更改的 GI 和灯光。
UV padding: increase only,仅在启用“调整 UV 填充”时可见。默认情况下,模型资源的最佳 UV 填充仅基于当前加载的场景进行计算。如果同一模型的多个实例使用不同的光照贴图分辨率,则最小的一个将定义填充,因此 UV 图表之间的间距足够大以防止它们相互泄漏。但是,在 2 个不同的独立场景中烘焙相同的模型可能会破坏先前场景中的 UV,同时针对新场景进行优化。此复选框允许通过从不减小填充值来防止此类行为,因此它将始终针对有史以来最低分辨率的实例进行优化。
Denoise: fix bright edges(去噪:修复明亮的边缘),仅在“降噪”打开时可见。有时,用于去噪的神经网络可能会在阴影周围产生明亮的边缘,就像应用了锐化效果一样。如果启用此选项,Bakery 将尝试将它们过滤掉。启用后,去噪阶段可能会稍微慢一些。
此功能还可用于过滤“萤火虫”,即光照贴图中偶尔出现的亮点。
Combine with Enlighten real-time GI(结合 Enlighten 实时 GI),如果启用,则当按下 Render 按钮时,它将首先尝试使用 Enlighten 进行烘焙以计算实时 GI。之后,将发生常规的 Bakery 光照贴图过程。烘焙 GI 和实时 GI 将一起工作。
Bakery
Masha wants to open her own bakery and bake muffins in one of the n cities numbered from 1 to n. There are m bidirectional roads, each of whose connects some pair of cities.
To bake muffins in her bakery, Masha needs to establish flour supply from some storage. There are only k storages, located in different cities numbered a1, a2, ..., ak.
Unforunately the law of the country Masha lives in prohibits opening bakery in any of the cities which has storage located in it. She can open it only in one of another n - k cities, and, of course, flour delivery should be paid — for every kilometer of path between storage and bakery Masha should pay 1 ruble.
Formally, Masha will pay x roubles, if she will open the bakery in some city b (ai ≠ b for every 1 ≤ i ≤ k) and choose a storage in some city s (s = aj for some 1 ≤ j ≤ k) and b and s are connected by some path of roads of summary length x (if there are more than one path, Masha is able to choose which of them should be used).
Masha is very thrifty and rational. She is interested in a city, where she can open her bakery (and choose one of k storages and one of the paths between city with bakery and city with storage) and pay minimum possible amount of rubles for flour delivery. Please help Masha find this amount.
The first line of the input contains three integers n, m and k (1 ≤ n, m ≤ 105, 0 ≤ k ≤ n) — the number of cities in country Masha lives in, the number of roads between them and the number of flour storages respectively.
Then m lines follow. Each of them contains three integers u, v and l (1 ≤ u, v ≤ n, 1 ≤ l ≤ 109, u ≠ v) meaning that there is a road between cities u and v of length of l kilometers .
If k > 0, then the last line of the input contains k distinct integers a1, a2, ..., ak (1 ≤ ai ≤ n) — the number of cities having flour storage located in. If k = 0 then this line is not presented in the input.
Print the minimum possible amount of rubles Masha should pay for flour delivery in the only line.
If the bakery can not be opened (while satisfying conditions) in any of the n cities, print - 1 in the only line.
5 4 2
1 2 5
1 2 3
2 3 4
1 4 10
1 5
3
3 1 1
1 2 3
3
-1
Image illustrates the first sample case. Cities with storage located in and the road representing the answer are darkened.
找出一条边距离最短且连接着一个flour storage,而自身并不是flour storage的地方作为bakery
代码:
#include <bits/stdc++.h> using namespace std; int main() { int u[100000],v[100000],w[100000]; int vis[100001] ={0}; int n,m,k,d,s = 0x3fffffff; cin>>n>>m>>k; for(int i = 0;i < m;i ++) cin>>u[i]>>v[i]>>w[i]; for(int i = 0;i < k;i ++) { cin>>d; vis[d] = 1; } for(int i = 0;i < m;i ++) { if((vis[u[i]]^vis[v[i]])) { if(s > w[i])s = w[i]; } } if(s!=0x3fffffff)cout<<s; else cout<<-1; }
以上是关于Unity Bakery使用说明的主要内容,如果未能解决你的问题,请参考以下文章
Unity 框架QFramework v1.0 使用指南 架构篇:05. 引入 Utility | Unity 游戏框架 | Unity 游戏开发 | Unity 独立游戏
Unity 框架QFramework v1.0 使用指南 架构篇:19. 心中有架构 | Unity 游戏框架 | Unity 游戏开发 | Unity 独立游戏