Texel Density View Mode

Figuring out Textel Density - 80 Level

Texel Density View Mode

关于TD

Texel Density: Mesh(UV)上每单位的像素数

翻译:

  • Texel密度(Autodesk, MODO)
  • 纹理密度
  • 像素密度(Valve XSI)
  • 贴图密度(Unreal UDK)
  • 纹素密度(《游戏引擎架构》中英词汇索引表)

简称TD

Pixel:屏幕上的最小单位
Texel:贴图上的最小单位
一个Pixel上有多个texel(缩小)
一个texel覆盖多个Pixel(放大)

正确的密度: 同类素材有一致的TD

最优做法

确定游戏类型/环境(第一人称视角,第三人称视角,侧视相机视角等)

素材分类:可以出现在玩家面前的,背景素材,远景

通过一些测试确定各个分类的最佳TD

确定在模型UV上执行这些TD的方式

确保各个分类内的TD始终保持一致

如何确定游戏的TD

有两个主要因素决定贴图大小:

  • 物体在屏幕上的大小
  • 内存/显存预算

理想状态下我们希望Texel和屏幕Pixel尽量一致,
但现实中我们只能尽力做到接近。

第一人称视角 (1024 px/m)

通常TD较高,武器、手有更高TD

第三人称视角 (512 px/m)

通常不会很接近环境物体,而距离角色较近,所以环境一般为512px每米,而角色略高

战略视角 (128-256 px/m)

战略视角:总是距离较远,所以不需要高密度

例外
  • TP角色和FP武器离相机较近,TD可以比环境高
  • 通常角色的脸有相对高的TD,因为玩家爱看脸
  • 不容易接近的地方可以有较低TD(天空盒,背景,车底部……)

素材分类

例如,环境可以分为三类:

  • 近景/可玩区
  • 中景/远处物体
  • 背景物体

制作

Maya,Max等都有相应的成熟工具

Geometry Shader

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void geom(triangle v2g input[3], inout TriangleStream<g2f> triStream)
{
...

// 计算三角面在世界空间面积
float wArea = abs(length(cross(abw, acw)));

...

// 像素数
float texArea = _MainTex_TexelSize.z * _MainTex_TexelSize.w;

// UV面积
float uvArea = abs(length(cross(ab, ac)));

// 三角形UV上的像素数
float uvPixels = texArea * uvArea;

// 得到TD
float td = sqrt(uvPixels / wArea);

// 进行着色
...
}
分享