求助关于光栅化渲染效率问题

大家好,最近我一直想用Taichi制作一个数学绘图程序,作为图形学入门的练习。后续如果能力够的话,也想做成那种功能齐全的数学函数绘图、变换演示工具。

目前我写好了MVP变换操作的部分,然后对三角形片面的渲染似乎是OK的了,且视角旋转看起来也都没什么问题,效果图如下:

但是我发现这个的效率非常低下,帧率只有1左右,比光追还差,因此在渲染过程中一定存在什么问题。我使用kernel_profiler=True 输出了一下各个部分的用时,发现copy_image和fill两个部分占比很大。这里fill应该指的是我在每一帧将image清空时使用的fill(0)吧?以及copy_image大概指的是为canvas输入图片的那一步操作?但这两个在正常情况下应该不会让运行效率变差吧?所以我猜是不是我的kernel函数draw_triangle()里面使用template的方式有问题?或者存储调用三角片面的方法有问题?输出如下图:

另外我的代码在这里:Code

我的实现思路大概是:实例化几个Triangle类并存储在Rasterizer类的列表之中,当绘图时使用一个python-scope的draw函数先遍历列表中的三角形,对每一个三角形都进行MVP操作并存储于一个临时的三角形类中,将这个临时三角形输入kernel函数draw_triangle进行画图。

目前是跟着闫老师GAMES101的视频学习渲染,知识水平还在rasterization 阶段,还请问上面的这种实现方法,以及代码中的细节能不能被优化 :grinning: 还有就是这效率低的原因

谢谢!

2 Likes

修改了结构 目前效率上去了

3 Likes