20.SDF材质球
20.1 知识点
SDF 是什么意思
SDF 是有符号距离场 (Signed Distance Field) 的缩写:
- **有符号 (Signed)**:指的是距离可以为正或负,表示一个点位于边界的内部(负值)还是外部(正值)。
- **距离 (Distance)**:表示每个像素点到字符边缘的距离。
- **场 (Field)**:指的是整个字体或图形周围的距离值的分布。
SDF 是一种用于高质量文本和图形渲染的技术,尤其适用于缩放或在低分辨率下保持边缘平滑的情况。
其本质是在 Shader 中利用 SDF 算法渲染文字:
- SDF 技术生成的字体纹理不是普通的位图,而是基于每个像素到字体边缘的距离值。
- 这些距离值存储在纹理的灰度通道中,代表每个像素到字符边缘的距离信息。
- 渲染时,着色器根据这些距离值动态计算字体的边缘,最终渲染出平滑的字符轮廓。
SDF 在 TMP 中用于生成和渲染文本,能让字体在任意大小或距离下保持清晰和锐利的效果。
SDF 材质球指什么
SDF 材质球是我们创建字体资源时使用的材质球:
- 本质上是一个使用了 SDF Shader 的材质球。
- 利用该 Shader 渲染的字体效果更好。
- 该 Shader 提供了许多可配置的参数,可以通过调整参数实现复杂的美术表现效果。
通过学习字体材质球中的这些参数,可以更好地满足表现需求。
SDF 材质球中的主要内容
- 基础表面设置
- 边缘线效果设置
- 阴影(底层)效果设置
- 照明效果设置
- 发光效果设置
基础表面设置 (Face)
- Color:文本表面颜色,会与 TMP 组件中设置的颜色相乘叠加。
- Texture:为文本添加贴图。
- Tiling:平铺(缩放)。
- Offset:偏移。
- Speed:移动速度(可实现滚动效果,可配合 UV 配置使用)。
- Softness:边缘柔和度,让文字边缘产生模糊感。
- Dilate:拓展,类似改变字体粗细的效果。
边缘线设置 (Outline)
- Color:边缘线颜色。
- Texture:边缘线纹理,与轮廓颜色相乘叠加。
- Thickness:轮廓粗细,值越大越粗。
阴影(底层)设置 (Underlay)
- Underlay Type:底图阴影类型。
- None:无阴影。
- Normal:标准底图样式。
- Inner:反转底图,用原始文本遮罩它。
- Color:底图阴影颜色。
- Offset X:X 轴偏移。
- Offset Y:Y 轴偏移。
- Dilate:拓展,相当于改变粗细。
- Softness:边缘柔和度,让阴影边界模糊。
照明设置 (Lighting)
斜面设置 (Bevel)
- Type 类型:
- Outer Bevel:外斜面,字体带有倾斜侧面的凸起效果。
- Inner Bevel:内斜面,字体轮廓向内凹陷。
- Amount:陡峭程度。
- Offset:位置偏移。
- Width:斜面大小。
- Roundness:让斜面更加平滑。
- Clamp:限制斜面最大高度。
本地照明设置 (Local Lighting)
- Light Angle:光照角度。
- Specular Color:镜面反射颜色。
- Specular Power:镜面反射强度。
- Reflectivity Power:反射强度。
- Diffuse Shadow:漫反射阴影。
- Amblent Shadow:环境阴影。
凹凸贴图设置 (Bump Map)
- Texture:凹凸贴图。
- Face:凹凸影响程度。
- Outline:凹凸贴图对文本轮廓的影响程度。
环境设置 (Environment Map)
- Face Color:立方体贴图对文本颜色的影响。
- Outline Color:立方体贴图对轮廓颜色的影响。
- Texture:环境立方体贴图。
- Rotation:旋转环境贴图。
发光设置 (Glow)
- Color:发光颜色。
- Offset:发光效果中心偏移值。
- Inner:发光效果向内延伸距离。
- Outer:发光效果向外延伸距离。
- Power:发光强度。
调试设置 (Debug Settings)
- Font Atlas:字体图集。
- Gradient Scale:渐变比例。
- Texture Width/Height:纹理宽高。
- Scale X/Y:SDF 比例乘数。
- Sharpness:清晰度。
- Perspective Filter:透视过滤器,可使文本在透视摄像机下更柔和。
- Offset X/Y:每个字符顶点位置的偏移量。
- Mask:蒙版。
- 关闭蒙版。
- 硬蒙版。
- 柔和蒙版。
- Clip Rect:剪辑矩形,用于设置遮罩矩阵范围。
- Stencil ID:模板 ID。
- Stencil Comp:模板成分。
- Uset Ratios:使用率。
- Cull Mode:裁剪模式。
20.2 知识点代码
Lesson20_SDF材质球.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson20_SDF材质球 : MonoBehaviour
{
void Start()
{
#region 知识点一 SDF是什么意思
//SDF 是 有符号距离场 (Signed Distance Field) 的缩写
//有符号(Signed):指的是距离可以为正或负,表示一个点位于边界的内部(负值)还是外部(正值)
//距离(Distance):表示每个像素点到字符边缘的距离
//场(Field):指的是整个字体或图形周围的距离值的分布
//是一种用于高质量文本和图形渲染的技术
//尤其适用于缩放或在低分辨率下保持边缘平滑的情况
//它的本质就是在一个Shader(着色器)中利用SDF相关算法规则来渲染文字
//SDF 技术生成的字体纹理并不是普通的位图,而是基于每个像素到字体边缘的距离值。
//这些距离值存储在纹理的灰度通道中,代表每个像素到字符边缘的距离信息。
//然后在渲染时,着色器根据这些距离值动态计算字体的边缘,最终渲染出平滑的字符轮廓。
//主要在TMP中用于生成和渲染文本,能让字体在任意大小或距离下保持清晰和锐利的效果
#endregion
#region 知识点二 SDF材质球指什么
//我们创建的字体资源使用的材质球
//本质上就是一个使用了SDF相关Shader的材质球
//利用该Shader渲染出来的字体效果会更好
//并且该Shader提供了很多可以被配置的参数
//我们可以在对应字体的材质球中修改这些参数
//从而让我们的字体实现一些更复杂的美术表现效果
//因此我们需要学习字体材质球中的这些参数
//从而帮助我们利用它来实现我们的表现需求
#endregion
#region 知识点三 SDF材质球中的主要内容
//1.基础表面设置
//2.边缘线效果设置
//3.阴影(底层)效果设置
//4.照明效果设置
//5.发光效果设置
#endregion
}
}
20.3 练习题
想要为文本添加动态效果、边缘线效果、阴影效果、照明效果、立体效果、发光效果应该在哪里进行设置?
- 在字体材质球上进行相关的设置
想要为字体制作纹理动态效果时,可以配合UV映射相关参数一起使用。其中水平、垂直映射中的Character、Line、Paragraph、Match Aspect有什么作用?
Character:在每个文字上水平\垂直拉伸纹理
Line:每条线的整个宽度上水平\垂直拉伸纹理
Paragraph:整个文本中水平\垂直拉升纹理
Match Aspect:水平\垂直缩放纹理,保持纵横比,不变形
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com