使用材料类型

材质类型定义了材质的属性类型。通过调整由材质类型定义的材质属性值,您可以设置材质的外观。每种材质类型都有一个顶点着色器和一个片段着色器,它们设置了您可以在材质中使用的属性类型。

Kanzi Studio 提供模板项目,其中包含位于 <KanziInstallation>/Studio/Asset Library 目录中的 Kanzi Studio 资产库中的默认材质类型和着色器集。当您创建一个新的 Kanzi Studio 项目时,您可以根据它们提供的材质类型从不同的项目模板中进行选择:

  • 要从不包含任何预定义材质类型的模板开始,请选择 Import material types manually。您可以在需要时从 Kanzi Studio 材质库中添加材质类型到项目中,或者创建您自己的材质类型。请参阅 为您的工程添加材质类型。

  • High performance vertex shaders 模板适用于低精度和高性能的 OpenGL ES2 应用程序。它包含针对 OpenGL ES2 优化的基于顶点的着色器。大多数 GPU 特定的计算,包括使用 Phong 反射模型应用光照,都是在顶点着色器中完成的。这是大多数设备的良好起点。

  • High quality fragment shaders 模板适用于高精度 OpenGL ES2 应用程序。它包含基于像素着色器的材料,用于 OpenGL ES2。大多数 GPU 特定的计算,包括使用 Phong 反射模型应用光照,都是在片段着色器中完成的。这通常以性能为代价提供更好的图像质量。

  • Physically based rendering 模板适用于 OpenGL ES3 应用程序。它包含基于实现物理基础渲染 (PBR) 原理的着色器的材质。这些材质的属性代表物理属性,例如金属度,因此易于控制。大多数 GPU 特定的计算,包括使用物理基础光照模型应用光照,都是在片段着色器中完成的。这在许多光照条件下提供了更逼真的渲染效果。

在材质类型中,顶点和片段着色器定义了可以在该材质中使用的uniforms和属性类型。当使用特定材质类型渲染3D节点时,uniform绑定允许 Kanzi 将值写入渲染状态,并将这些值用于uniforms和属性类型。

Uniform bindings 使您能够修改材质类型使用的着色器 uniform 的值,而无需更改着色器代码。

请参阅 Uniform bindings。

您可以:

为您的工程添加材质类型

