转跳到内容

阅读Godot的源代码比UE5容易多了


推荐贴

在被虚幻5狠狠蹂躏:397604175_SSB(3):之后,我转投了Godot的怀抱,其更加易读的文档,更简单的设计大大降低的阅读源码的难度,更小的规模也使得编译和调试非常方便。

赞美Godot!

主要是读了一下Surface(表面,或者说网格体)从创建,到提交给图形API的这一部分,就这么一小步,Godot解决了以下问题

1. 对多样化的顶点格式的支持

有的网格体的顶点属性齐全,包含位置,法线,切线,不只一个UV,顶点颜色甚至自定义数据,而有的网格体仅仅包含位置属性。Godot可以灵活地支持各种各样顶点属性的组合,对每种组合(顶点格式)动态计算每种属性的偏移量,创建顶点数组对象(VAO)。当某种顶点属性缺失时(比如着色器中使用了法线但顶点并不包含此属性),Godot会自动生成新的VAO并且使用默认值填充缺少属性,在渲染时通过vertex_input_mask查找符合着色器所需输入的VAO。

2. 支持多线程并发操作

(目前Godot在使用OpenGL作为图形API时对分离线程渲染的支持还有问题,启动就崩溃)

古老的OpenGL并不支持多线程,所有的OpenGL函数必须在唯一一个关联了OpenGL上下文的线程执行。但Godot允许我们在任意线程创建网格体,在任意线程写入和读取网格体数据,不用管线程。Godot也是使用了任务队列,将所有图形相关操作提交到任务队列,由渲染线程延迟执行。同时结合RID,在创建资源时并不立即创建资源,仅仅分配一个RID,然后把真正创建资源的命令加入任务队列。在读取数据时,则需要阻塞并等待渲染线程执行完所有命令(之前的命令可能包含对资源的写入)。

3. 支持蒙皮和形态键

天书,为了防掉san暂时略过了:mx031:

链接到点评

创建帐号或登入才能点评

您必须成为用户才能点评

创建帐号

在我们社区注册个新的帐号。非常简单!

注册新帐号

登入

已有帐号? 登入

现在登入
×
×
  • 新建...

重要消息

为使您更好地使用该站点,请仔细阅读以下内容: 使用条款