美文网首页
UnityShader(六):纹理(Texture)的属性

UnityShader(六):纹理(Texture)的属性

作者: 忆中异 | 来源:发表于2021-07-15 18:02 被阅读0次

Texture Type

选择适合的类型,Unity会为Unity Shader传递正确的纹理,并对一些纹理进行优化。

Defualt(默认纹理)

image.png

Normal map(法线纹理)

image.png

使用了法线纹理类型,Unity会根据不同平台对纹理进行压缩,如DXT5nm格式,通过UnpackNormal函数进行采样,见下面UnityCG.cginc中源码。这种压缩只用两个通道(原来三个),减少法线纹理占用的内存空间。

inline fixed3 UnpackNormalDXT5nm (fixed4 packednormal)
{
    fixed3 normal;
    normal.xy = packednormal.wy * 2 - 1;
    normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy)));
    return normal;
}

inline fixed3 UnpackNormal(fixed4 packednormal)
{
#if defined(UNITY_NO_DXT5nm)
    return packednormal.xyz * 2 - 1;
#else
    return UnpackNormalDXT5nm(packednormal);
#endif
}

Create from Grayscale

image.png

用于高度图生成法线纹理。这样就可以和切线空间下的法线纹理同等对待了。

  • Bumpiness:控制凹凸程度
  • Filtering:决定凹凸程度计算方式
    • Smooth:生成平滑的法线纹理
    • Sharp:使用Sobel滤波(一种边缘检测使用的滤波器)生成法线纹理

WrapMode

决定纹理坐标超过[0, 1]范围后将会被如何平铺(Tiling)。


image.png
  • Repeat:如果纹理坐标超过1(同理小于0)时,整数部分会被舍弃,如值为2.23采样值等于0.23。
  • Clamp:如果纹理坐标超过1(同理小于0)时,会截取到1(或0)。
    渐变纹理应该选择Clamp(下右图)。因为Repeat(下左图)可能产生如下错误,大于1的值如1.01会采样为0.01,为黑色。


    image.png

FilterMode

决定纹理拉伸时采样哪种滤波模式。


image.png

Point,Bilinear,Trilinear对比如下,效果依次提升,性能消耗同样增大。


image.png
  • Point:最近邻滤波,缩放是采样像素数目只有一个。
  • Bilinear:使用线性滤波,找到四个近邻像素,然后进行线性插值混合得到,图像模糊了。
  • Trilinear:几乎和Bilinear一样,只是如果开启多级渐远纹理技术,那就会在多级渐远纹理之间进行混合。

多级渐远纹理(mipmapping)

面板中Advanced->Generate Mip Maps默认开启。原理是提前用滤波处理得到更小的图形,每一层都是上一层图像降采样得到,以此类推,形成一个图像金字塔。在物体远离摄像机时,直接使用较小的纹理。缺点是通常会多占用33%的内存空间。

相关文章

  • UnityShader(六):纹理(Texture)的属性

    Texture Type 选择适合的类型,Unity会为Unity Shader传递正确的纹理,并对一些纹理进行优...

  • glTexParameter

    设置纹理参数 指定活动纹理单元的目标纹理,必须是GL_TEXTURE_2D GL_TEXTURE_CUBE_MAP...

  • 纹理-Texture

    首先我们要知道什么是纹理,纹理在Unity中就是图片,图片是由编程者自己导入的,下面就一步一步介绍怎么创建和改变纹...

  • 纹理texture

    1. 读取数据 1.1从颜色缓存取内容作为像素图直接读取 glReadPixels(GLint x, GLint ...

  • 第二章:图形绘制

    Texture 1.纹理(Texture):图片从原始格式,解码并上传到GPU的过程,被称之为纹理。2.用途:其实...

  • OpenGL学习4——纹理

    纹理(Texture) 纹理(Texture) 是一个2D图像(也有1D和3D纹理存在)用于给一个对象添加细节信息...

  • UnityShader精要笔记六 基础纹理

    本文继续对《UnityShader入门精要》——冯乐乐 第七章 基础纹理 进行学习 一、前置知识 参考主要参考闫令...

  • OpenGL - 纹理

    GitHub Demo : Texture 纹理的一些相关知识

  • OpenGL纹理常用API

    读取纹理 载⼊入纹理 其他纹理操作 纹理对象 设置纹理参数 关于贴图方式(GL_TEXTURE_WRAP_S、GL...

  • 深度纹理生成及可视化渲染(three.js webgl_dept

    three.js中的webgl_depth_texture例子首先将场景渲染到深度纹理(depth texture...

网友评论

      本文标题:UnityShader(六):纹理(Texture)的属性

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