- 本篇博客主要为个人学习所编写读书笔记,不用于任何商业用途,以及不允许任何人以任何形式进行转载。
- 本篇博客会补充一些扩展内容(例如其他博客链接)。
- 本篇博客还会提供一些边读边做的效果截图。文章内所有数学公式都由Latex在线编辑器生成。
- 本篇博客主要提供一个“glance”,知识点的总结。如有需要请到书店购买正版。
- 博客提及所有官方文档基于2022.2版本,博客会更新一些书中的旧的知识点到2022.2版本。
-
个人博客网址:《Unity Shader入门精要》笔记:高级篇(1) - Sugar的博客,如文章转载中出现例如传送门失效等纰漏,建议直接访问原博客网址。
- 如有不对之处欢迎指正。
- 我创建了一个游戏制作交流群:637959304 进群密码:(CSGO的拆包密码)欢迎各位大佬一起学习交流,不限于任何平台(U3D、UE、COCO2dx、GamesMaker等),以及欢迎编程,美术,音乐等游戏相关的任何人员一起进群学习交流。
目录
屏幕后处理效果
- 屏幕后处理效果(screen post-processing effects):在渲染完整个屏幕图像后,再对这个图像进行一系列操作。使用该技术可以为游戏画面添加更多的艺术效果,例如景深(Depth of Field)、运动模糊(Motion Blur)等。
- OnRenderImage,抓取屏幕函数:MonoBehavior.OnRenderImage(RenderTexture src,RenderTexture dest) 。Unity会把当前渲染得到的图像存储在src中,然后通过函数的操作把目标渲染纹理dest显示到屏幕上。
- Graphics.Blit:利用该函数完成对渲染纹理的处理
1 2 3 4 |
|
调整亮度、饱和度、对比度
- 调整屏幕的亮度、饱和度、对比度:该部分需要编写一些C#代码来进行综合完成。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
|
场景窗口
游戏窗口
边缘检测
- 边缘检测:利用边缘检测算子对图像进行卷积(convolution)操作。(俗称:开卷)如果相邻像素之间存在差别明显的颜色、亮度、纹理等属性,那么就可以判定他们之间有一条边界。
- 什么是卷积:传送门,这个讲的很不错,还有很多例子和应用。
- 边缘检测算子:Sobel、Prewitt、Roberts。传送门
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
|
高斯模糊
- 高斯模糊:利用高斯核进行卷积计算,每个元素的计算基于如下公式。σ是标准方差(一般取1),x和y分别对应了当前位置到卷积核中心的整数距离。为了确保滤波后的图像不会变暗,我们需要对高斯核中的权重进行归一化,让每个权重除以所有权重的和。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
|
- Bloom扩散效果:可以将较亮的区域扩散到周围的去榆中,造成一种朦胧的效果。
- 原理:根据设定的阈值提取较亮的区域,然后存储到一个纹理渲染中,然后进行高斯模糊处理,模拟光线扩散效果,最后再和原图像进行混合
运动模糊
- 实现方法:1、利用一块积累缓存来混合多张连续的图像,然后取平均值输出。但消耗性能过大。
2、利用速度缓存存储各个像素当前的运动速度,然后利用这些值来决定模糊的方向和大小。
(在书中的下一章节会进行基于速度映射图的运动模糊,故这里就不再深究代码方面的内容)