Martin等人根据渲染发生在客户端还是服务器端,将三维渲染分为基于客户端的渲染,基于服务器端的渲染和基于混合端的渲染。
基于客户端的渲染 | 基于服务器端的渲染 | 基于混合端的渲染 | |
渲染端 | 客户端 | 服务器 | 客户端和服务器(合并渲染结果) |
通信 | 1.服务器端->客户端三维场景描述 2.客户端->服务端简单的请求信息 | 1.服务端->客户端计算的结果或最终图像压缩传递 2.客户端->服务端请求或交互指令 | 1.服务端->客户端渲染结果(是最后在那个结果的一部分) 2.客户端->服务端信息请求 |
软硬件需求 | 1.客户端需要安装相应的插件 2.哭护短硬件需要有计算能力 | 1.对客户端硬件无要求 2.服务端需安装对应应用 | 1.客户端需要安装对应插件 2.客户端需要具备一定的计算能力 |
优点 | 1.服务器的工作相对简单,可同时处理大量的请求信息 2.能提供即使的响应反馈 | 1.客户端再无渲染压力 2.客户端无软硬件兼容问题 3.不同硬件的客户端可以显示相同质量的结果 | 同时利用了客户端和服务端主机的计算能力 |
瓶颈 | 1.客户端的计算能力会影响数据载入和渲染质量,给开发带来影响 2.需考虑客户端软硬件兼容问题 | 1.增加网络带宽压力 2.网络对交互有影响 3.服务端处理的并发请求会比基于客户端的要少若干数量级 | 1.继承前两种方法的共同劣势(双向瓶颈) 2.需考虑客户端硬件兼容 3.需考虑网络带宽 |
画面渲染可以分为两种:三维游戏中的实时渲染和动画电影用到的离线渲染。
离线渲染 | 实时渲染 | |
处理器 | CPU | GPU |
渲染农场 | 传统渲染农场 | 云渲染农场 |
应用 | 电影 | 游戏 |
特点 | 画面质量高,真实感强,渲染时间长 | 画面质量一般;渲染速度快 |
渲染器 | Renderman | FurryBall |
云渲染
概念:
云渲染和云计算相似,它是将三维的应用程序放在远程的服务器中渲染,而用户终端通过网络软件或本地的三维程序点击云渲染按钮,访问资源经由高速互联网接入,用户终端发出渲染指令给服务器端,服务器端会根据该渲染指令执行相应的渲染任务,并将渲染出的结果画面通过网络传送至用户终端中并显示。
面临的难题:
如何处理三维渲染任务对计算硬件的性能以及指令响应时间上提出的苛刻要求。一个云渲染系统每天需要处理成千上万个用户渲染请求,若要同时保证给所有用户提供高清的( 如 1080p) 渲染,后端的服务器系统需要承担巨大的计算压力,这就要求服务器具备惊人的图形计算性能,否则无法满足大量用户同时渲染的请求。另一个关键是云渲染对网络延迟控制严格,如果在客户端运行三维游戏,则该游戏就要对用户指令的响应具备高度敏感性,尤其在类似于 CS 的激烈对战游戏中,稍有延迟就可
能让战事陷入死局。
服务器端响应客户端消息的流程:用户发起请求→服务器端接收请求→服务器端渲染图像→服务器端压缩图像→压缩的图像经由网络传输→客户端接收后解压缩→客户端显示图像。
视频压缩编码:通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式文件的方式,其目标是: 在尽可能保证视觉效果的前提下减少视频数据率。
当前主流的视频压缩编码方法有:帧内压缩和帧间压缩。
帧内压缩在压缩一幅图像时仅考虑本帧的数据而不考虑相邻帧之间的冗余信息,属于一种自满足式的压缩方法,一般是采用有损压缩算法,但其压缩比率不高。
帧间压缩是一种无损的压缩方法,利用的是相邻帧之间的相关性。由于大多数视频的相邻帧之间的信息变化很少,对这些冗余信息进行压缩,仅仅记录本帧和其相邻帧之间的差值就能得到很大的压缩量。
需要说明的是:“相邻帧”指的是编码关系上的相邻而非实际播放顺序上的相邻。
运动补偿是一种描述相邻帧之间差别的方法:目标图像会被分割成若干矩形像素块,每个矩形块中计算一个单独的二维向量并存储,该向量是该矩形块的位置偏转向量,即指示对应块在参考帧中源数据的位置。寻找这些二维运动向量的方法被称为运动估计。
变形是一种运动向量的方法,它主要用于传统的基于运动补偿的视频编码估算器。图像变形的方法是每秒只生成少量的图像,而中间的部分使用图像变形实现。变形主要用于补偿网络延迟,并且在网络宽带允许的情况下,让客户端渲染器拥有比服务器端渲染器更高的帧率。
参考文章《基于服务器端的三维渲染技术综述》