最近在用 C++ DX11 写一些小玩具练手,其中不可避免地碰到了 Context 与多线程渲染内容,在此简单记录下。 D3D11 多线程渲染 D3D11 多线程渲染指的是 CPU 端使用多个线程并行生成 CommandList 并合并或提交,这是一个 CPU 端的概念。 单 GPU 执行 Command 时……

刷 Youtube 的时候偶然看到了一个卡通水的实现,原 Shader 是手撸的,而我使用 Unity ShaderGraph 来复现它。 原理 通过 Camera 深度图获取不透明队列的场景深度,其与水面片元深度的差作为水深依据 通过噪声图渲染波浪,通过 UV 扰动实现波浪动画 实现 1. 获取水的“深度”……

简单记录一下最近碰到的两个简单 Shader 的实现。 单篇篇幅太短,遂两篇合并成一篇文章。 手柄穿墙破洞 该效果常见于 XR 厂商的防护中心软件(或称安全区、游玩区域等),主要特点: 默认情况下,显示技美的动态墙面特效(水波纹、呼吸云云) 当手柄/手/头等靠近墙面时,墙面会开一个洞,并辅以红色警告提示 离墙……

在玩《战地 2042》时发现一个模拟 RGB 像素显示的大屏幕:远观内容为完整图像,贴近观察是发光的 RGB 像素点。该效果很有趣,在 Unity 中复现一个玩玩。 实现的效果 截图 动图(GIF) 本文包含的内容 本文用 Unity 实现,但部分内容参考自 Youtube/Jam2go 的 Unreal E……

由问题“URP 下通过右键菜单创建的 Shader 不显示任何内容”发散而来,引申出对 URP DepthPrepass 的讨论。 上述问题原因 URP 默认 Pipeline 下,渲染不透明物体前,如有下述情况之一,会先执行深度写入 Pass: 有RenderFeature需要Depth Texture/N……

很久之前在某 3D 滑动列表中用过模板测试(Stencil Test),这次回顾,尝试用它搞一个双面穿越门出来。 效果 原理 把一个值写入 Stencil Buffer 中,后续同位置的其他片元渲染时,若开启了模板测试,将会把自身的预设值与 Stencil Buffer 中的值对比(即 Test),基于比较结……

在 Youtube 上刷到了 Unity Japan meetup 2019 的分享视频,其中 ShaderGraph 的分享非常不错,跟着学习下。 前言 前文:ShaderGraph能量护盾(一):接触面检测及边缘发光 Shader 主要包含如下内容: 接触面检测 边缘发光 UV扰动及贴图混合 空间扭曲(或……

挺常见的需求,但找到的 Shader 一般只考虑了 1:1 矩形,这些 Shader 用在头像等正方形图像处没问题,但用做长方形图像时会出现圆角变形。 为什么要用 Shader 如果使用 Mask,会有额外的 DrawCall。 Shader 改造 搜到的 Shader 都大同小异,随意找一个来修改。只讨论修……

之前需要做拓扑排布与流量展示,我研究了两种算法,其中一种是力导向图排布算法。我简单说说力导向图的思路以及为什么要使用 ComputeShader。 原理展示 我使用立方体代表节点,下面是两种算法的排布预览,本文只讨论后者。 1. 基于领域的排布图(本文不讨论) 2. 3D力导向排布图(排布中,暂未达到最优位置……

这是一个 ComputeShader 结合 Shader 实现粒子喷泉的例子。 通过 ComputeShader 计算喷泉粒子的位置,并通过 Shader 将其绘制出来。 效果 原理 生成指定数量具有随机速度的点数据,ComputeShader 中将其初速度与重力加速度叠加,并根据存活时间粗略计算其位置,之后……

这是一个 ComputeShader 结合 Shader 实现下雪的例子。我们通过 ComputeShader 并行计算每个雪粒子的位置,并通过 Shader 将其绘制出来。 效果 原理 通过 ComputeShder 并行计算每个粒子位置,并将 Buffer 与 Shader 共享,Shader 在对应位置……