Skip to content

About

Unity URP 全链路 CRT 电视后处理 —— 5 个文件 · 单 Pass · 10 层管线 · 40+ 参数 · 拖入即用

Resources

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📺 Unity URP — CRT 模拟后处理

5 个文件 · 10 层管线 · 40+ 参数 · 单 Pass 全链路 · 拖入即用

将任意 URP 项目的游戏画面实时渲染为老式 CRT 电视的复古视觉效果

CRT 效果对比


📁 文件清单

仅 5 个独立文件,无外部依赖,放入项目即可工作

CRT/
├── AnalogCRT.shader             HLSL 核心 · 10 层管线全部算法
├── CRTVolumeComponent.cs        Volume 面板 · 40+ 可调参数
├── CRTRenderPass.cs             渲染 Pass  · 参数推送 + Blit
├── CRTRendererFeature.cs        Feature   · URP 入口 + 相机过滤
└── CRTAnimatorProxy.cs          Proxy     · Timeline 动画驱动(可选)

CRT效果图.png                    效果截图
CRT技术文档.md                   完整技术文档
README.md                        本文件

🎬 效果概览

10 层后处理管线

⓪ VHS 水波纹抖动
① 信号撕裂故障(分块随机错位 + 边缘安全区保护)
② 画面长宽拉伸(模拟 CRT 宽高比调节)
③ 极坐标扭曲(非线性径向缩放)
④ 桶形畸变(二阶泰勒展开模拟显像管曲面)
⑤ SDF 圆角边框(有符号距离场 + smoothstep 抗锯齿)
⑥ 色差 + 径向模糊 + 电子枪偏移(5 次采样同时完成三种效果)
⑦ 扫描线 + RGB 三色荧光粉点阵(三相位正弦波模拟特丽珑栅格)
⑧ 噪点 + 暗角 + 随机闪白 + 曝光饱和度调色
⑨ 管面曲面玻璃反光(r² 反推球面法线 + Blinn-Phong + 滤色模式)
⑩ 圆角黑边叠加 → 最终输出

核心技巧

🏷️ 特性 🛠️ 实现 💡 亮点
5 采样融合 色差 + 径向模糊 + 电子枪偏移合并采样 一次采样组完成三种效果
SDF 圆角边框 有符号距离场 + smoothstep 抗锯齿 任意分辨率像素级完美圆角
RGB 荧光粉 三相位正弦波(0° / 120° / 240°) 物理还原特丽珑 CRT 像素结构
电子枪偏移 R / B 通道独立 XY 偏移,精度 0.001px 模拟三色电子枪物理未校准
管面反光 r² 反推球面法线 + Blinn-Phong + 滤色 无需额外纹理的逼真玻璃高光

🚀 使用指南

① 导入文件

将 CRT/ 文件夹整体拷贝到 Unity 项目的 Assets/ 目录下(最终路径为 Assets/CRT/)。

② 配置 Renderer Feature

步骤 操作
a 在 Project 中找到 URP Renderer 资产(Assets/Settings/ 下,如 URP-HighFidelity-Renderer)
b Inspector → Add Renderer Feature → 选 CRT Analog PostProcess
c 把 AnalogCRT.shader 拖入 Feature 的 m_CRTShader 字段

③ 挂载 Volume

步骤 操作
a Hierarchy 右键 → Volume → Global Volume
b Volume 面板 → Add Override → 搜 CRT Analog PostProcess
c 勾选 ☑️ enableEffect → 效果即时生效 ✅

④ 调参 —— 当前默认值

📐 展开全部 40+ 参数
# 分类 参数 默认值
1 形态 screenStretch (1, 1)
polarDistortion 0.011
barrelDistortion 0.695
borderRoundness 圆角半径 0.05
borderSmoothness 边缘羽化 0.02
borderColor 边框颜色 #000
enableUVClamp UV 钳制 ✔️
2 过载 flashIntensity 0.127
flashFrequency 0.057
flashDuration 4.97
3 故障 glitchIntensity 0.01
glitchRGBSplit 0.009
glitchTiling 844.26
glitchEdgeSafeZone -0.1
staticNoise 0.008
4 衰减 chromaticAberration 0.0093
radialBlurIntensity 0.0126
colorBleed 2.82
5 结构 scanlineColor #000
scanlineIntensity 0.103
scanlineCount 520
shadowMaskIntensity 0.128
shadowMaskScale 1
shadowMaskContrast 1.15
6 色彩 vignetteIntensity 0.451
vignetteSmoothness 1.633
globalTint #FFF
exposure 0.63
saturation 1.158
7 复古 jitterIntensity 0
jitterFrequency 3
jitterSpeed 1
convergenceR 红枪偏移 (0, 0)
convergenceB 蓝枪偏移 (0, 0)
tubeGlare 管面反光 0

🧩 各文件做什么

📄 文件 🎯 职责 ✏️ 什么时候改
AnalogCRT.shader GPU 端全部渲染算法 新增 / 修改画面效果
CRTVolumeComponent.cs Volume 面板参数定义 新增参数 / 改默认值
CRTRenderPass.cs 读 Volume → 推 Shader → Blit 改执行时机 / 传参方式
CRTRendererFeature.cs URP 入口 + 相机过滤 改哪些相机生效
CRTAnimatorProxy.cs Animation / Timeline 驱动 做参数关键帧动画

⚙️ 环境

项目 要求
Unity 2022.3 LTS+
管线 Universal Render Pipeline (URP)
平台 全平台(仅纹理采样,无 Compute Shader)

❓ 常见问题

Q: 加了 Feature 但画面没变化?

检查三件事:① Volume 的 enableEffect 是否勾选 ② Volume 是否覆盖了当前相机 ③ 相机类型是否为 Game / SceneView(Preview 相机不生效)。

Q: 不想让 Scene 视图也显示 CRT 效果?

打开 CRTRendererFeature.cs,删掉 CameraType.SceneView 判断条件即可。

Q: 怎么给参数做关键帧动画?

挂载 CRTAnimatorProxy 到 Volume 对象上 → 右键 Pull 拉取当前参数 → Animation 窗口录制关键帧。

Q: 如何单独关闭某个子效果?

把对应参数拉到底(设为 0)即关闭。例如 glitchIntensity = 0 关撕裂,staticNoise = 0 关噪点。

Q: 性能怎么样?

单 Pass、核心阶段仅 5 次纹理采样,无额外 RT 切换。移动端可用。

About

Unity URP 全链路 CRT 电视后处理 —— 5 个文件 · 单 Pass · 10 层管线 · 40+ 参数 · 拖入即用

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages