首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Unity通用渲染管线(URP)系列(十四)——多相机(Camera Blending & Rendering Layers)

正常情况下,多个摄影机可以使用任何视口渲染到相同渲染纹理。唯一区别是Unity会先自动渲染具有渲染纹理目标的摄像机,然后再渲染那些渲染到显示器摄像机。...例如,让底部相机使用默认值,关闭了叠加相机Post FX,并为渲染纹理相机提供了不同Post FX,比如,并具有冷温度变化和中性色调映射。 ?...(分屏显示,相机 Culling Mask 不同为什么更改对象层没有任何作用呢? 有可能,但是也有一个BUG,即Undo/Redo层更改可能不会影响对象是否被渲染。...(相同剔除掩码应用于明亮点光源) 如果启用Use Lights Per Object,则灯光剔除按预期方式进行,但仅适用于点光源和聚光灯。 ?...现在,该结构int和float字段表示相同数据,但解释不同。这样可以保持位掩码完整无缺,并且渲染层掩码现在可以正常工作。 ? (方向光现在忽略了一半对象为什么不使用Unsafe代码?

8.2K22

基础渲染系列(六)——凹凸

2 法线贴图 当凹凸贴图起作用时,我们需要执行多个纹理样本和有限差分计算。这似乎是一种浪费,因为生成法线应该始终相同为什么所有这些工作每一帧都要做一遍呢?...第一个为我们提供了对网格物体资产引用,而第二个创建副本。 为什么MeshFilter.mesh属性创建一个副本? 假设你有一个使用网格物体资产游戏对象。你只想在运行时调整该游戏对象网格。...然后,你就需要创建特定于该对象网格物体资产本地副本。这就是为什么MeshFilter.mesh创建副本原因。 ? 首先,我们显示法线向量。从网格获取顶点位置和法线,然后使用它们绘制线。...因此,当将它们应用于具有弯曲切线空间对象时,与高度场相比,最终法线会变形。但这还好,因为大理石的确切外观无关紧要。 从5.3版本开始,Unity使用mikktspace。...如果要消除切线空间,则必须使用对象空间法线贴图。这些贴图不粘在表面上。因此它们无法平铺,不能应用于不同形状,也不会随网格变形。此外,它们在纹理压缩方面也不起作用。

3.5K40
您找到你想要的搜索结果了吗?
是的
没有找到

项目优化之优化技巧进阶(Unity3D)

渲染队列小于等于2500时,unity认为其是不透明,对于不同材质但z值相同对象unity不对其进行排序,这样能保证相同材质多个对象能是一个批次,不同材质对象如果进入两个相同材质对象之间,不会打破批次...;   渲染队列大于2500时,unity会对不同材质对象进行排序,此时如果不同材质对象进入到两个相同材质对象之间的话,会使相同材质对象批次被打破。   ...多个纹理进行打包成图集是为了减少材质,这样多个对象共享一个材质,并进而使用同一个纹理和shader,触发unity动态批次。...使用Unity版本是64位5.4.3f1,可能不同版本产生内存大小有些差别,但是产生新内存是不可避免。...为了有更多对比,foreach和GetEmulator也写一份同样代码,应用于Int数组和ArrayList,先查看运行结果,然后一起查看他们IL代码。

1.9K20

Unity通用渲染管线(URP)系列(五)——烘焙光(Baked Light)

展开图按比例缩放并放置在光照贴图中每个对象上,因此每个实例都有自己空间。就像缩放和平移应用于base UV一样。我们也必须将其应用于光照贴图UV。...Unity所有探针组合在一起,然后创建一个将它们全部连接在一起四面体体积网格。每个动态对象最终都在一个四面体内部。对其顶点处四个探针进行插值,以得出应用于对象最终光照信息。...在这种情况下,使用了自定义分辨率模式子探针沿着立方体边缘放置,因此它们是可见。 ? ? (使用LPPVs) 为什么在场景视图里看不到这些探针呢?...到这步之后仍然还不能正常工作,因为Unity会积极尝试避免在烘焙时使用单独emission通道。如果材质emission 设置为零的话,还会直接将其忽略。但是,它没有限制单个对象材质属性。...6.2 复制属性 必须确保_MainTex属性指向与_BaseMap相同纹理,并使用相同UV转换。两种颜色属性也必须相同

8.1K20

基础渲染系列(七)——阴影

为了说明这一点,创建了一个带有几个拉伸立方体简单场景。在这些立方体上方放置了四行球体。中间行漂浮着球体,而外部行通过圆柱体连接到它们下面的立方体。 这些对象具有Unity默认白色材质。...如果要切换到两个级联,则每个光源渲染两次场景。并且没有级联,每个灯光仅渲染一次。当我们看阴影质量时,我们看到为什么Unity会这样做。...这是否意味着无法MSAA与定向阴影结合使用? 可以,但是你会遇到上述问题。在某些情况下,它可能不会引起注意。例如,当所有表面颜色大致相同时,失真很微小。当然你仍然会获得锯齿状阴影边缘。...启用阴影后,这些宏执行与刚才相同工作。没有阴影时,它们什么也不做。 SHADOW_COORDS在需要时定义阴影坐标的插值器。使用_ShadowCoord名称,这是编译器先前报错名称。 ?...结果,这些灯不能支持阴影级联。 ? (近平面的阴影贴图设置为4) 尽管相机设置不同,但是两种光源阴影投射代码相同。仅对定向阴影支持法线偏差,对于其他光源,将其设置为零。

4K30

基础渲染系列(十六)——静态光照

此限制意味着光照贴图可以用于微弱灯光和暗淡表面,但不适用于强直射灯光或闪亮表面。如果要使用镜面光,则必须使用实时照明。因此,通常最终会混合使用烘焙光和实时光。 为什么没有烘焙光?...这项工作类似于应用于常规纹理坐标的变换,只是该变换是特定于对象,而不是特定于材质。光照贴图纹理在UnityShaderVariables中定义为unity_Lightmap。 ?...Unity 4使用了与更高版本不同延迟渲染管道。在Unity 5中,这称为传统延迟照明。这种方法有更多pass。Prepass final是那时术语。...因为强度和方向图总是以相同方式采样,所以Unity在可能情况下使用单个采样器状态。这就是为什么在采样强度图时必须使用UNITY_SAMPLE_TEX2D宏原因。方向图已定义为没有采样器。...结果,动态对象无法放入带有烘焙照明场景中。当根本没有实时照明时,这是非常明显。 ? (动态物体 显示异常) 为了更好地混合静态和动态对象,我们还必须以某种方式烘焙光照应用于动态对象

3.6K20

Unity通用渲染管线(URP)系列(八)——复杂贴图(Masks, Details, and Normals)

该贴图称为遮罩贴图,其各个通道遮盖了不同着色器属性。我们使用与UnityHDRP相同格式,后者是MODS映射。此代表金属,遮挡,细节和平滑度,以该顺序存储在RGBA通道中。...但是,当使用高压缩质量时,Unity更喜欢BC7压缩。此模式工作原理相同,但每个通道位数可能会有所不同。因此,不需要移动X通道。...4.2 切线空间 由于纹理环绕着几何体,因此它们在对象和世界空间中方向不统一。因此,存储法线空间会弯曲以匹配几何图形表面。唯一常数是该空间与表面相切,这就是为什么它被称为切线空间原因。...它XYZ组件定义对象空间中轴。它W分量为-1或1,用于控制Z轴指向方向。这用于翻转大多数(比如动物)具有双侧对称性网格法线贴图,因此相同贴图可用于网格两侧,从而将所需纹理大小减半。...(细节法线贴图) 为什么不合并两个贴图? 虽然这样效率更高,但生成这样贴图却更加困难。生成Mip贴图时,应将法向矢量与其他数据通道区别对待,而Unity纹理导入器无法做到这一点。

4.1K40

基础渲染系列(十四)——雾

然后将此因子钳制在0–1范围内,并用于在雾和对象阴影颜色之间进行插值。 为什么雾不影响天空盒? 雾效果可调整正向渲染对象片段颜色。因此,它仅影响这些对象,而不影响天空盒。...(基于剪辑空间深度雾) 现在,你很可能会获得与标准着色器相同结果。但是,在某些情况下,剪辑空间配置不同,从而产生了不正确雾。...(不透明和透明材质) 当然,使用透明材质物体会受到雾影响。 为什么少了两个球? 右侧对象使用透明材质,即使它们是完全不透明。结果,Unity在渲染它们时从后到前排序。...Unity检查相机是否具有使用此方法组件,并在渲染场景后调用它们。这让你可以更改效果或效果应用于渲染图像。如果有多个这样组件,则会按照它们连接到相机顺序来调用它们。...最明显错误是我们在透明几何图形顶部绘制了雾。为防止这种情况发生,我们必须在绘制透明对象之前应用雾化效果。可以ImageEffectOpaque属性附加到我们方法中,以指示Unity这样做。

2.8K20

Unity通用渲染管线(URP)系列(二)——Draw Calls(Shaders and Batches)

如果还没有一个block ,就创建一个新block ,然后使用属性标识符和颜色在其上调用SetColor,然后通过SetPropertyBlockblock 应用于游戏对象Renderer组件,该组件会复制其设置...(1023个球体,3个DC) 现在进入游戏模式产生一个密集用球体围成球。由于每个DC最大缓冲区大小不同,因此需要多少次DC取决于平台。机器情况,需要进行三个绘制调用才能进行渲染。...该方法也有一些注意事项,例如,当涉及不同比例时,不能保证较大网格法线向量为单位长度。此外,绘制顺序也更改,因为它现在是单个网格而不是多个。...用来匹配Unity自动提供采样器状态。 纹理和采样器状态都是着色器资源。不能按实例提供,必须在全局范围内声明。在UnlitPass.hlsl中着色器属性之前执行此操作。 ?...两个相同大小向量相乘会导致所有匹配分量相乘,因此在这种情况下,红色乘以红色,绿色乘以绿色,依此类推。 ? ? (黄色纹理球) 因为我们纹理RGB数据是均匀白色,所以颜色不受影响。

5.9K51

基础渲染系列(十)——更复杂复合材质

(没有和有方向光遮挡) 就遮挡贴图而言,这是尽可能真实。话虽如此,你也经常会发现游戏中遮挡贴图也应用于方向光。Unity旧着色器也这样做。虽然这不真实,但确实可以让使美术人员更好地控制灯光。...上图所有四个颜色通道设置为相同值。 将此贴图属性添加到我们着色器。 ? 由于许多材质都没有细节蒙版,因此也要为其提供着色器功能。基础和附加pass都需要它。 ?...不必总是反照率与细节相乘,而是基于蒙版在未修改和修改后反照率之间进行插值。就像所有其他属性一样,反照率检索放入其自身函数中。 ? 2.3 法线细节 还需要对法线向量进行相同调整。...foreach是for循环方便替代方法。与常规for循环相比,它具有一些开销,因为它创建了一个临时迭代器对象。因此,永远不会在经常执行应用程序代码或编辑器代码中使用它。...要解决此问题,我们必须先跟踪贴图纹理引用,然后才能对其进行更改。然后,我们仅在进行更改情况下设置关键字,这是不同贴图。 ? 这解决了DoNormals问题。

2.3K30

Unity可编程渲染管线系列(十)细节层次(交叉淡化几何体)

本文重点: 设计常规和附加LOD组 交叉淡化LOD不同级别 应用屏幕空间抖动 使用动画抖动模式 剔除没有使用着色器变体 这是涵盖Unity可脚本化渲染管道教程系列第十期。...可以通过代码和项目设置“Quality ”面板进行设置。例如,Lod Bias设置为1.5意味着对象视觉尺寸被相同因素高估,因此,当我们球体下降到6.7%以下时,才将其球体剔除。...要清楚地看到正在使用不同LOD级别,请复制球状子对象两次以创建LOD级别1和2,并为每个颜色赋予不同颜色。然后将它们添加到LOD组,例如以15%和10%阈值完全剔除移到5%。 ? ? ?...HDRP管道种子基于视图方向,该问题具有使问题更加严重精度问题,但是将其更改为使用屏幕空间位置并不能解决所有问题。相反,始终使用屏幕空间纹理。...2.5 交叉淡化阴影 我们可以将相同技术应用于阴影。在剔除期间选择了LOD,因此对象及其阴影LOD匹配。首先,还将LOD_FADE_CROSSFADE多编译指令添加到阴影投射器通道中。 ?

3.7K31

基础渲染系列(十三)——延迟着色

这些层级对应于不同类别的GPU。GPU越好,Unity使用层级就越高。你可以通过“Editor /Graphics Emulation”子菜单选择编辑器使用层级。 ?...除了已关闭MSAA之外,该场景看起来仍然相同。这次如何绘制呢? 为什么MSAA无法在延迟模式下工作? 延迟着色依赖于每个片段存储数据,这是通过纹理完成。...不能使用此技术唯一情况是光量与相机近平面相交。 点光源使用相同方法,除了使用icosphere而不是金字塔。 ?...在这种情况下,颜色写入ARGB32纹理Unity对数编码颜色,以实现比此格式通常更大动态范围。最终延迟通过转换为正常颜色。...可以混合使用大写字母和小写字母作为目标语义,Unity可以全部理解。在这里,使用Unity最新着色器相同格式。 请注意,并非所有语义都是大小写混写正确。例如,顶点数据语义必须全部为大写。

2.7K20

Unity性能调优手册7:渲染优化,DrawCall,剔除,Shader,LOD,TextureStreaming

由于动态批处理是一个cpu密集型过程,因此在将其应用于对象之前必须满足许多条件。主要条件如下。 1.相同材质 2.物体使用MeshRenderer或Particle System进行渲染。...如果着色器中复杂计算结果不受外部值影响,那么预先计算结果存储为纹理元素是一种有效方法。...例如,用于颜色分级LUT(颜色对应表)预先校正纹理,使每个像素坐标对应于每种颜色。通过在着色器中基于原始颜色对纹理进行采样,结果几乎与对原始颜色进行预校正相同。...译者增加部分 手游不使用unity自带阴影 使用shader投影阴影方式,但是这种会产生阴影只能照在平面上,不能出现在斜坡与影子部分照射在石头上 【腾讯文档】Unity阴影原理-插件-平面阴影...同样,在在Quality Settings质量设置下Memory Budget 内存预算限制加载纹理总内存使用。纹理流系统加载mipmaps,而不会超过这里设置内存量。

1.4K64

Unity可编程渲染管线系列(十一)后处理(全屏特效)

但是,在本教程中不使用。 2.2 Blitting 此时,我们场景似乎不再被渲染,因为我们正在渲染到纹理而不是相机目标。...为了使之成为可能,我们必须使用自己ID深度信息显式呈现给纹理,为此我们将使用_CameraDepthTexture。获得深度纹理方法与颜色纹理方法相同,只是必须使用不同纹理格式。...4.1 着色器 我们所有后处理效果代码放在同一着色器中,并对每一个使用不同通道。这样,可以重复使用着色器文件中代码,而只需要处理一种材质。...5.4 仅不透明后处理 除天空盒外,透明几何也不会写入深度缓冲区。因此,条纹基于其背后内容而应用于透明表面的上层。景深等效果行为方式相同。对于某些效果,最好不要将它们完全应用于透明对象。...因此,默认栈仅适用于那些些需要应用于所有相机效果。但通常,大多数后处理效果仅应用于主相机。另外,可能会有多个摄像机,每个摄像机需要不同效果。因此,让我们可以为每个摄像机选择一个栈。

3.5K20

基础渲染系列(二)——着色器

(用你自己着色器材质球) 更改我们球体对象,使其使用我们自己材质,而不是默认材质。球体变为洋红色。发生这种情况是因为Unity切换到错误着色器了,该着色器使用此颜色来引起你对问题注意。...如果使用是Direct3D 9,则可能会收到错误消息。 2.3 着色器编译 Unity着色器编译器采用我们代码,并将其转换为其他程序,具体取决于目标平台。不同平台需要不同解决方案。...(UV作为颜色,正面和上方) 4.2 添加纹理 要添加纹理,你需要导入图像文件。下面将用于测试目的一个纹理。 ? (测试纹理) 你可以通过图像拖到项目视图中来将其添加到项目中。...(跨三角形线性插值) 不同网格具有不同UV坐标,从而产生不同贴图。Unity默认球体使用经度-纬度纹理映射,而网格是低分辨率立方体球体。...5 纹理设置 到目前为止,经使用是默认纹理导入设置。让我们看一下其中一些选项,看看它们作用。 ?

3.8K20

Unity Mesh基础系列(一)生成网格(程序生成)

Unity默认材料是纯白色,你可以通过 _Assets Create Material来创建一个新材质球,并将其拖到游戏对象上来替换它。...这其实是通过向顶点添加二维纹理坐标来完成纹理空间两个维度被称为U和V,这就是为什么它们被称为UV坐标。这些坐标通常位于(0,0)和(1,1)之间,覆盖整个纹理图。...当我们这个组件添加到游戏对象中时,我们也需要给它一个mesh filter 和一个 mesh renderer。这里有个快捷方式,向我们类添加一个属性,以便使Unity自动为我们添加它们。 ?...这是一个在物体表面流动三维空间。这种方法允许我们在不同地方和方向应用相同法线映射。 表面法线在这个空间上是向上,但是哪条路是正确呢?这是由切线定义。...Unity着色器执行此计算方式要求我们使用−1。 因为我们是一个平面,所以所有的切线都指向相同方向,也就是右边。 ? ?

9.3K41

Unity通用渲染管线(URP)系列(六)——阴影遮罩(Shadow Masks)

Unity通过unity_ShadowMask纹理和接下来采样器状态使阴影遮罩贴图可用于着色器。定义GI中那些以及其他光照贴图纹理和采样器状态。 ?...在这种情况下,我们需要将PerObjectData.ShadowMask添加到每个对象数据中。 ? ? (采样阴影遮罩) 为什么每次更改着色器代码时Unity都会烘焙灯光?...1.4 遮挡探针 我们可以看到,阴影遮罩已正确应用于光照对象上了。但是还看到,动态对象并没有预期阴影遮罩数据。因为他们使用是光探针而不是光贴图。...它存储在相同纹理中,并且需要相同参数,唯一可能额不同是不需要法线向量。为此,一个分支添加到SampleBakedShadows中,并为现在所需世界位置添加一个Surface参数。 ?...但是,当没有阴影遮罩时,就像我们之前所做那样,仅组合强度应用于实时阴影。 ? ? (混合阴影) 结果是动态对象投射阴影照常消失,而静态对象投射阴影过渡到阴影遮罩。

4.5K32

基础渲染系列(二十)——视差(基础篇完结)

像遮挡贴图一样,Unity标准着色器希望高度数据存储在纹理G通道中。因此,我们也执行此操作,并在工具提示中进行说明。 ?...(视差贴图 和标准着色器一样) 现在,我们着色器支持与标准着色器相同视差效果。尽管可以视差贴图应用于任何表面,但投影假定切线空间是均匀。表面具有弯曲切线空间,因此会产生物理上不正确结果。...添加了无偏差和偏移限制选项,但将它们变成注释以保留默认选项。 ? 1.8 细节UV 视差贴图可与主贴图配合使用,但我们尚未处理辅助贴图。需要将纹理坐标偏移也应用于细节UV。...这不能用单个纹理样本完成。我们必须沿着视线逐步移动,每次对高度场进行采样,直到到达表面为止。这项技术称为ray marching。 ?...(动态批处理产生奇怪效果) 问题在于,在将它们组合在单个网格中之后,Unity不会对批量几何法线和切向量进行归一化。因此,顶点数据正确假设不再成立。 Unity为什么不对这些向量进行归一化?

2.9K20

什么是draw call_unity drawcall优化

因此,如果你想要得到良好批处理效果,你需要在程序中尽可能地复用材质和物体。 如果你两个材质仅仅是纹理不同,那么你可以通过 纹理拼合 操作来这两张纹理拼合成一张大纹理。...,即尽量共享材质,对于仅纹理不同材质可以把纹理组合到一张更大纹理中(称为Texture Atlasing)。...,对于U3D一些东西是一知半解,例如DrawCall,得到是一些并不完全正确信息,例如N个纹理打包成一个图集,这个图集就只会产生一个DrawCall,如果不打成图集,那么就会有N个DrawCall...3个对象,那么当3个对象都使用这一个材质/纹理时候,就会产生一次DrawCall,可以理解为一次纹理输送到屏幕上过程,(实际上引擎大多会使用如双缓冲,缓存这类手段来优化这个过程,但在这里我们只需要这样子认识就可以了...),假设3个对象使用不同材质/纹理,那么无疑会产生3个DrawCall 接下来我们3个对象使用2个材质,A和B使用材质1,C使用材质2,这时候来看,应该是有2个DrawCall,或者3个DrawCall

1.2K30

Unity通用渲染管线(URP)系列(十三)——颜色分级(Playing with Colors)

使用System进行添加是因为我们需要多次添加Serializable属性。 ? URP和HDRP颜色分级功能相同。我们将以相同顺序添加相同颜色分级配置选项。...默认情况下,颜色为白色,我们将使用与Unity相同区域默认值,阴影默认区域设置为0~0.3,高光默认区域设置为0.55~1。 ? ? 为什么我们不能使用色盘?...2.5 ACES色彩空间 使用ACES色调映射时,Unity在ACES颜色空间而不是线性颜色空间中执行大多数颜色分级,以产生更好结果。让我们也这样做。 曝光后和白平衡始终应用于线性空间。...LUT是3D纹理,通常为32×32×32。与直接对整个图像进行颜色分级相比,填充该纹理并在以后对其进行采样要少得多。URP和HDRP使用相同方法。...仅对LUT纹理进行颜色分级和色调映射比对渲染图像所有像素分别进行工作要少得多。进一步优化将是缓存LUT。但是,确定是否需要刷新LUT会变得很复杂,尤其是当支持每个摄像机不同设置或混合设置时。

4K31
领券