My Blogs

URP中实现Dual Kawase Blur

算法简介 Dual Blur框架本质上是利用分层处理的思想: 在降采样过程中降低图像分辨率,减少处理的像素数量,从而实现高效的模糊效果 在升采样过程中逐级叠加模糊结果,产生一种更自然、更扩散的模糊效果 Dual Blur支持多种模糊算法作为基础(例如Kawase模糊、高斯模糊等),框架本身不限制具体的模糊操作。 在Dual Kawase Blur算法中,降采样与升采样会使...

URP中实现屏幕空间描边

项目中需要一个特定的描边效果,用于标识玩家当前选中的家具,以及提醒玩家选中的家具是否能够摆放在当前位置。此外,描边效果还需要满足以下要求: 仅标识选中物体的外轮廓,无需内描边,确保选中效果的简洁 描边结果始终在游戏画面的最上层,确保选中效果不受物体之间相互遮挡的影响 效果演示 实现思路 思路本身比较简单:将需要描边的物体绘制到一个单独的Texture中,对该Tex...

Unity中实现Kawase Blur

思路 模糊处理在思路上很简单,只需要收集周围像素的颜色值并求平均值,从而得到模糊的像素。但是不同的实现方法会带来不同的视觉效果、模糊质量以及性能。 Kawase Blur算法在模糊时,会使用一个偏移步长,对目标像素周围的多个像素进行采样。采样点通常是围绕中心对称分布的,数量是可以是4个,8个或16个等。 Kawase Blur算法是一个多pass的算法,每个pass会在前一个pass的...

Unity中实现Volumetric Fog

Theory 我们无法模拟每个组成雾的粒子,但是我们尝试计算一个较小空间中雾粒子的密度,然后根据密度值来模拟粒子与光源的交互行为。如下图所示,当光线进入一个体积时,会发生以下几种情况: out-scattering:将光线散射回光源所在的方向 in-scattering:将光线散射到相机所在的方向 absorption:光线与组成雾的粒子交互所损失的能量 transmi...

Introduction to Turing Mesh Shaders

本篇博客翻译自这篇英伟达的文章 Motivation 在常规的渲染管线中,难以实现高效地绘制数亿个三角形与数十万个对象。而在使用mesh shader的情况下,原本的mesh会被分割为更小的meshlets,每个meshlet在理想情况下优化了其内部的顶点复用,从而减少不必要的重复加载与顶点数据的处理,以提高图形渲染的效率。 比方说,用于CAD的数据可能包含了数千万到数亿个三角形,即...

Writing an efficient Vulkan renderer

Abstract Vulkan是一个高性能、跨平台的图形API。但是要实现一个高性能的Vulkan程序,需要我们深入了解Vulkan中的各种概念。我们将在这篇文章中探讨如内存分配、描述符集管理、命令缓冲区记录、管线屏障、Render Pass等主题。最后还会讨论一些优化CPU与GPU性能的方法。 Memory management 在Vulkan中,我们需要手动分配内存以创建资源。...

Working with Modern Vulkan

Understanding Vulkan’s memory model 在Vulkan中,内存的管理与分配至关重要。但是Vulkan只负责决定分配内存的确切内存地址,除此以外所有的细节都由应用程序负责。也就是说,作为开发者,我们需要自行管理内存类型、内存大小、对齐方式以及任何子分配。这种设计方式为应用程序提供了更大程度的内存管理控制,允许开发者针对特定用途优化程序。 在本小节中,我们将会...