您可以通过以下方式为您的工程添加材质类型:

  • 创建智能 Material Type。

    Kanzi Studio 提供以下智能材质类型:

    • SmartPhysicallyBased 实现基于物理渲染(PBR)原理。

    • SmartVertexPhong 是一种高性能材质类型,使用基于顶点的冯氏 (Phong) 着色器。

    • SmartFragmentPhong 是一种高质量、性能较低的材质类型,使用基于像素的冯氏 (Phong) 着色器。

    要创建智能材质类型,请在 Library > Materials and Textures 中 按 Alt 并右键单击 Material Types,并选择您要创建的智能材质类型。

    Kanzi Studio 会向您的工程添加一个使用您所创建材质类型的智能材质。请参阅 使用智能材质。

  • 创建 Kanzi 默认 Material Type。

    Kanzi 提供了一组用于不同目的的默认材质类型。要创建一个尚未在您的项目中的 Kanzi 默认材质类型,请在 Library > Materials and Textures 按 Alt 并右键单击 Material Types 中选择您要添加的材质类型。

    如果您在创建工程时使用的模板不含任何预定义的材质类型,则所有 Kanzi 默认材质类型都可供您添加:

    • ColorTexture、DefaultBlit、FontDefault、MaskTexture、SweepTextures 和 Textured 是具有通用着色器的材质类型。由于这些着色器更注重功能和质量而非性能,这些材质类型适合在开发期间使用。请参阅 通用着色器。

    • VertexPhong 材质类型是具有基于顶点的 Phong 着色器的高性能材质类型。请参阅 基于顶点的Phong着色器。

    • FragmentPhong 材料类型是具有基于像素的 Phong 着色器的性能较慢的材料类型。请参阅 基于像素的Phong着色器。

    • PhysicallyBased 材料类型使用实现基于物理渲染 (PBR) 原则的着色器。请参阅 基于物理的着色器。

    • Unlit 材质类型使用不使用灯光的着色器。请参阅 Unlit shaders。

    Kanzi Studio 添加材料类型并使用该材料类型创建材料。您可以从相同的材料类型创建其他材料。请参阅 使用材料。

    ../../_images/material-types-alt-context-menu.png
  • 创建新的 Material Type。

    要创建材质类型,请在 Library 中 按 Alt 并右键单击 Materials and Textures,并选择 Material Type。

    Kanzi Studio 创建了一种材质类型和一种使用该材质类型的材质。

    要编辑您创建的 Material Type 中的 Vertex Shader 和 Fragment Shader,请双击它们。请参阅 编辑着色器。

    ../../_images/create-material-type.png ../../_images/material-type-and-its-material-in-library.png
  • 创建 Linked Material Type。

    Linked Material Type 是 Kanzi Studio 自动与被引用工程中的材质类型保持同步的材质类型。要创建链接材质类型,Kanzi Studio 工程必须包含对另一个 Kanzi Studio 工程的引用,且该工程至少包含一个材质类型。

    要创建 Linked Material Type,请在 Library 中 按 Alt 并右键单击 Materials and Textures,选择 Linked Material Type,然后从被引用的工程中选择材质类型。

    ../../_images/create-linked-material-type.png ../../_images/create-linked-material-type-select-material.png

    如果要从被引用的工程手动更新链接材质类型,请右键点击链接材质类型并选择 Synchronize Linked Material Type。

    当您不再需要同步 Linked Material Type 时,可以将其转换为常规材质类型。

    要转换 Linked Material Type,请右键点击链接材质类型并选择 Break Link to Material Type。这会移除指向被引用工程中材质类型的链接,Kanzi Studio 将不再同步被引用工程中对该材质类型所做的更改。

    ../../_images/break-link-to-material-type.png
  • 从您的计算机中添加任何材质类型。

    要从您的计算机向项目中添加任何材质类型,请在 Library 中右键单击 Materials and Textures,选择 Load Material Type From Disk,转到包含您要添加的材质类型的目录,选择材质类型,然后单击 Open。

    Kanzi Studio 添加材料类型并使用该材料类型创建材料。您可以从相同的材料类型创建其他材料。请参阅 使用材料。

    ../../_images/load-material-type-from-disk.png

修改默认的材料类型

要修改 VertexPhong、FragmentPhong、PhysicallyBased 或 Unlit 材质类型:

  1. 选择或添加到您的项目中一个默认的 VertexPhong、FragmentPhong、PhysicallyBased 或 Unlit 材料类型。请参阅 为您的工程添加材质类型。

    例如:在 Library > Materials and Textures > Material Types 中选择 VertexPhong 材料类型。

    ../../_images/vertexphong-in-library.png
  2. 在 Properties 中的 Preprocessor Definitions 中,设置材质类型的属性。

    您可以对 Kanzi 附带的 FragmentPhong、VertexPhong、PhysicallyBased 和 Unlit 材质类型使用此方法。要修改其他材质类型的属性,您必须手动编辑着色器。请参阅 编辑着色器。

    例如,要启用使用包含材质基础颜色的纹理,请将 KANZI_SHADER_USE_BASECOLOR_TEXTURE 的值设置为 1,然后按下 Enter 键。

    ../../_images/phong-preprocessor-defines-basecolor-texture.png

    在 VertexPhong 和 FragmentPhong 材质类型中,您可以设置以下 Preprocessor Definitions:

    • KANZI_SHADER_MORPH_TARGET_COUNT 设置 Kanzi 可以一次激活的变形目标数量。请参阅 使用 Morph 资源。

    • KANZI_SHADER_NUM_DIRECTIONAL_LIGHTS 设置用于材料的 Directional Light 节点的数量。请参阅 为材质类型设置光源数量。

    • KANZI_SHADER_NUM_POINT_LIGHTS 设置用于材料的 Point Light 节点的数量。请参阅 为材质类型设置光源数量。

    • KANZI_SHADER_NUM_SPOT_LIGHTS 设置用于材料的 Spot Light 节点的数量。请参阅 为材质类型设置光源数量。

    • KANZI_SHADER_SKINNING_BONE_COUNT 设置网格中用于蒙皮的骨骼数量。请参阅 使用蒙皮网格。

    • KANZI_SHADER_USE_BASECOLOR_TEXTURE 允许使用包含材质基础颜色的纹理。

    • KANZI_SHADER_USE_MORPH_DATA_TEXTURE 启用变形数据纹理的使用。请参阅 使用 Morph 资源。

    • KANZI_SHADER_USE_MORPH_NORMAL_LIMIT 使限制生成的变形法线与变形基础网格之间的差异成为可能。请参阅 添加变形。

    • KANZI_SHADER_USE_MORPH_TARGET_NORMALS 使每个变形目标形状能够使用其自身的法线,而不是使用变形基础形状的法线。请参阅 使用 morph target normals。

    • KANZI_SHADER_USE_MORPH_TARGET_TANGENTS 使每个变形目标形状能够使用其自身的切线,而不是使用变形基础形状的切线。

    • KANZI_SHADER_USE_NORMALMAP_TEXTURE 使能够使用包含材质法线贴图的纹理。

    • KANZI_SHADER_USE_REFLECTION_CUBE 启用立方体贴图反射的使用。请参阅 创建立方体贴图反射。

    要了解可以在 PhysicallyBased 材质类型中设置的 Preprocessor Definitions,请参阅 基于物理的材料属性。

  3. 在 Properties > Shader 中,Kanzi Studio 会自动更新 uniform 数组。如果缺少任何 uniform 源类型,Kanzi Studio 会用红色字体标记它们。

    在 Properties > Input 中的 Property Types 下,点击 Sync with Uniforms,为使用此材质类型的材质添加缺少的属性。

    ../../_images/phong-shader-uniforms-missing-texture-properties.png ../../_images/sync-with-uniforms.png

