20.SDF材质球

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 材质球中的主要内容

  1. 基础表面设置
  2. 边缘线效果设置
  3. 阴影(底层)效果设置
  4. 照明效果设置
  5. 发光效果设置

基础表面设置 (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

×

喜欢就点赞,疼爱就打赏