让我们正式看看什么是可微分渲染。
微渲染不仅包括普通的正向渲染过程,还包括反向渲染过程。众所周知,正向渲染是由游戏资源生成图像的过程,而反向渲染是由渲染结果导出游戏资源的过程。当然,这种理解是片面的,但是现在,为了便于我们理解,我们可以这么说。
我们来看看上图。普通的渲染可以看作是一个非常复杂的函数F,它的输入X包括相机位置,方向,物体的顶点位置,纹理,材质参数等等。f的输出就是渲染结果y。
本图中,上半部分为拟合效果图,下半部分为地面真实效果图。输入x_opt和x_gt,分别代表优化和基本事实。他们可以在渲染函数f后分别得到y_opt和y_gt。在我们定义了屏幕空间的可微损失函数之后,就可以得到它们之间的差值Z,得到y_opt的偏导数。
如果渲染函数f可微,我们可以求出y_opt对x_opt的导数,最后用链式法则求出z对x_opt的偏导数。
当这些参数集的导数得到后,整个问题就变成了一个优化问题。可以通过梯度下降和其他优化算法来优化目标函数,以获得最优参数集。此外,可以将各种神经网络添加到系统的上游和下游,用于各种应用。
有可微分的渲染,对上述问题的统一解决方案其实是先渲染高质量图片A,再渲染Lod图片B,在屏幕空间找到它们之间的差异损失,然后找到待拟合参数的梯度,用梯度下降算法找到参数的最优解。实际上,有各种各样的损失函数。要拟合的参数包括模型、材质参数、贴图,甚至着色器函数。
所以剩下的核心问题就是如何让渲染变得可区分。当然,广义的渲染包括光栅渲染、光线追踪渲染、神经渲染等等。今天只能讨论光栅渲染。
与正向渲染过程不同,逆向渲染需要导出大量参数,这是一个难题。例如,一个1024*1024的映射具有大约10的6次方的参数。对于如此大量的参数推导,普通的有限差分算法肯定是行不通的。
然而PyTorch和Tensorflow中的自动微分技术却无能为力,因为它们是为线性代数和神经网络计算而设计的。普通的神经网络应用程序只产生数百个计算密集型操作,如矩阵向量乘法或卷积。但是渲染计算会产生巨大的计算图形,计算负载不均衡,对性能和内存来说太多了。我们将详细介绍如何解决这些问题并实现一个高效的光栅化可微分渲染器。
\ U3000 \ U30002不同渲染管道的实现
以下将按此顺序介绍,首先是可微分渲染流水线的顶层架构,然后是可微分GPU模拟的实现,即如何让光栅化器可微分。接下来是可微分着色器编译器的实现,因为除了光栅化器,着色器也是游戏的重要组成部分,它也需要可微分。最后简单介绍一下下层引擎资产服务器,它负责将引擎游戏资产提供给我们的可微分光栅化器进行拟合和学习,并将结果转化为游戏资产。
首先我们来看看可微分渲染流水线的整体结构,主要包括分布式训练单元和可微分GPU模拟。
训练单元客户端封装并提供场景、素材、动画等数据,配置各种学习策略。
Mythal Core提供核心差分光栅化器。在当前版本中,我们在CUDA/C上实现了完整的高性能正反向渲染流程,GPU版本的性能完全满足资产辅助生产业务例程的要求。其中,光栅化、插值、纹理采样、着色器等部分的核心支持区分。
另外,我们也在追求计划的标准化。因此,我们将mythal的渲染核心封装成一个符合vulkan驱动标准,适配vulkan 1.2 API接口的虚拟GPU。
让我们关注一下Mythal Core的设计和实现。
对于Mythal的渲染核心来说,首先我们面临的是“易于分布式部署和高性能”这两个需求。我们参考了大量的移动GPU设计理念,以及许多现代GPU硬件和商用GPU仿真软件的优秀解决方案。最后通过基于分层瓦片的栅格化构建整个栅格化过程。
在这种层次结构下,一方面可以用宁滨、瓦片等不同粒度组织和部署任务,非常适合未来灵活的部署需求。另一方面,基于tile的结构对缓存更加友好,便于我们在设备上更好地利用L1缓存。
其实我们也是。这种层级结构和CUDA对L1缓存的强大控制,意味着在每一个阶段,数据在计算前都以“生产者”和“消费者”的模式上传到L1缓存,后续实际计算时访问的大量数据都固定在芯片的缓存中。同时,分层可以使每一层的任务划分粒度更小,这也意味着可以方便地利用warp级别的高性能同步机制。最后,我们支持当代GPU硬件上的许多重要功能,以满足高性能目标的需求。右边的列表显示了HTBR的一些重要特征。
软件渲染是什么意思呢
实时云渲染的关键技术有哪些?首先,我们要知道什么是实时云渲染。其实这是一个复合词,实时云渲染。实时的意思很好理解,就是时效性比较强,甚至可以说是同步的效果。云——指云服务器。随着互联网硬件的快速发展,无论是传统行业还是新兴行业都在向云靠拢,云服务是趋势。渲染是指通过软件从模型生成图像的过程。模型是由语言或数据结构严格定义的三维对象或虚拟场景的描述,包括几何、视点、纹理、光照和阴影等信息。该图像是数字图像或位图图像。通过渲染获得模型和动画的最终显示效果。因此,实时云渲染技术,本质上就是在云服务器(公有云、私有云、局域网)上完成原本在本地计算机上完成的渲染工作,并能将处理后的结果实时返回给最终用户进行显示。
计算机图形的预渲染(预渲染或离线渲染)或实时渲染(在线渲染或实时渲染)速度很慢。预渲染是计算密集型的,需要大量的服务器操作,通常用于电影制作;实时渲染经常用于三维视频游戏,这个过程通常通过图形处理器(GPU)来完成。了解了它的概念后,实时云渲染的关键技术有哪些?
让我们来分解一下使用的技术和硬件。首先,在没有实时云渲染之前,渲染是基于电脑本身的GPU。在这种技术中,电脑的GPU只是被服务器的GPU取代,只是所用硬件的转移。这也得益于云服务的发展,这是硬件基础进步带来的变化。而且相对于电脑本身,服务器会有更好的GPU显卡性能,其替代性或者可扩展性也更好。那么这种实时效果是如何实现的呢?这就是视频流(或像素流)技术。需要通过鼠标、键盘等设备从终端输入指令,快速传输到服务器的云端程序,并执行指令,然后将执行结果以视频图片流的形式传输到终端界面进行解码和显示。整个过程的延迟一定要低,让用户感觉是在自己的电脑上操作程序,不会有卡顿的感觉。这是关键。尤其是云游戏等交互程序,如果延迟高,鼠标键盘可能输入指令,但程序反应慢,或者屏幕返回慢,就失去了意义。
在点云带你看完实时云渲染之后,你可能会想这种技术可以用在哪些领域。其实它的应用范围很广,包括但不限于:数字双胞胎、智慧城市、云桌面、云应用、云游戏以及一些大型程序。3D引擎程序和非3D引擎点云都可以支持,比如flash动画。关于实时云渲染关键技术的更多信息,欢迎随时联系点云。