让我们正式看看什么是可微分渲染。
微渲染不仅包括普通的正向渲染过程,还包括反向渲染过程。众所周知,正向渲染是由游戏资源生成图像的过程,而反向渲染是由渲染结果导出游戏资源的过程。当然,这种理解是片面的,但是现在,为了便于我们理解,我们可以这么说。
我们来看看上图。普通的渲染可以看作是一个非常复杂的函数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的一些重要特征。
渲染图片是什么意思啊
PS软件是干什么用的?
虽然大多数人心里都有一个模糊的答案,但并不具体。由于这种模糊的认知,我们无法像盲人一样欣赏这个软件的全貌,对它有很多错误的看法,大大降低了学习的目的和效率。这部分要解决的问题是PS能用来干什么,为什么要学?
我们总结了PS的主要功能,大致可以分为:
又称图像融合,是指将完全不同的图像素材无缝融合到一个画面和一个场景中,创造出现实中不存在的图像内容。这也是PS最强大最核心的功能点,是所有软件中最好的。
合成应用广泛,在我们的生活中无处不在。主要用两个场景:广告创意和运营视野。
在PS的使用中,最重要的分支其实是广告创意的设计,即设计吸引目标用户的创意复合图像。它们的主要特点是有一定的故事性和内涵,通过创意图片来传达。比如下图,福特用来传达产品安全的广告,设计师合成了一个现实世界中永远不会出现的魔幻场景。
运营其实也是广告设计的一种,但它的设计通常不需要有非常戏剧化的内容或创意,只要能贴合主体,吸引用户的注意力即可。主要用于横幅、活动页、封面等类型的设计,比如下面的图例。
就是我们常说的后期“修图”“p图”。之所以有后期摄影,是因为拍摄的原始胶片由于各种原因不够理想,设计师或者摄影师希望照片呈现出自己想要的效果,并进行调整和修改。PS从7.0到CS系列之后,大大增强了对摄影照片的支持,是PS除了合成之外的第二个功能特性。
摄影后期可以分为普通后期、人像后期、产品精细化三个常见方向。
后期调整一般摄影主题,达到满意的状态,比如风景、建筑、动物、美食等等。这些图片可以应用于商业海报、菜单、杂志等领域。
它是肖像摄影中的一个特殊主题。无论是相机还是软件,都会对作为拍摄对象的人给予特别的支持,比如去死皮、红眼修正、祛斑等等。我们每天看到的品牌宣传图,都是后期专业画像输出的。
商品精细化是商品摄影加工的一个分支,主要是通过一系列的操作,让产品看起来更加“高端大气”。基于国内电商领域的发展和激烈竞争,商品图片的精细化已经成为一个非常热门的领域。
PS有强大的自定义笔刷,矢量工具和图层样式。它不仅可以绘制CG插画,还可以绘制一些由矢量图形组成的图像,如logo、icon等。在图形绘制方面,PS主要支持数字绘制、物理绘制和矢量绘制。
这就是俗称的板画。游戏原画、插画等手绘作品可以通过图形写字板等外部工具实现。
仿真画是一种常见的模仿风格设计。在一些特殊的设计需求中,我们需要绘制一些与现实世界非常接近的物体或场景来进行效果图的预览。
虽然AI已经作为主要的矢量图形软件,但是并没有阻止PS在7.0版本之后推出自己的矢量功能,方便用户在PS中创建矢量元素,更方便辅助合成。矢量图主要用于图标、LOGO等的设计。
当然,如果不是太麻烦的话,PS也可以像AI一样画出更细节更复杂的矢量插图。
排版本质上就是把不同的内容放到画布上,并为它们设置合理的顺序、位置、大小和角度调整。因此,PS可以用于印刷材料的排版,如菜单、传单、展板或名片的设计,以及手机app、电脑网页等UI界面设计。
也就是我们需要一些印刷材料,比如名片设计、文档排版、文字海报等等。
UI的设计是一些固定元素的排列,它们和PS其他复杂的功能几乎没有交集。所以一般的APP、网页、软件设计都只应用PS的排版、版面功能。
除了上面的主要使用场景,它还可以做一些奇怪的,意想不到的事情,比如批量压缩图片,导出gif,生成pdf,简单的视频编辑,甚至还有一个初始比例的3D生成和渲染模块。
因为这些功能都是用在一些相对特殊的场景,这里就不展开了,以免给大家造成更多的认知负担。
如果你觉得PS有哪些知识点不容易记住,可以看看下面我们做的树形图,保存下来。
综上所述,PS是一款以位图合成为核心的多用途平面设计软件。无论是过去还是未来,Adobe在PS中加入任何复杂的特性或功能,其最本质的工作都是围绕着位图的合成和处理。
后台私信边肖关键词【领取】可领取安装包及相关学习资料~