美文网首页
UnityTips 之大批量的纹理采样操作

UnityTips 之大批量的纹理采样操作

作者: 暴走TA | 来源:发表于2024-01-23 11:08 被阅读0次

简介: 在搬砖的过程中,难免会遇到美术不停地提功能需求,有一部分类型的需求可能需要一些遮罩图来进行实现,当这种需求多的时候,很容易导致我们一个着色器上采样纹理数量超过16个,平常的写法出现16个纹理采样的时候,shader编译的时候就会报错了,我们来看一个小妙招。当然这个我是在 windows平台下的 dx11 来测试的,通过下图的报错也可看出来,至于其它平台,应该也是类似的
unity版本: 2022.3.14
管线:URP

报错

当我们在一个着色器中像平时一样使用16个采样器时就会报下面的错,注意,这里指15个纹理采样不会报错,16个纹理采样就会报错


纹理采样过多引起的编译报错

这个报错也提示了我们,sampler的 register的数量超过了索引数16
官方文档中有写到 DX11 支持最多 128 张纹理和 16 个 sampler

分析

我们来看一下代码里面的声明


16个纹理属性 常规声明状态下对应的 16个 sampler

我们看一下 sampler2D 做了啥

官方文档详细说明
sampler2D, sampler3D, samplerCUBE 其实同时定义了 texture 和 Sampler 对,这种方式也是我们日常使用的方式,至于平台兼容啥的都是引擎自动处理的,这种写法比较简单,通用性也强。
其中的 sampler 就包含了我们纹理采样的 循环模式,过滤模式,各向异性过滤模式,这个正好是和纹理的导入设置相对应的
当然我们也可以自己分开来定义,unity也为我们提供了宏。我们来看一下分开声明后的代码,这里我们通过宏声明20个纹理属性,但是只声明一个 sampler

20个纹理声明 纹理的采样

我们使用 SAMPLE_TEXUTRE2D(texutre,sampler,uv) 来进行采样,这一下20个纹理也没有编译报错。
当然 sampler 包含了我们纹理采样的 WrapMode,FilterMode,AnisoFiltering,所以只有上面三个参数一样的纹理才可以公用 sampler,不然效果会错的哦!!

相关文章

  • Python中ArcPy批量掩膜、批量重采样栅格遥感影像

      本文介绍基于Python中ArcPy模块,对大量栅格遥感影像文件进行批量掩膜与批量重采样的操作。   首先,我...

  • [全屏后处理]Lut校色

    前言 Unity后处理,说简单点,采样到屏幕的纹理Texture,然后通过一定的计算将此纹理操作一通,然后得到我们...

  • 七、游戏表现:3、流光效果

    原理:采样一张纹理贴图,并让这张纹理随着时间做变化即有流动效果。为了让采样的纹理能从上往下依次进行扫描,需要从原始...

  • 构建半兰伯特光照模型对Ramp图进行采样

    我们使用halfLambert来构建一个纹理坐标,并用这个纹理坐标对渐变纹理_RampTex进行采样。

  • WebGL2系列之采样器对象

    前言 在WebGL1中,纹理的图片和采样信息都是写在纹理对象之中. 采样信息告诉GPU如何去读取贴图上图片的信息。...

  • 第十二节—关于纹理单元

    本文为L_Ares个人写作,包括图片皆为个人亲自操作,如需转载请表明原文出处。 一、关于纹理采样器Sampler ...

  • 2018-03-17

    基础纹理 最基本的纹理采样用到的Unity Shader 内置方法: UNITY_MATRIX_MVP 当前的模型...

  • 计算机图形学-线性过滤

    纹理过滤 1. 为什么在纹理采样时需要texture filter(纹理过滤)。 我们的纹理是要贴到三维图形表面的...

  • OpenGLES帧缓冲(FBO)

    FBO Frame Buffer object 为什么要用FBO 我们需要对纹理进行多次渲染采样时,而这些渲染采样...

  • OpenGL笔记八:2D纹理坐标解析

    前言 期待您移步上篇:OpenGL笔记七:纹理常用API(二) 纹理采样 为了能够把纹理映射(Map)到三角形上,...

网友评论

      本文标题:UnityTips 之大批量的纹理采样操作

      本文链接:https://www.haomeiwen.com/subject/cebuodtx.html