关于数学

最近看了很多力学和数学、力学历和数学史。本来只是想研究物理引擎的约束建模问题,多少有点跑偏,不过很有趣。

目前有个模糊的印象,数学问题好像大体能归类为几种:

  • 已知f x,求y(求值)
  • 已知f y,求x(求根)
  • 已知f,求x在什么情况下使y取极值(优化)
  • 已知y x,求f(回归)

当然很多前置工作是针对问题去建模函数f,对于物理问题,那个f可能就是某种law。

剩下的都是“技术”,微积分、拉格朗日乘子法、勒让德变换、高斯-赛德尔迭代法、内点法、单纯形、有限元,都是“技术”。

不知道理解的对不对?泛函是函数的函数,可能更复杂一些,但是不是也可以看做是求根的解是个函数。

CG_23.8.13

昨天对照这个修复了绝大部分模型的显示,实现了Emissive贴图和AO贴图,渲染部分的代码已经比较健壮了,除了Extensions和Morph没实现,其他跟示例基本一致。顺手重写了glsl代码,原来基于uniform的分支对性能影响并不算大。翻了翻官方的Extensions,如下几个有必要短期实现出来,渲染效果可以得到大幅提升:

下午实现了基本的skybox和环境贴图,稍微有点样子了。glBindTexture似乎不能用同一个Texture槽位绑定不同类型的Texture,害我没头绪很久。

傍晚本来要去国家大剧院看歌剧,媳妇晚上的课没准备完就没去,票也懒得转让了。昨晚出去散步,发现丽都附近又摆起摊位了,有酒有咖啡倒是有种大理的感觉,加上最近对面开了新店,一到晚上街边停满车,还挺热闹。

接下来要实现几个扩展(重点是透明)加上IBL,效果应该就基本够用了,打算渲染的事情告一段落,专心搞一段时间物理引擎,刚体力学理论看差不多了。

CG_23.7.30

昨天被拉去看《芭比》,结果两个人都觉得电影一般。晚上写了会代码,实现了多模型加载和Picking、修复了缩放,可以支持简单的场景摆放。

目前还不支持一个模型创建多个实例,而且World通过将多个gltf::Model对象Hack到一起实现的,并不是一个大的场景对象,昨晚看了一下USD,还不想引入那么复杂的东西,在想是直接改gltf的库,还是自己定义一套,后者不是小工程,不想现在做。

另外发现交互处理和编辑状态管理也是一个需要仔细琢磨的主题。

CG_23.7.23

修复了Picking和Gizmo,但是Gizmo因为一个傻问题耽误了差不多一天。BUTTONUP的时候直接切换了选择的对象,导致最后一帧ImGuizmo没渲染,重新选择时出现跳动。修复过程中重写了AABB生成算法,写完发觉旋转时估计有bug,涉及到空间变换的事情,需要安静一会在Pad上推演,偶尔写一两个小时比较适合追加应用层功能。

接下来重点是三个事:

  1. 动画差值和播放实现完整。
  2. 修复一些展示不正常的模型。
  3. 重点:实现Entity系统,支持场景摆放。

CG_23.7.16_2

支持了在线构建command_buffer并修改vertex buffer立即绘制。只搞了line,把AABB画出来了。

昨天想的问题大致想通了,RenderContext和RenderDevice是底层API,究竟如何渲染场景是Renderer自己决定的,这是一个应用层和底层的分界线,更像一个bridge,理论上应该再细分成high_level_renderer和low_level_renderer两层。说到vao和vbo,从看到的资料来说,似乎不建议跟场景有关联,也不建议管理GPU内存,就作为一个ringbuffer使用,每一帧重新copy是最简单直接的,等于是一个workingset,后面试着写写,不过代码得先抽象好。

CG_23.7.16

重构了部分资源管理的代码,修复了一些非PBR模型的的渲染。还没想好怎么设计一个好用的RenderContext和RenderDevice的API,或者说没想好的是上层应该如何组织这些GPU资源,例如VAO和VBO如何屏蔽,最近琢磨琢磨这事。

CG_23.7.9

周末做了一遍重构,实现了Renderer、Engine、AssetsManager等一些基本抽象,代码整洁不少,并且基于这些基本抽象,实现一个简单的AssetsBrowser应用。

资源缩略图的渲染还不太对,并且GPU内存消耗的有点多。周末娱乐之外挤时间写点代码时间还是有点过于紧张。接下来要把RenderDevice、RenderTarget、RenderViewport的抽象实现出来,然后是Entity系统的抽象,这两项结束之后,应该就可以加GameLogic,实现一个简单的MapEditor。