Journey
Journey
我已经忘记自己到底是什么时候购买的《Journey》。但是我想应该是2020年吧,那时候《原神》也才刚出不久,我从一篇关于《原神》的报道中看到这个游戏。落日之下,一个身披红袍的角色在沙漠中滑行。角色身旁光影交错勾织出一个如梦似幻的场景。我也就是在那个时候决定去玩这个游戏。直到现在2023.10.24,我才通关了这个游戏。一共运行时常2.2小时。
从2020-2023,我记得我一共玩过三次。第一次自然是刚刚购买游戏的时候,那时候我迫不及待地想要体验报道中的场景。当我打开界面的时候,我就感觉有些问题。这个游戏界面可以说是我遇到过最简洁的界面了。这简洁的界面让我觉得这就像是一个未完成的学生作业。但是我丝毫不怀疑这是一个很好的作品,毕竟Stream上的高分可不会骗人。而当我继续探索的时候,我就对Stream上的分数感觉到了怀疑。我不觉得这也能算是游戏吗?知道如何移动的我也就是漫无目的的在沙漠中走着。被我操作的角色在画面一蹦一跳,我不知道接下来要干什么。但是画面中的高山实在是过于惹眼,所以我不由生出要往高山方向走的想法。现在的我真的很佩服这样的 ...
关于Unity-Dots框架
关于Unity-Dots框架
前言
本文根据Unity官方提供的教程实践为基础来进行说明并添加一些我实践过程中的内容。如果你觉得看我文章浪费时间你可以去官方的教程下查看自行了解一下——官方教程连接(友情提醒:官方教程的Dots版本并没有到最新。至少在2023.9.17,我查看的时候教程Dots版本大概是在1.0.0)。
电脑环境信息:
Windows10版本
Unity2022.3.7f1c1
Dots框架版本1.0.16
环境搭建
Unity版本直接在UnityHub下下载,版本只要下载2022版本以上的长期支持版本就好了(越新的版本可支持的Dots框架版本越高)。接下来的操作你都可以在上面的教程中看到,我这里也只是复述。在进行Unity版本下载的时候,我们要将其URP的选项一起点上。如果你没有找到,后面你在创建空项目的时候再选择URP项目。接下来你只要等Unity自动下载好后再创建这个工程。
接下来我们打开,并在顶部的工具栏中按照以下的操作打开包管理器:Windows
=> Packa ...
Physically Based Rendering(渣翻)前言
Physically Based
Rendering(渣翻)前言
2023.10.16补充
在我网上冲浪的时候,我发现已经有人翻译过这本书了。以下是工程地址,所以我决定不在继续自讨没趣了。打开工程你看到的就只是一堆代码,如果你要PDF的话可以去Release下下载。如果你信不过这个译者,你可以对着英文原版看。我大概看了一下就知道这个翻译比我好太多了。所以我不在进行后面的翻译了。但是由于我自己还是写了一部分,这部分就保留在我的博客里吧,也算是我自己的一点私心。
关于翻译
因为我没有找到关于这本书的翻译那就只好自己来了。可是我英语并不怎么好,所以大部分是通过有道翻译进行翻译的。但是有些我个人感觉有问题的翻译会进行修改。当然这其中也有我改后变得不好的地方。如果有翻译的问题,请大家帮忙指出来。我在此谢谢大家了。Physically Based
Rendering: From Theory to Implementation
(pbr-book.org)的原文地址。前言部分没有什么关于渲染方面的知识点,大家可以跳过。我到是为了自己英语练习才从头看到尾 ...
Unity-Shader读书笔记完结发言(16)
Unity-Shader读书笔记完结发言(16)
如果大家有买过《Unity
shader入门精要》这本书,那么你一定知道我现在读书笔记的进度并没有到书中的末尾。但我不想继续写下去了。书中剩下的文章有表面着色器,基于物理的渲染、Unity5更新了什么和还有更多内容吗(这个就是书中标题)。其实我如果还要再写下去,那么也就剩下两篇了(最后两篇完全真的没有什么做笔记的必要)。现在是2023.6.14日,我完全也有足够的时间在这个按照我的计划将这两篇读书笔记做完。但是我想现在停下来了。
如果你有好好看上篇文章,那么你一定会看到上篇文章我说过我大多是照抄原文。这个原因自然是我实践太少更本没有什么太多的思想,所以我只能照抄。我现在停下来的原因也差不多。对于表面着色器,作者写的本来就很精简了。如果我要做读书笔记最多是只是多加一些Unity官方文档上所说明的内容。而基于物理的渲染则是我现在知识积累实在太少了而作者剩下的篇幅也只能简单介绍。我个人认为对于这个我除照抄外只剩下一个选择——按照作者给的资料将作者未写完的补全。但我觉得我完全可以去买另一本介绍物理渲染的书籍 ...
Unity-Shader读书笔记(15)
Unity-Shader读书笔记(15)
这边文章大多是讲Unity中的渲染优化技术。
影响性能的因素
书中将影响性能的因素分成了三个方面:
(1)CPU 在CPU方面过多的Draw
Call、复杂的脚本和物理模拟都是消耗性能的原因。所谓Draw
Call就是CPU在每次通知GPU进行渲染之前,都需要提前准备好顶点数据(如位置、法线、颜色和纹理坐标等),然后调用一系列API把它们放到GPU可以访问到的指定位置,最后调用一个绘制指令。而在我们调用绘制指令的时候,就会产生一个Draw
Call。如果一帧中Draw Call数量的过多会导致CPU在调用Draw
Call上花费许多的时间。 (2)GPU
在GPU方面则为过多的顶点/片元(过多的片元可能是由于分辨率或是overdraw造成的)和过多的逐顶点/逐片元计算。
(3)带宽
在带宽方面,项目中使用了没有尺寸大但是没有压缩的纹理,或者存在分辨率过高的帧缓存。
书中提及的优化技术
(1)CPU优化,使用批处理技术来减少Draw Call的数目
(2)GPU优化。在减少需要处理的顶点 ...
Unity-Shader读书笔记(14)
Unity-Shader读书笔记(14)
消融效果
书中的消融效果是使用噪声纹理+透明度测试。我们使用对噪声纹理采样的结果和某个控制消融程度的阈值进行比较,小于阈值则使用clip函数进行裁剪。具体实现如下:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156Shader "Learn/Dissol ...
Unity-Shader读书笔记(13)
Unity-Shader读书笔记(13)
卡通风格的渲染
卡通风格的实现有很多的方法,其中之一就是使用基于色调的着色技术(tone-base
shading)。在实现中,我们往往使用漫反射系数对一张一维纹理进行采样,以控制漫反射的色调。卡通风格还需要进行描边处理,虽然之前我们已经做过描边了。但是这里是使用的是基于模型的描边方法。
渲染轮廓线
书中介绍了很多方法这些方法都在《Real Time
Rendering》中有提及,这里我就只说书中作者所用的方法。如果大家有兴趣可以去看这本书。
我们将使用两个Pass进行渲染。在第一个Pass中,我们会使用轮廓线颜色渲染整个背面的面片。并在视角空间下把模型顶点沿着法线方向向外扩展一段距离,以此让背部轮廓线可以被看见。但是对于一些内凹的模型就可能发生背面面片遮挡正面的情况。为了尽可能防止出现这样的情况,在扩张背面顶点前,我们先对顶点法线的z分量进行处理。我们让z分量等于一个定值,然后把法线归一化后再对顶点进行扩张。这样的好处在于扩张后的背面更加扁平化,从而降低了遮挡正面面片的可能性。
...
Unity-Shader读书笔记(12)
Unity-Shader读书笔记(12)
在游戏开发过程中,我们会需要获取到深度纹理和法线纹理来实现特定的屏幕后处理效果。
深度和法线纹理的原理
深度纹理就是一张渲染纹理,但是它存储的是一个高精度的深度值。因为深度值被存储在纹理中,所以深度值的大小范围为[0,1],且为非线性分布。在我们进行投影变换后得到的NDC(就是变成正方体空间那个)。那么它的z轴分量就是在[-1,1]之间(像DirectX这些则是在[0,1]之间)。所以我们要通过类似之前法线纹理一样将z分量控制[0,1]之间。
在Unity中获取深度纹理有两种方式:一种是直接取深度缓存,另一种则是由一个单独的Pass进行渲染得到。这个取决于使用的渲染路径和硬件。通常来说,如果我们使用延迟渲染路径,它会将深度信息存储在G-Buffer中,所以我们能直接获取。如果我们要使用Pass进行获取,那么我们务必要给这个Pass设定正确的渲染路径。Unity会使用着色器替换技术选择那些渲染类型(即SubShader的RenderType标签)为Opaque的物体,判断它们使用的渲染队列是 ...
Unity-Shader读书笔记(11)
Unity-Shader读书笔记(11)
屏幕后处理特效(screen post-processing
effects)是游戏中实现屏幕后处理特效的常见方法。屏幕后处理通常指的是在渲染完整个场景得到屏幕图像后,再对这个图像进行一系列操作,实现各种屏幕特效。我们使用这种技术可以为游戏画面添加更多的艺术效果,比如景深(Depth
of Field)、运动模糊(Motion Blur)等。
建立一个基本的屏幕后处理脚本系统
想要实现屏幕后处理,我们先要抓取屏幕图像。Unity提供了OnRenderImage函数(MonoBehaviour-OnRenderImage(RenderTexture,RenderTexture)
- Unity 脚本
API)就可以帮我们做到。在这个函数中,我们通常是使用Graphics.Blit(Graphics-Blit
- Unity 脚本
API)函数来完成对渲染纹理的处理。一般而言OnRenderImage函数会在所有的不透明和透明Pass执行完毕后被调用,以便对场景中所有游戏对象都产生影响。但是有时候我 ...
Unity-Shader读书笔记(10)
Unity-Shader读书笔记(10)
这篇文章主要讲如何使用Unity
Shader内置的时间变量来实现动画效果。而Unity
Shader中内置的时间变量大家可以看官网的描述:内置着色器变量
- Unity 手册。
纹理动画
序列帧动画
序列帧动画是一种常见的动画形式之一,其原理是在“连续的关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放从而形成动画。git也是差不多的原理。
PS:序列帧动画是使用Assets.png图片。然后我们只需要一个Quad让其正对摄像机就可以了。
具体代码如下:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172Shader "learn/SequenceAnimationShader"{ Properties ...






