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

Unity为什么我不能将相同的纹理应用于不同的对象

在Unity中,不能直接将相同的纹理应用于不同的对象是因为每个对象都有自己的材质属性,其中包括纹理贴图。纹理贴图是用于给物体表面添加颜色、纹理和细节的图片。每个对象都可以有不同的材质和纹理贴图,以实现个性化的外观。

理解这个问题需要了解Unity中的渲染流程。当渲染器处理对象时,它会根据每个对象的材质属性来确定如何绘制对象的表面。材质属性包括纹理贴图、颜色、反射等。如果多个对象共享相同的纹理贴图,则它们会在渲染过程中同时使用这张纹理贴图,导致它们的外观完全一样。

然而,在实际应用中,我们通常希望每个对象都有自己独特的外观。因此,Unity要求每个对象都有自己的材质属性和纹理贴图。这样可以通过为每个对象分配不同的纹理贴图来实现个性化的外观,提供更丰富的视觉效果。

当然,如果你确实希望多个对象共享相同的纹理贴图,也是可以实现的。你可以创建一个新的材质,将纹理贴图应用于该材质,然后将这个材质应用于多个对象。这样,这些对象就会共享相同的纹理贴图了。

腾讯云相关产品推荐:暂无相关产品。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

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

9K22

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

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

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

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

    2K20

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

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

    8.9K20

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

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

    4.2K30

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

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

    3.8K20

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

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

    4.4K40

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

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

    3K20

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

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

    6.4K51

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

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

    2.4K30

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

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

    3.1K20

    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.9K31

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

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

    3.7K20

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

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

    2.6K64

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

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

    10.4K41

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

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

    4K20

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

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

    4.9K32

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

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

    3.2K20

    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会变得很复杂,尤其是当支持每个摄像机的不同设置或混合设置时。

    4.3K31

    基础渲染系列(十一)——透明度

    1.5 渲染队列 尽管现在我们的渲染模式已完全可用,但是Unity的着色器还有另一件事。他们将cutout 材质放入了不透明材质的不同渲染队列中。不透明的东西首先被渲染,然后是cutout的东西。...这可以用来创建许多不同的效果。在某些情况下,需要深度缓冲区但无法访问时,Unity可能会使用替换着色器创建深度纹理。...因此,必须以其他方式绘制透明的几何图形。首先绘制最远的对象,最后绘制最接近的对象。这就是为什么透明的东西比不透明的东西要贵得多的原因。 为了确定几何图形的绘制顺序,Unity使用其中心的位置。...这就是为什么它被称为Fade模式。 ? (淡入红色以及白色的高光) 此模式适用于许多效果,但不能正确表示实体半透明表面。例如,玻璃实际上是完全透明的,但也具有清晰的高光和反射。...纹理也可以包含预乘的alpha颜色。然后它们不需要Alpha通道,因为它们可以存储与与RGB通道关联的Alpha值不同的Alpha值。这样就可以使用相同的数据(例如,火和烟的组合)来变亮和变暗。

    3.8K20
    领券