创建后期处理效果¶
使用材质和渲染通道为 3D 内容创建后处理效果。在后处理中,您使用特定材质对帧缓冲区中的内容应用效果,然后使用渲染通道将该内容绘制到屏幕上。
本主题展示了如何创建一个简单的后期处理效果,您可以在其中调整颜色饱和度的级别。您可以通过完成教程来学习如何创建更复杂的后期处理效果。请参阅 教程:创建一个 bloom 效果。
小技巧
Kanzi Studio 提供了几种基于物理的渲染材质类型,其中包括一个内置的色调映射着色器。请参阅 着色器 (Shaders) 和 使用材料类型。
小技巧
<KanziInstallation>/Studio/Asset Library 目录包含几种材料类型,您可以使用它们来创建后期处理效果。例如,使用 MaterialTypes/VertexPhong/Postprocessing/PostprocessingBoxBlur.kzmat 材料类型来创建简单的模糊效果。请参阅 使用材料类型。
要创建后期处理效果:
定义后处理材质。
例如,修改 DefaultBlit 材质,使其包含对颜色饱和度级别的调整:
在 Library > Materials and Textures > Material Types 中,复制 DefaultBlit 材质类型。将该材质类型重命名为 PostProcessingBlit,并将材质重命名为 PostProcessingBlitMaterial。
小技巧
如果您的项目不包含 DefaultBlit 材质类型,请在 Library > Materials and Textures 按 Alt 并右键单击 Material Types 中,选择 DefaultBlit。
在 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。
在 Library > Materials and Textures > Material Types 中,选择 PostProcessingBlit 材质类型。在 Properties 中,点击 Sync with Uniforms。
Kanzi Studio:
在 Library > Property Types 中创建您在片段着色器中定义的 Saturation 属性类型。
将 Saturation 属性添加到此材质类型和 PostProcessingBlitMaterial 材质。
您使用此属性类型来控制效果中的颜色饱和度级别。
使用渲染通道应用后处理效果。
例如,要应用设置3D内容颜色饱和度级别的后期处理效果:
在 Library 中,按 Alt 并右键单击 Rendering,创建 Compose and Blit Pass 渲染通道预设,并将其命名为 Post-process Color Saturation。
Compose and Blit Pass 包含渲染通道结构,使您能够使用特定材质将 Composition Target Render Pass 渲染通道或纹理传输到屏幕。
请参阅 将内容渲染到合成目标。
在 Library > Rendering > Render Pass Prefabs 中,每个顶级渲染通道是渲染通道预设的根。
在渲染传递预设中,您可以创建渲染传递的层次结构以实现特定的渲染结果。
在 Node Tree 中,选择包含要应用后处理效果的 3D 内容的 Viewport 2D 节点。在 Properties 中,将 Render Pass Prefab 属性设置为 Post-process Color Saturation 渲染通道预设件。
Kanzi 现在使用 Post-process Color Saturation 渲染通道预设渲染 Viewport 2D 节点。
要使用后处理效果,请设置 Blit Render Pass,使其使用支持该后处理效果的材质来渲染您的内容。
例如,在 Library 中,选择 Post-process Color Saturation > Blit Render Pass,然后在 Properties 中,将 Material 属性设置为 PostProcessingBlitMaterial 材质。
要控制后期处理效果,请添加并设置您为支持该后期处理效果的材质创建的属性。
例如,要控制颜色饱和度级别,请在 Library 中选择 Blit Render Pass,然后在 Properties 中添加 Saturation 属性并将其设置为所需的值。