【问题标题】:Spritesheet animation vs Video renderingSpritesheet 动画与视频渲染
【发布时间】:2015-10-11 16:35:09
【问题描述】:

我正在使用 SDL2 用 C 语言开发游戏,我的问题是游戏是全高清的,并且有很长(180 帧)的角色动画,会生成非常大的精灵表。我有一个 7326x7250 像素的精灵表,我必须将它分解为 16 个 2048x2048 像素的精灵表,以便我可以在平板电脑上播放它(它们的最大纹理大小是,在下限上,2048x2048)。

考虑到这个问题,我最终想知道是否将动画存储在视频文件中并将每个解码帧加载到 GPU 中会更好。我知道解码视频帧的开销以及在 GPU 上切换纹理的开销(通过 16 个 2048x2048 纹理,我能够将它们存储在单个纹理数组中,在动画期间保持 GPU 状态)。有没有人尝试过并且成功了?

【问题讨论】:

    标签: c opengl sdl-2 ogg-theora


    【解决方案1】:

    以这种方式使用视频文件会牺牲简单性、性能、图像质量和令人惊讶的内存(您需要流式传输视频的一部分,将其转换为位图,然后将该位图上传到显卡)。

    几乎唯一的好处是文件大小更小,我认为这不值得单独的任何惩罚,更不用说所有这些惩罚了。你仍然有相同的纹理限制,(也许 SDL2 api 在使用视频时隐藏了这个实现细节,但它仍然是一个限制)

    我不会过多担心切换纹理,因为作为动画,您可能每帧仅切换一次纹理(并且考虑到无论如何您都会在帧中切换纹理以绘制其他对象,这不会'完全不影响性能)也就是说,除非您有多个角色在不同的动画状态下使用相同的精灵表,但即便如此,根据纹理将它们组合在一起以减少切换会更容易。

    【讨论】:

      【解决方案2】:

      我不相信这是一个“真实”的问题,所以我不会给出“真实”的答案。我会使用 SVG,文件会非常小,您只需将它们绘制到 SDL 表面或纹理上,无论您需要它们的大小。 SDL 本身不支持 SVG,因此请查看 Cairo 等库。

      为了您的方便,我将您指向这篇论文 rendering SVG graphics with libSDL,由 Tux Paint 的开发人员撰写。它应该可以帮助您理解总体思路。

      【讨论】:

      • 感谢您的回答。事实上,这不是一个真正的问题,我正在寻找更多关于大型精灵表替代品的讨论。我不知道 SDL 上的 SVG 图形动画。感谢您的提醒,但是,我团队中的动画师使用 After Effects 创建动画,所以我只能访问图像或视频文件:/
      猜你喜欢
      • 1970-01-01
      • 2019-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-25
      相关资源
      最近更新 更多