创建后期处理效果

使用材质和渲染通道为 3D 内容创建后处理效果。在后处理中,您使用特定材质对帧缓冲区中的内容应用效果,然后使用渲染通道将该内容绘制到屏幕上。

本主题展示了如何创建一个简单的后期处理效果,您可以在其中调整颜色饱和度的级别。您可以通过完成教程来学习如何创建更复杂的后期处理效果。请参阅 教程:创建一个 bloom 效果。

小技巧

Kanzi Studio 提供了几种基于物理的渲染材质类型,其中包括一个内置的色调映射着色器。请参阅 着色器 (Shaders) 和 使用材料类型。

小技巧

<KanziInstallation>/Studio/Asset Library 目录包含几种材料类型,您可以使用它们来创建后期处理效果。例如,使用 MaterialTypes/VertexPhong/Postprocessing/PostprocessingBoxBlur.kzmat 材料类型来创建简单的模糊效果。请参阅 使用材料类型。

要创建后期处理效果:

  1. 定义后处理材质。

    例如,修改 DefaultBlit 材质,使其包含对颜色饱和度级别的调整:

    1. 在 Library > Materials and Textures > Material Types 中,复制 DefaultBlit 材质类型。将该材质类型重命名为 PostProcessingBlit,并将材质重命名为 PostProcessingBlitMaterial。

      小技巧

      如果您的项目不包含 DefaultBlit 材质类型,请在 Library > Materials and Textures 按 Alt 并右键单击 Material Types 中,选择 DefaultBlit。

      ../../_images/postprocessingblit-in-library.png
    2. 在 Library > Materials and Textures > Material Types > PostProcessingBlit 中,双击 Fragment Shader 以在 Shader Source Editor 中打开它。将着色器文件的内容替换为

      precision mediump float;
      
      uniform sampler2D Texture0;
      uniform float BlendIntensity;
      
      // Defines the amount of color saturation.
      uniform float Saturation;
      
      varying vec2 vTexCoord;
      
      // Converts an RGB color value to grayscale.
      float colorToLuma(vec3 col)
      {
          return col.r * 0.2126 + col.g * 0.7152 + col.b * 0.0722;
      }
      
      void main()
      {
          vec4 color = texture2D(Texture0, vTexCoord);
      
          vec3 grayscale = vec3(colorToLuma(color.rgb));
      
          // Interpolate between the color and grayscale values using the Saturation
          // property to weight between them.
          gl_FragColor = vec4(mix(grayscale, color.rgb, Saturation), color.a) * BlendIntensity;
      }
      

      单击 Save。

    3. 在 Library > Materials and Textures > Material Types 中,选择 PostProcessingBlit 材质类型。在 Properties 中,点击 Sync with Uniforms。

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

      Kanzi Studio:

      1. 在 Library > Property Types 中创建您在片段着色器中定义的 Saturation 属性类型。

      2. 将 Saturation 属性添加到此材质类型和 PostProcessingBlitMaterial 材质。

        您使用此属性类型来控制效果中的颜色饱和度级别。

        ../../_images/postprocessingblit-properties-saturation.png ../../_images/postprocessingblitmaterial-properties-saturation.png
  2. 使用渲染通道应用后处理效果。

    例如,要应用设置3D内容颜色饱和度级别的后期处理效果:

    1. 在 Library 中,按 Alt 并右键单击 Rendering,创建 Compose and Blit Pass 渲染通道预设,并将其命名为 Post-process Color Saturation。

      Compose and Blit Pass 包含渲染通道结构,使您能够使用特定材质将 Composition Target Render Pass 渲染通道或纹理传输到屏幕。

      请参阅 将内容渲染到合成目标。

      在 Library > Rendering > Render Pass Prefabs 中,每个顶级渲染通道是渲染通道预设的根。

      在渲染传递预设中,您可以创建渲染传递的层次结构以实现特定的渲染结果。

      ../../_images/compose-and-blit-pass-create1.png ../../_images/post-process-color-saturation-in-library.png
    2. 在 Node Tree 中,选择包含要应用后处理效果的 3D 内容的 Viewport 2D 节点。在 Properties 中,将 Render Pass Prefab 属性设置为 Post-process Color Saturation 渲染通道预设件。

      Kanzi 现在使用 Post-process Color Saturation 渲染通道预设渲染 Viewport 2D 节点。

      ../../_images/viewport-2d-in-project.png ../../_images/render-pass-prefab-set-to-post-process-color-saturation.png
    3. 要使用后处理效果,请设置 Blit Render Pass,使其使用支持该后处理效果的材质来渲染您的内容。

      例如,在 Library 中,选择 Post-process Color Saturation > Blit Render Pass,然后在 Properties 中,将 Material 属性设置为 PostProcessingBlitMaterial 材质。

      ../../_images/blit-render-pass-material-postprocessingblitmaterial.png
    4. 要控制后期处理效果,请添加并设置您为支持该后期处理效果的材质创建的属性。

      例如,要控制颜色饱和度级别,请在 Library 中选择 Blit Render Pass,然后在 Properties 中添加 Saturation 属性并将其设置为所需的值。

      ../../_images/blit-render-pass-saturation-0%2C3.png

另请参阅

渲染 (Rendering)

使用渲染通道

设置用于渲染的材质

教程:创建一个 bloom 效果

着色器 (Shaders)

使用材料类型

应用抗锯齿功能

2D 节点的效果