找回密码
 立即注册
查看: 327|回复: 0

unity hlsl 5 基础纹理

[复制链接]
发表于 2022-4-4 09:05 | 显示全部楼层 |阅读模式
纹理依赖于纹理映射技术,逐纹素(texel)地控制。纹理中存储着每个顶点的一些信息,使用纹理映射坐标(texture-mapping coordinate)存储到每个顶点上。一般情况下,纹理的uv坐标会被归一化到[0,1]范围上。
一、Base map

1.1纹理属性
name##_ST用来声明每个纹理的属性,ST是纹理的缩放(scale)和平移(translation)的缩写,_MainTex_ST.xy存储的是缩放值,_MainTex_ST.xy存储的是偏移值。
1.2纹理中坐标的存储和变换
struct a2v {
  float4 vertex: POSITION;
  float3 normal: NORMAL;
  float4 texcoord: TEXCOORD0;
};
struct v2f {
  float4 pos: SV_POSITION;
  float3 worldNormal: TEXCOORD0;
  float3 worldPos: TEXCOORD1;
  float2 uv: TEXCOORD2;
};
在a2v中, TEXCOORD0, 将模型的第一组纹理坐标存储到texcoord中,在v2f中,TEXCOORD2表示存储纹理坐标。
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
o.uv = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw;
//函数定义
#define TRANSFORM_TEX(tex,name) (tex.xy * name##_ST.xy + name##_ST.zw)TRANSFORM_TEX就是对纹理坐标进行缩放和平移变换。
tex2D(_MainTex, i.uv).rgb * _Color.rgb;这种类型的函数就是对纹理进行采样,其中第一个参数是需要被采样的纹理,第二个参数就是float2类型的纹理坐标。
1.3Unity面板上的纹理属性
Unity面板上,可以选择纹理类型是Texture还是Normal map等。
wrap mode则决定了当纹理坐标超出[0,1]的范围后的处理措施。他有repeat和clamp两种模式,repeat模式下纹理坐标超过1的部分会被舍弃,会直接使用小数部分进行采样。clamp模式下,如果大于1会对1采样,小于0会对0进行采样。



两种wrap mode模式的效果

filter mode决定了纹理放大时会采用哪种滤波。有三种滤波:point、bilinear、trilinear。
当纹理缩小时,会采用多级渐远纹理(mipmapping)技术,牺牲部分空间,只用多开销33%的空间。
要注意的是,纹理的分辨率,长宽都该是2的幂,这样子可以提高性能和节省存储空间。
二、Bump map(凹凸映射)

bump map主要有两种方式:高度纹理(height map)法线纹理(normal map)
2.1高度纹理
高度纹理使用高度图来存储强度值(intensity),颜色浅表示向外凸,颜色深表示向内凹。高度纹理的缺点就是计算量大,会消耗更多的性能。
2.2法线纹理
法线纹理中存储的是表面法线的方向,法线的方向分量范围是[-1,1],像素的分量范围是[0,1]。所以需要一个映射:


而从存储的纹理中读取时,就需要进行一个反映射操作也就是:


法线纹理的存储主要是在切线空间(tangent space)下,远点就是顶点本身,x轴是顶点的切线方向(t),y轴是法线和切线叉积即副切线的反向(b),z轴是顶点的法线方向(n)。切线空间的法线贴图基本都是浅蓝色,模型空间的法线贴图则是彩色。
在切线空间下存储法线贴图的优点是:
1)可以应用在不同网格上
2)可以进行uv动画
2)可压缩, Z方向可以由XY方向推导出来。
缺点是可能在边缘处或者尖锐部分出现接缝。
2.3法线纹理代码(世界坐标下计算)
法线纹理的计算主要有两种方法:一种是在切线空间下计算,另一种是在世界空间下进行光照计算。在切线空间计算因为是在定点着色器中进行计算,所以效率较高,但第二种方法的普遍性更好,比如需要在世界空间下进行一些计算时,例如在使用Cubemap进行环境映射时。
2.4世界空间下bump map的计算
三、Ramp map


四、Mask map

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-22 15:25 , Processed in 0.101965 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表