0%

到目前为止,我们已经成功地实现了一些基本的三维渲染功能。我们从最基础的模型加载开始,接着实现了线段绘制,然后进行了三角形光栅化,涉及了平面着色、光照模型与背面剔除。还使用了Z-Buffer算法处理了隐藏面消除问题,以及成功地将纹理贴在了模型上。使用了三种着色方法——Flat Shading、Gouraud Shading、Phong Shading进行了片元着色。已经对渲染流程有了一个大致的理解。但是,随着我们不断地添加新的功能,我们的代码变得越来越复杂。为了使其更加模块化,更易于理解和扩展。我们将会把相关的功能进行归类,将复杂的功能分解为更小的、更易于管理的部分,为我们接下来的章节打好基础。

在之前的旅程中,我们已经成功地通过Z-Buffer算法已经很完美的处理了嘴唇凹进去的阴影面缺显示在上层的问题,并且把纹理贴在了模型上,达到了我们期望的基本效果。但是我们一直都是从正面视角去观察这个模型,既然是一个渲染引擎,当然也要能切换各个角度去渲染模型,所以本篇笔记的核心内容是理解和掌握透视投影的原理,以及如何利用坐标系变换的思想去推导视图变换矩阵,从而实现移动相机从其他角度渲染模型。对了还有实战使用三种着色方法(Flat Shading、Gouraud Shading、Phong Shading)进行片元着色。

Z-Buffer算法是计算机图形学中常用的一种隐藏面消除(Hidden Surface Removal)的算法。在渲染3D图形时,有些物体会遮挡住其他物体,使得它们在2D视图中不可见。Z-Buffer算法就是用来确定哪些物体在视图中是可见的,哪些是被遮挡的。上一节中我们虽然渲染出了模型,但是嘴唇凹进去的阴影面缺显示在上层,本次就拿Z-Buffer算法来处理这个问题。

本节是PyTinyRenderer的第二节,可以把本系列的文章看成是PyTinyRenderer的工程介绍文档,而不是TinyRenderer的Wiki翻译,其实尝试过翻译,但是我发现有时候翻译并不能清晰地表达我的想法,尤其是一些代码上的细节问题,对照原本的C++工程要复现的话需要做很多工作,所以本系列的核心目的也是能够让读者能轻易的复现TinyRenderer这个工程。本节主要实现的部分是三角形光栅化、涉及平面着色、光照模型与背面剔除。

TinyRenderer是一个从零开始用C++写一个光栅化渲染器,不依赖任何外部库,实现一个超级简化版的OpenGL。但是PyTinyRenderer相信你看名字也能知道,这是一个采用Python来实现的渲染器,当然和TinyRenderer一样,会尽量少的使用外部库。但是遇到类似TGA文件的读写,也可以使用到Pillow等库来进行操作,核心目的是了解渲染的工作流而已。

是不是从来没想过什么是有效的休息?对,反正我自己没想过,什么?休息不就是睡大觉嘛。现在开始我改变了我的看法,从我每天大约睡眠6-7小时,常常试图在周末补觉以缓解工作日的疲劳。然而,多次尝试后我发现周末补觉并不能真正让我恢复精力,反而会让我感到更加疲惫,甚至影响到我的一天活力。所以,在没有过渡熬夜的情况下,“补觉”本身就是一个伪命题,如果你想让周末过得更充实,我建议你周五一定不要熬夜。我现在每周六早上8点左右起床做早饭,这让反而我感到精神焕发,不仅解决了一天的餐饮问题,而且让我整天都充满活力。我曾听说过一个观点:如果你长时间坐着,你可能需要通过运动来让自己休息;如果你长时间在运动,你可能需要通过冥想或类似的静坐方式来休息。然而,如果你连6-7小时的睡眠都无法保证,那么你可能需要补充更多的睡眠。最近我读到了一篇文章,我觉得它的内容非常有价值,可以付诸实践。

倒数排名融合算法(Reciprocal Rank Fusion,简称RRF)是一种在元搜索或混合搜索中常用的相关性评分算法。元搜索或混合搜索是指从多个搜索引擎或搜索源获取结果,并将这些结果融合到一个结果集中的过程。在RAG中,这种算法能够提高你的文档召回率,准率的文档召回才能使得RAG系统出色的完成了第一步。

最近OpenAI发布了Assistants API,允许在自己的应用程序中构建 AI 助手。Assistants API 目前支持三种类型的工具:Code Interpreter、Knowledge Retrieval、Function calling,还有对File的支持,其实网上已经有很多探讨Assistants API的使用方式的文章,主要参考API: https://platform.openai.com/docs/assistants/overview ,个人觉得这套工具其实本质实现了一个简单的ReAct模型,并且通过Assistants提供的 File、Function Call等能力,更好的与自己的应用程序进行交互,只不过目前还是相当不完备的,很多时候使用Assistants并不能一劳永逸。