Physically Based Rendering(渣翻)前言
Physically Based
Rendering(渣翻)前言
2023.10.16补充
在我网上冲浪的时候,我发现已经有人翻译过这本书了。以下是工程地址,所以我决定不在继续自讨没趣了。打开工程你看到的就只是一堆代码,如果你要PDF的话可以去Release下下载。如果你信不过这个译者,你可以对着英文原版看。我大概看了一下就知道这个翻译比我好太多了。所以我不在进行后面的翻译了。但是由于我自己还是写了一部分,这部分就保留在我的博客里吧,也算是我自己的一点私心。
关于翻译
因为我没有找到关于这本书的翻译那就只好自己来了。可是我英语并不怎么好,所以大部分是通过有道翻译进行翻译的。但是有些我个人感觉有问题的翻译会进行修改。当然这其中也有我改后变得不好的地方。如果有翻译的问题,请大家帮忙指出来。我在此谢谢大家了。Physically Based
Rendering: From Theory to Implementation
(pbr-book.org)的原文地址。前言部分没有什么关于渲染方面的知识点,大家可以跳过。我到是为了自己英语练习才从头看到尾 ...
最近的思考2023.10
最近的思考2023.10
最近的生活总是不令我愉快。说实话我都快忘记自己上次觉得生活愉快是什么时候了。所以我时常在思考一些事情。而这就是最近思考的总结。
不想跑,所以跑
我经常在刷句读(一个软件的名字)。最近我就刷到了这样的一句话——不想跑,所以跑(大概是这样的,具体的我不想再去找一遍)。初看这个句话的时候我确实感觉奇怪什么叫做不想跑,所以跑。后面我看到评论说明这个是村上春树这位作家说的(我并不是很喜欢这个作家,我读他的书总是感觉到莫名其妙的难受。我这并不是说他文笔不好,而我单纯觉得难受)。我看别人的分析大概意思是:对于难受的事情,我们总是会找理由逃避。但是对于一些不得不做的事情,我们不应该有这样不去做的想法。所以对于这样的事情,当我们有这个想法的时候那就去做它吧。
我记得这个例子一开始说关于跑步的事情。正好我最近也在跑步健身。虽然我也就是每天在出租屋下的小区跑一圈而已,但是我每天跑步还是会觉得很累。我也时常会想着要不今天就算了。其实我每次有这样的想法就真的算了。所以当我看到这样的话时,我还是有些触动的。对于现在的我而言,我面对着 ...
2023.9.3碎碎念
2023.9.3碎碎念
前言
我好久没有写文章了。最近发生了很多事情,当然距离我上次更新文章已经快一个月了。一个月的时间本来就会发生很多的事情。细细想来也是我要更新文章的时间了,之前我本来想着就是一个月一篇文章。不过我每次写文章都觉得很浪费时间,最近这样的感觉是越来越强烈。每次我都想着字斟句酌,但是实际写起来就是乱写一通。我写的任何一篇文章至少都要花费2小时的时间。我每次都会纠结于某些东西,包括这篇文章我也是纠结了半小时是否要写。毕竟我之前说了要稳定的写文章,现在又到了期限,而我好像有许多东西要写可仔细想想又都不好写。
所以最终我决定这篇文章还是随便写写就当是碎碎念好了。而且此后我也不会再逼迫自己写文章了。之前逼迫自己写文章是为了逼迫自己学习技术并分享。后面我发现我除了会当一个搬运怪外什么都不会。我文章下面的版权提示也是真的讽刺,我到现在也不知道hexo主题怎么把这东西去除掉。所以技术文章我都不想写,就算写了大概率也只是记录吧。比如对于某个问题,我直接贴上别人文章的地址方便自己以后再遇到的时候查看就是了。
碎碎念
不写技术文的原因
...
2023.8最近的总结
2023.8最近的总结
关于最近的文章产出
离我上次上传文章已经是今年6月份的事情了。这段时间内我并没有懈怠,这准确来说是对于学习而言。这主要是因为现在我所负责的项目对我而言太难了。因此对于我而言,我每天都在学习。当然对于写文章,我只坚持到了6月份底。
我之所以停止写文章的原因和我为什么不完成关于《Unity shade
入门精通》的理由一样。我现在所看的内容根本和我现在的工作内容不一致。书中说描述的很多东西,我都很难理解。与其一知半解然后写成读书笔记,还不如再多加深理解后再写下来。(虽然我前面所写的文章也有不清不楚的地方,但是我好歹理解了部分。)因此我打算先读完书能明白多少就明白多少,然后如果后面有空我就写关于它的读书笔记(其实我现在已经写了部分,但是大多就是照抄而已。毕竟原来的作者就写的很好了)。
所以大概关于技术的文章产出在短时间内是不可能了。大概率后面的文章都是描述我个人生活琐事了。
最近的工作
我加入这家公司也快两个月了。刚刚开始的时候,我的工作倒是轻松。因为我不用在乎过多的逻辑处理,我只需要一些部 ...
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分量等于一个定值,然后把法线归一化后再对顶点进行扩张。这样的好处在于扩张后的背面更加扁平化,从而降低了遮挡正面面片的可能性。
...
2023.5月总结
2023.5月总结
我已经离职一个多月了。这期间我除了在家附近找找工作外,我还到了厦门去找。可现实总是残酷的,一个月的时间我只得到了一个面试的机会。虽然我通过了,但是我也没觉得开心。毕竟这家开的工资比我之前的还少。不过我也没有选择,毕竟菜就是菜。作为弱者的我根本就没有选择的余地。和我一起离职的同事到是不错,他进了一家还算轻松的公司。除了做得游戏垃圾外,其他都好(各种福利和高额工资,我也想要)。
我在厦门期间暂住在朋友家里,每每朋友回来都会问我今天是否有面试。而我只能苦笑着说没有。朋友也够义气,每次都给我一些建议。而且我在厦门期间还能随便吃他的零食用他的东西。在我求职的过程中,我就不说发一份简历了然后被退回了,就我想和他们聊天他们都不理我。厦门几乎所有用Unity的游戏公司我都投了,0-20人,100-200人,500-1000人等等规模的公司我都投了一遍。我没有一个机会。我每次失败都改一次在线简历,可无论我怎么修改我的在线简历都没有任何用。我实在没办法不去怀疑我自己是否还有想法去做游戏。在我有转行的意向时,朋友也帮着我分析现在我要去转什么。这一个月我 ...
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的物体,判断它们使用的渲染队列是 ...