Unity手游实战:从0开始SLG——TextMeshPro(四)Shaders


TextMesh Pro使用有向距离场的方式(SDF)渲染,所以会包含一个SDF的 Shader集合。如果你不想使用SDF的渲染模式,它也提供了bitmap-only的相关shaders。
所有的Shader都有一个PC版本和一个mobile 版本。mobile 版本要求较低,适用于移动设备,但会支持较少的效果。所有的Shader都可以在TextMeshPro和TextMeshPro/Mobile下的Shader菜单里看到。
1、SDF Shaders
SDF着色器有三种变体,称为Distance Field、Distance Field (Surface)和Distance Field Overlay。常规的和覆盖的着色器是unlit类型,不受场景光照影响。不过,它们可以支持本地模拟的照明效果。
下面是PC和移动版本的 unlit SDF Shader。
surface着色器版本会与场景照明交互。他们使用Unity'的surface着色框架,这会比较灵活但也消耗更多的GPU。它们不是以物理为基础的着色器(非PBS,physically based shaders)。
PC和移动版本的 surface SDF shaders.
SDF shaders 可以使用距离数据产生特殊效果,如outlines、underlays和bevels。这些效果通常会增加文本的视觉大小。在某些极端情况下,你可能会看到奇怪的伪影出现在一些字符的边缘。如果发生这种情况的话就减少对应的效果。例如,一个柔软的、膨胀的、带有大偏移的底座可能会让效果背道而驰。
出现伪影是因为font atlas中相邻字符的数据会流入当前字符。所以也可以在导入字体时增加padding以给效果更大的空间。
1.1、Face
face 设置控制文本的整体外观。这些选项是否可用要取决于着色器是否支持。
1.1.1、Color
face color会与TextMeshPro组件设置的vertex colors相乘。因此,白色代表不修改顶点颜色数据,而黑色则消除所有颜色数据,alpha通道也是一样的。
黑色and 红色 face color, 和白色vertex colors.
1.1.2、Texture
除了face color和vertex colors外,还可以使用纹理对文本进行着色。这三个来源相乘,得到最后的颜色。纹理如何表现在文本上取决于文本组件的UV映射选项。
相同的纹理,不同的UV表现。
unlit mobile shader不支持纹理,但surface版本支持。
1.1.3、UV Speed
一个非零的UV速度会产生纹理滚动动画,因为它的UV坐标会随着时间的变化。要在场景视图中看到这种效果,您必须通过其工具栏启用“Animated Materials”。
1.1.4、Softness
一般来说,文本都是比较硬的轮廓,但你可以通过增加Softness把它变成一个更软的表现。
Softness 设置为 0.5。
1.1.5、Dilate
使用“Dilate”可以调整文本轮廓在距离场的位置。如果没有dilation,效果只有的原始轮廓的一半。负dilation会缩小文本,而正dilation会使文本膨胀。
缩小, 正常, and 膨胀text.
1.1.6、Gloss
使用Distance Field (Surface)着色器时,可以调整文本的光泽度。设置的越高,镜面的高光就越小。
Gloss 设置为 0 和1, 白色的高光
1.2、Outline
通过给outline设置 Thickness 来调整文字的描边。。
1.2.1、Color
通过赋予outline一个不同于文本Face的颜色,它就会拥有一个明显的形状。
白色的字和黑色的outline
1.2.2、Texture
你可以用纹理来表现一个outline,就像文字face。它们可以是独立的纹理,也可以是相同的或不同的纹理。
unlit mobile shade不支持纹理,但surface版本支持。
1.2.3、UV Speed
和face的 UV Speed一样,将会产生UV相关的动画。
1.2.4、Thickness
outline是沿文本的轮廓线进行绘制的,通过thickness向内和向外延伸。你可以通过在适当的方向上以同样的量调整Dilation of the face来推动轮廓内或外的轮廓。
正向,正常,和负向膨胀的thickness
1.2.5、Gloss
当使用 Distance Field (Surface) shader,时,你可以调整outline的光泽度,而不依赖于face的光泽度。
1.3、Underlay
通过启用Underlay,您可以在原始文本下面添加文本的附加呈现。它的典型用途是添加一个假阴影。它不适用于surface 着色器。
1.3.1、Type
激活时,底座可以分为两种类型,一种是正常的,另一种是内部的。一个正常的衬托是放置在原来的文本下,如预期的。内衬是倒置的,并被原来的文字所掩盖。因此,要想看到它,就必须让它的face变得透明。
正常和内嵌的underlay
1.3.2、Color
Underlays一般是一种深的半透明的颜色,但也可以不遵守的。
1.3.3、Offset
Offset X和Offset Y用于控制底层文本也就是制假阴影的方向。
1.3.4、Dilate
你可以放大下面的文字,就像文字的face一样。
1.3.5、Softness
调整阴影的柔软度softness。
1.4、Bevel
通过启用bevel ,您可以在文本中添加一些深度的错觉。它的工作原理就像一张普通地图,只不过斜面是从着色器的SDF纹理中派生出来的。surface 着色器使用这个斜面与实际场景照明相结合。而其他的着色器把它和本地模拟的灯光结合。mobile 着色器不支持它。
斜面需要一个很高的纹理分辨率才能让效果很好。即使这样,斜面也很容易在太明显的时候显示工件。当使用其他常规材料时,这些效果可能是显而易见的,但是如果与与复杂的材料结合起来就很难会被注意到。
1.4.1、Type
有两种斜面类型。外斜面从外向外延伸到轮廓的内部。一个内斜面向上倾斜,直到它到达轮廓的中间,然后向下倾斜,直到它到达文本的表面。这意味着内斜面的坡度要比外斜面陡得多,所有其他设置都是相等的。
虽然bevels 是与outlines 一起设计的,但其实可以不与outlines 一起使用的。
1.4.2、Amount
low 、high区域高度参数控制斜面的陡峭程度。
低、中、高数据。
1.4.3、Offset
你可以从正常的位置偏移bevel,使它不再与outline相匹配,但要注意偏移量对bevels的影响很大。并且还更容易导致bevel丢失outline。
负的, 0, and 和正的偏移
1.4.4、Width
宽度用来调整斜面的尺寸。当设置为零时,斜面会填充轮廓的全部厚度。正值宽度使斜面延伸到轮廓的两侧,而负值宽度则使斜面缩小到轮廓的中部。
负的, 0, and 和正的宽度表现
1.4.5、Roundness
圆度的增加使圆角看上去更圆。这种差别往往是微妙的。
正常和圆角的差异:
1.4.6、Clamp
斜面的高度可以收紧,从而使它更快地达到最大值。收紧的外斜面在到达轮廓的内部边缘之前结束,而收紧的内斜面在轮廓的中部有一个较大的平坦区域。
正常的和收紧的表现
1.5、Lighting
在surface 着色器的情况下,唯一的灯光设置是Specular Color。其他灯光设置控制模拟的本地方向照明,它们是unlit 着色器提供服务的。它们与bevel、bump map和 environment map设置相结合。mobile 着色器不支持任何灯光设置。
1.5.1、Light Angle
灯光的角度决定局部的光是从哪里发光的。它是弧度的。默认角度大约是π弧度,它会将灯光置于文本之上。
不同的模拟灯光角度
1.5.2、Specular Color
当光源被表面直接反射时,镜面颜色是你看到的高光的颜色。
1.5.3、Specular Power
控制镜面照明力度。
1.5.4、Reflectivity Power
你可以使用Reflectivity Power 调整环境贴图对最终颜色的贡献度。
1.5.5、Diffuse Shadow
您可以控制整个阴影级别。更强的阴影意味着较少的光效果。
1.5.6、Ambient Shadow
此设置控制环境光级别。当设置为小于1时,文本颜色将根据其斜率而变暗。这是一个子效果,你只会注意到强斜面或法线贴图。
1.6、Bump Map
您可以使用法线贴图将灯光细节添加到文本中。但它不支持mobile surface 着色器。
1.6.1
纹理必须是一个规则的法线贴图。您可以独立地调整map的强度,以显示文本、face和outline。强度为0表示什么都没有,而强度为1则表示法线贴图效果全开。如果你有一个bevel和法线贴图,他们会混合。
Bumpmap 影响face、outline和两者一起
1.7 EnvMap
环境映射可用于向文本、face或outline添加反射效果。你可以将其用于静态场景的折射,也可以用于特殊的图像效果。mobile 着色器不支持。
1.7.1、Fade and Outline Color
将立体贴图添加到最后一张face和outline颜色之前,会将它的颜色与cube map相乘。黑色会消除了环境映射,而白色包括它的全部。
1.7.2、Texture and Rotation
环境纹理是一个立体贴图。您既可以提供静态cubemap,也可以通过脚本在运行时创建一个。
环境纹理可以旋转。使用它来控制贴图的哪一部分是可见的。以不同的速度动画旋转的多个组成部分可以产生看似不规则的效果。
相同的环境贴图,不同的旋转角度
1.8 Glow
这种效果在其他文本效果之上添加了一个平滑的outline ,通常用于表现辉光。在使用surface 着色器时,它定义了散发颜色。这种效果不支持unlit 类型的着色器。
要注意,当光线延伸到文本边界之外时,surface 着色器就会像实体文本的一部分一样对其进行阴影。这意味着它会获得镜面高光,使用outline的glossiness等。
1.8.1、Color
辉光的颜色着色效果和它的不透明度控制它的表现强度。这是一种加性效应,因此在深色背景下更为明显。
1.8.2、Offset
默认情况下,辉光位于文本的原始轮廓处。使用偏移量将其进一步放置在文本的内部或外部。
负偏移 和 正偏移
1.8.3、Inner and Outer
你可以控制光线从中心发出的距离。内部和外部的范围是独立的,这允许你创造出各种各样的发光效果。
增强内部和增强外部的辉光效果
1.8.4、Power
Power控制着光线从中心到边缘的衰减。1的power会产生线性衰减,而较低的power会导致强度的更快下降。
高强度和低强度效果展示
1.9 Debug
Debug部分公开了着色器内部使用的一些属性。它们可以辅助你调试使用着色器时遇到的问题。您可以在这里配置masking,但是当前的实现还不是最终的。
2、Bitmap Shaders
bitmaps shaders 只用于bitmap-only字体.它们直接显示font atlas,就像对待一个常规的纹理。因此,当放大时,文本将变模糊,并且不能对文本应用任何效果。
2.1 Face
就像使用SDF着色器一样,这里可以对文本进行着色。PC版本还支持纹理,该纹理会应用于整个文本。
mobile 版本有一个Diffuse Power settings。这是一个文本颜色的乘法,可以让文字变的更亮。