使用材料类型

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

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

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

  • High performance vertex shaders 模板适用于低精度、高性能的应用程序。它包含基于顶点的着色器。大部分 GPU 相关计算(包括使用 Phong 反射模型应用光源)都在顶点着色器中完成。对于大多数设备来说,这是一个很好的起点。

  • High quality fragment shaders 模板适用于高精度应用程序。它包含基于像素着色器的材质。大部分 GPU 相关计算(包括使用 Phong 反射模型应用光源)都在片段着色器中完成。这样可以提供更好的图像质量,但往往以牺牲性能为代价。

  • Physically based rendering 模板适用于现代应用程序。它包含基于实现了基于物理的渲染 (PBR) 原理的着色器的材质。这些材质的属性表示物理属性(例如金属度),因此便于直观地控制。大部分 GPU 相关计算(包括使用基于物理的光照模型应用光源)都在片段着色器中完成。这样可以在多种光照条件下提供更逼真的渲染效果。

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

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

请参阅 Uniform bindings。

您可以:

为您的工程添加材质类型

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

  • 创建智能材质类型。

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

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

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

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

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

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

  • 创建一个 Kanzi 默认材质类型。

    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
  • 创建一种新的材料类型。

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

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

    要编辑您创建的 Material Type 中的 Vertex Shader 和 Fragment Shader,请双击它们。请参阅 编辑着色器。要以可视化方式构建片段着色器而无需手动编写 GLSL 代码,请参阅 着色器图(实验性)。

    ../../_images/create-material-type.png ../../_images/material-type-and-its-material-in-library.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 可以一次激活的变形目标数量。请参阅 使用变形。

    • 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 启用变形数据纹理的使用。请参阅 使用变形。

    • 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 工程中重用该材质类型。请参阅 导出和导入工程项。

备注

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

Material Type 属性类型

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

另请参阅

使用材料

使用智能材质

材质类型和材质

基于物理的材料属性

编辑着色器

使用变形

使用蒙皮网格

为材质类型设置光源数量