着色器 (Shaders)¶
使用 Shaders 在图像中产生适当的光和颜色水平,以产生特殊效果或进行后期处理。
Kanzi 中的着色器基于 OpenGL ES 着色语言。您还可以使用 Shader Graph Editor 以可视化方式构建片段着色器,而无需编写代码。Shader Graph Editor 是一项实验性功能。
Kanzi 中的每种材质类型都附带定义着色算法的着色器:
Vertex Shader 处理单个顶点。 Vertex Shader 的源文件扩展名为 |
|
Fragment Shader 处理每个片段。 Fragment Shader 的源文件扩展名为 |
当您的 Kanzi Studio 工程以 OpenGL ES 3.2 或 Vulkan 为目标时,您还可以创建以下着色器:
Geometry Shader 处理基元。 Geometry Shader 的源文件扩展名为 |
|
Tessellation Control Shader 确定图元的细分量,并对输入的补丁数据执行变换。 Tessellation Control Shader 的源文件扩展名为 |
|
Tessellation Evaluation Shader 使用由原始生成器生成的抽象坐标来计算顶点的值。 Tessellation Evaluation Shader 的源文件扩展名为 |
在 Kanzi Studio 项目中,着色器程序作为文件存储在计算机硬盘上。当您将着色器添加到 Kanzi Studio 项目的 <KanziWorkspace>/Projects/<ProjectName>/Shaders 目录时,Kanzi Studio 会自动在 Library > Resource Files > Shaders 中显示它们。
您可以在 <KanziInstallation>/Studio/Asset Library/MaterialTypes 工程中找到 Kanzi 附带的着色器:
Common目录包含具有通用着色器的材质类型。请参阅 通用着色器。FragmentPhong目录包含具有基于像素的Phong着色器的材质类型。请参阅 基于像素的Phong着色器。PhysicallyBasedRendering目录包含具有基于物理着色器的材质类型。请参阅 基于物理的着色器。Unlit目录包含不使用灯光的着色器材质类型。请参阅 Unlit shaders。VertexPhong目录包含具有基于顶点的Phong着色器的材质类型。请参阅 基于顶点的Phong着色器。
您还可以编写您自己的着色器。请参阅 编辑着色器。
要在多个工程之间重用着色器代码,您可以使用 Kanzi 着色器包含库。请参阅 使用着色器包含库。
通用着色器¶
<KanziInstallation>/Studio/Asset Library/ 工程中的 MaterialTypes/Common 目录包含使用通用着色器的材质类型。
ColorTexture 显色彩色的纹理数据。 |
|
CubemapSkybox 显示立方体贴图纹理作为天空盒。请参阅 使用立方体贴图纹理作为天空盒。 |
|
DefaultBlit Blit 渲染通道使用的默认着色器。请参阅 渲染 (Rendering)。 |
|
DefaultCubemapBlit 在 Cubemap 渲染通道下使用 Blit 渲染通道时,该渲染通道使用的默认着色器。请参阅 渲染 (Rendering)。 |
|
DefaultCubemapMipmapFilter、DefaultDepthMipmapFilter、DefaultMipmapFilter 用于自定义合成目标的 mipmap 生成的默认着色器。请参阅 为合成目标创建 mipmap。 |
|
FontDefault 渲染文本字体。此着色器将字形纹理与字体颜色结合并显示输出。您可以将其与 Text Block 和 Text Box 节点一起使用。请参阅 使用 Text Block 节点 和 使用 Text Box 节点。 |
|
LatLongCubemapBlit 将经纬度(等距柱状投影)纹理 blit 到立方体贴图中。您可以在 Blit 渲染通道中使用此着色器替代 DefaultCubemapBlit 着色器。请参阅 渲染 (Rendering)。 |
|
LatLongSkybox 将经纬度(等距柱状)纹理显示为天空盒。请参阅 使用经纬度环境纹理。 |
|
MaskTexture 显示一种纹理遮罩另一种纹理的纹理数据。 |
|
SweepTextures 显示从一种纹理迁移到另一种纹理的纹理数据。 |
|
Textured 显示纹理数据。请参阅 纹理 (Textures) 和 创建纹理材料。 |
|
基于像素的Phong着色器¶
<KanziInstallation>/Studio/Asset Library/ 工程中的 MaterialTypes/FragmentPhong 目录包含使用基于像素的冯氏 (Phong) 着色器的材质类型。大部分 GPU 相关计算(包括使用冯氏反射模型应用光源)都在片段着色器中完成。这样可以提供更好的图像质量,但通常会以性能为代价。
FragmentPhong 实现了 Blinn-Phong shading model。默认情况下,此着色器支持一个方向光、一个聚光灯和两个点光源。着色器计算每个片段的光照。 |
|
FragmentPhongCube 显示根据视图 vector 和表面法线的反射计算的立方体贴图反射,并将结果与 Phong 着色相结合。 |
|
FragmentPhongMorph 启用变形。请参阅 使用变形。 |
|
FragmentPhongSkinned 显示蒙皮网格数据。请参阅 使用蒙皮网格。 |
|
FragmentPhongSkinnedMorph 组合 FragmentPhongMorph 和 FragmentPhongSkinned 着色器。 |
|
FragmentPhongTextured 显示可用于3D节点的纹理数据。请参阅 纹理 (Textures) 和 创建纹理材料。 |
|
FragmentPhongTexturedCube 结合 FragmentPhongCube 和 FragmentPhongTextured 着色器。 |
|
FragmentPhongTexturedNormalMap 显示蒙皮网格数据。请参阅 使用蒙皮网格。 |
|
FragmentPhongTexturedCubeNormalMap 将 FragmentPhongTexturedNormalMap 着色器与立方体贴图反射相结合,从视图向量和表面法线的反射计算得出。 |
|
FragmentPhongTexturedSkinned 组合 FragmentPhongSkinned 和 FragmentPhongTextured 着色器。 |
|
FragmentPhongTexturedSkinnedMorph 组合 FragmentPhongMorph、FragmentPhongSkinned 和 FragmentPhongTextured 着色器。 |
|
基于顶点的Phong着色器¶
<KanziInstallation>/Studio/Asset Library/ 工程中的 MaterialTypes/VertexPhong 目录包含使用基于顶点的冯氏 (Phong) 着色器的材质类型。大部分 GPU 相关计算(包括使用冯氏反射模型应用光源)都在顶点着色器中完成。对于大多数设备来说,这是一个很好的起点。
VertexPhong 实现了 Blinn-Phong shading model。默认情况下,此着色器支持一个方向光、一个聚光灯和两个点光源。着色器为每个顶点计算光照。 |
|
VertexPhongCube 显示根据视图 vector 和表面法线的反射计算的立方体贴图反射,并将结果与 Phong 着色相结合。 |
|
VertexPhongMorph 启用变形。请参阅 使用变形。 |
|
VertexPhongSkinned
请参阅 使用蒙皮网格。 |
|
VertexPhongSkinnedMorph 组合 VertexPhongMorph 和 VertexPhongSkinned 着色器。 |
|
VertexPhongTextured 显示可用于3D节点的纹理数据。请参阅 纹理 (Textures) 和 创建纹理材料。 |
|
VertexPhongTexturedCube 组合 VertexPhongCube 和 VertexPhongTextured 着色器。 |
|
VertexPhongTexturedMorph 组合 VertexPhongMorph 和 VertexPhongTextured 着色器。 |
|
VertexPhongTexturedSkinned 组合 VertexPhongSkinned 和 VertexPhongTextured 着色器。 |
|
VertexPhongTexturedSkinnedMorph 组合 VertexPhongMorph、VertexPhongSkinned 和 VertexPhongTextured 着色器。 |
|
基于物理的着色器¶
<KanziInstallation>/Studio/Asset Library/ 工程中的 MaterialTypes/PhysicallyBasedRendering 目录包含使用基于物理的着色器的材质类型。这些着色器实现了基于物理的渲染 (PBR) 原理。Physically-based materials 的属性表示物理属性(例如金属度),因此控制起来非常直观。大部分 GPU 相关计算(包括使用基于物理的光照模型应用光源)都在片段着色器中完成。这样可以在多种光照条件下提供更逼真的渲染效果。
PhysicallyBased 实现了基于物理的着色模型,并默认情况下启用:
|
|
PhysicallyBasedClearCoat 使用基于物理的渲染来渲染覆盖有透明涂层的材料。这通常用于车辆油漆。 |
|
PhysicallyBasedMorph 默认情况下,启用具有 3 个目标的变形。请参阅 使用变形。 |
|
PhysicallyBasedSkinned 默认情况下,启用最多 64 个骨骼的网格蒙皮。请参阅 使用蒙皮网格。 |
|
PhysicallyBasedTextured 启用使用包含基础颜色、法线、粗糙度、金属度和遮挡贴图的纹理,以及材料发出的光。请参阅 创建基于物理的纹理材料。 |
|
PostProcessTonemap 全屏后期处理材质,默认情况下应用Reinhard色调映射。 |
|
Unlit shaders¶
<KanziInstallation>/Studio/Asset Library/ 工程中的 MaterialTypes/Unlit 目录包含材质类型 (Material Types),其着色器使用由 KHR_materials_unlit glTF 扩展定义的无光照着色模型。无光照着色器是基于物理的着色器的替代方案,您可以出于性能或美观的考虑使用它们。例如,在不需要光照的情况下,您可以使用无光照材质来实现“手绘”效果。