3Q
鹿邑:听说稣已经从区块链开发转型为牛媒体开发,能说说牛媒体吗?
稣:牛媒体就是三个 Q。
鹿邑:您是说三个季度就能掌握牛媒体?
稣:不是……是说牛媒体不过就是三个队列。
鹿邑:哦?我不会问您是哪三个!
稣:第一个是网络包队列,第二个是音视频包队列,第三个是音视频帧队列。
转码
鹿邑:那经常听到的“转码”到底是啥?
稣:标准多到蛋疼罢了。你的化妆桌,东西怎么摆你说了算,别人摆法不同,但东西是一样的。你搬家时,把它们装起来,用啥来装,怎么装,扔掉哪些不重要的,也是你说了算,别人装法不同,但关键的几样东西还是一样的。
鹿邑:据说转码很烧钱,你们用的机器都很贵?
稣:没有没有,小米游戏本就够装逼。
光栅化
鹿邑:第一次听到“光栅化”这个词时,表示一脸懵逼,给解释一下呗?
稣:稣拿稣法做类比,您就能理解了!Look!
鹿邑:这就是光栅化?还是没明白呀!
稣:别急!您看这些笔划……稣大笔一挥,横竖撇捺,点折弯钩,一笔走红尘,两笔惊鬼神。稣的内心只有笔法走势。
鹿邑:牛逼死了!赶紧发朋友圈!
稣:没错!关键就是发票圈!为了用现代化的方式传播稣法,咱们可以扫描打印、刊登到报纸、拍照发票圈,这些手段有个共同点——最后出来都是一些像素点。
鹿邑:还真是这样哦!我以前拿放大镜看过屏幕,都是红绿蓝的像素点。
稣:您的理解能力不错。这个把“笔划”变成一系列点的过程就是“光栅化”。举个例子,您在画板上拉一条直线,计算机只需要知道头尾两个点和颜色就能定义这条直线,而光栅化之后就是 N 个这种颜色的像素点。
游戏
鹿邑:疫情以来游戏股涨势普遍大好,想了解一下我现在学游戏开发来得及吗?
稣:哈呵,游戏其实就是利用游戏引擎,根据玩家们的输入动作渲染声音和画面,很容易理解,不过实际开发起来很多坑,您还是买在港股上市的游戏公司的股票就好。
鹿邑:游戏引擎是什么,渲染又该怎么理解?
稣:游戏引擎是管理图像、声音、人机设备等一套套接口的集合。最重要的是 3D 引擎,简单的说,它是您告诉它“画个圆”,它就帮您“画出一些点,这些点组成一个圆”的接口。单说画面的渲染,可以理解为更多步骤更广义的光栅化,产生显存里的像素点数组,最后扔给显示器。
鹿邑:您又要类比吗?
稣:Look!稣写作的地方都在这些纸上,写得好的,会签名、盖章,拍照拿去发票圈。过程很简单,但包含了几个重要概念。纸张相当于显存;那张拿去拍照发票圈的纸是后台缓冲区(back buffer)的渲染目标(render target);盖章环节相当于是输出合并器阶段(output-merger stage);拍照可以理解为整体光栅化;当然拍照时,摄像头的位置、角度,以及打灯也是有讲究的;最后发票圈就当作输出到显示器吧!
鹿邑:好像不难理解了,您总是把啥都说得很简单,真这么简单吗?
稣:入门难而已!精通,则更难……不过一开始如果把一些专有名词、缩写整明白,可以更快入门。比如 Direct3D 的 API 就存在不少缩写,什么 OM、RS 啊,只看代码不看文档的话很容易懵逼。
鹿邑:数学要很好吧?
稣:数学思维要很好,具体的知识可以现学。几乎每步都有数学的应用,但套路比较有限,可以一通百通。举个最简单的例子:AlphaBlend 算法,常用于把人物、道具合成到背景图里,它其实和盖章是类似的,把章盖在字上,既可以看到字,也可以看到章。其计算公式就是用 alpha 值对背景点、前景点的三原色值做个加减乘运算,理解一下就行,都不用背。由于 YUV 有很多种具体规范,记不住,干脆也甭记,只要明白有些处理 YUV 比 RGB 方便,有些则 RGB 更方便就行。RGB 和 YUV 之间的转化也都有公式,一样只要理解不用记。
鹿邑:您觉得难点在哪里呢?
稣:规范太多!就拿最基础的像素点来说,就存在很多种格式,大的分类就有 RGB 和 YUV 系列,按每个分量(R、G、B、Y、U、V)的排序就可以分出好多种,还有按每个分量几位表示来区分,然后这些位是整数、浮点数或者浮点数规范化的整数,整数是有符号还是无符号都可以造成不同。
鹿邑:停!我已经晕了!
稣:就好像人以群分吧!但可以按照性别、年龄、肤色、籍贯、身高、体重、专业、爱好等各种维度细分,现实世界就有诸多标准,计算机里一样一样的。
鹿邑:明白!人艰不拆,没有容易二字。
稣:该睡了,做梦容易……吓醒。