How to Develop a Game
Texture
PublishDate: 2025-06-01 | CreateDate: 2025-06-01 | LastModify: 2025-06-01 | Creator:ljf12825

Texture是图形学开发中的一个核心概念,用于在3D模型、UI、地形等物体表面显示图像或图案
它不仅包含颜色信息,还可能包含法线、位移、金属度、粗糙度等各种数据,用于实现丰富的视觉效果

基本概念

Texture类型

类型描述常见用途
Texture2D最常见的二维纹理UI、模型贴图、Sprite
Texture3D三维纹理体积渲染、噪声函数
Texture2DArray一组相同大小的2D纹理批量渲染、材质变体
Cubemap六面贴图的立方体天空盒、反射
RenderTexture可以被摄像机写入的纹理后处理、实时渲染结果
MovieTexture(已废弃)视频纹理使用 VideoPlayer 替代

导入

在Unity中,图片导入后会成为Texture,可以通过Inspector查看其属性

TextureInspector

1.Texture Type(纹理类型)

2.Alpha Source

3.Wrap Mode(包裹模式)

4.Filter Mode(滤波模式)

5.Aniso Level(各向异性过滤)

6.Max Size & Compression

使用

脚本加载Texture

public Texture2D tex;

void Start()
{
    Renderer renderer = GetComponent<Renderer>();
    renderer.material.mainTexture = tex;
}

或者动态加载

Texture2D tex = Resources.Load<Texture2D>("Textures/MyTexture");

从文件读取图片为Texture

byte[] bytes = File.ReadAllBytes("path/to/image.png");
Texture2D tex = new Texture2D(2, 2);
tex.LoadImage(bytes);

RenderTexture与动态渲染

RenderTexture是可以被摄像机实时写入的纹理,用于:

示例

RenderTexture rt = new RenderTexture(256, 256, 16);
Camera.main.targetTexture = rt;

Texture in Graphics

Shader中采样Texture

sampler2D _MainTex;
float frag(v2f i) : SV_Target
{
    float4 color = tex2D(_MainTex, i.uv);
    return color;
}

多通道用途

这样节省资源,减少Texture数量

Texture的内存占用

计算方式(未压缩):
宽度 * 高度 * 通道数 * 每通道字节数

压缩后依赖于压缩格式,比如:

建议