为材质类型添加属性

向材质类型添加属性以使其适合您的需求。您可以使用您自定义或创建的材质类型,使在项目中设置材质外观变得更快更容易。当您向材质类型添加属性时,Kanzi Studio 会将该属性添加到使用该材质类型的所有材质中。

要为材质类型添加属性:

  1. 在 Library > Materials and Textures > Material Types 中,在要添加属性的材质类型中,双击要使用该属性的着色器。

    ../../_images/mymaterialtype-fragment-shader.png
  2. 在 Shader Source Editor 中,将属性添加到着色器代码,然后保存着色器。

    您可以通过从 Uniforms 菜单中选择 Kanzi 默认统一变量。请参阅 编辑着色器。

    ../../_images/use-uniforms-in-shader-source-editor.png
  3. 在 Library 中,选择您在其着色器中添加了属性的材质类型。在 Properties 中,点击 Sync with Uniforms。

    Kanzi Studio 将您在着色器中定义的属性添加到材质类型以及使用该材质类型的材质中。Kanzi Studio 还向材质类型添加了一个统一绑定,其结果由 Kanzi 写入渲染状态,并在渲染使用此材质类型的 3D 节点时用作属性的值。请参阅 Uniform bindings。

    ../../_images/mymaterialtype-red-in-library.png ../../_images/mymaterialtype-sync-with-uniforms.png

重复使用材质类型

当您在 Kanzi Studio 项目中创建材质类型时,可以在另一个 Kanzi Studio 项目中重用该材质类型。

备注

当您想要重用一种材质类型,而其着色器重用了其他着色器的代码时,创建一个资产包。请参阅 重用着色器代码 和 创建资产包。

要重复使用材质类型:

  1. 保存材质类型:

    1. 在 Library > Materials and Textures > Material Types 中,右键点击要在其他工程中使用的材质类型,然后选择 Save Material Type to Disk。

      如果您想重用一种材质类型,其着色器重用了其他着色器的代码,请创建一个资产包,其中包含一个使用您想要重用的材质类型的材质。

      ../../_images/save-material-type-to-disk.png
    2. 选择用于保存材质类型的名称和位置,然后点击 Save。

  2. 复用该材质类型:

    1. 在 Kanzi Studio 中,打开要加载已保存材质类型的工程。

    2. 在 Library 中,右键点击 Materials and Textures 并选择 Load Material Type From Disk。前往包含已保存材质类型的目录,选择该材质类型,然后点击 Open。

      Kanzi Studio 添加材料类型并使用该材料类型创建材料。您可以从相同的材料类型创建其他材料。请参阅 使用材料。

      ../../_images/load-material-type-from-disk.png

Material Type 属性类型

要查看材质类型可用属性类型的完整列表,请参阅 材质类型 (Material Type)。

另请参阅

使用材料

使用智能材质

材质类型和材质

基于物理的材料属性

编辑着色器

使用 Morph 资源

使用蒙皮网格

为材质类型设置光源数量