2D行星纹理的3D幻觉


10

几年前,我无意间听到了一种使用2D纹理为用户提供旋转行星幻觉的技术。鉴于用户无法更改其位置或视口。

这种技术叫什么名字?

Answers:


25

好吧,我想我现在有代表。以前嵌入了图像的帖子的内容。这是您正在寻找的旋转行星效应吗?它只是通过星场中的半透明“孔”查看的滚动2D图像。

我整理了一下动画效果的快速动画gif。显然,它的动画效果可以更加平滑-我每帧将行星表面移动了4个像素。还没有设置包装图像,因此循环结束时会出现故障。

星球http://www.perludus.com/orbit.gif

我确实在Photoshop中完成了所有操作,但是该概念应该在2D渲染环境中起作用,使您可以执行Alpha透明胶片等。以下是显示该过程的一系列屏幕截图...

  1. 创建一个空白的星形背景,并在其中切一个圆孔。
    替代文字
  2. 找到适合您星球的灰度阴影球体
    替代文字
  3. 这是我们的星星,上面有孔和阴影球,半透明
    替代文字
  4. 制作一个与孔大小相同的蓝色圆圈,并为其发出外部蓝色光芒。并将其设置为半透明。这是阴影球的外观
    替代文字
  5. 现在找到行星表面纹理。我发现这个只是谷歌搜索的“行星表面纹理”
    替代文字
  6. 将行星纹理放在带有半透明孔的星空图片下,以获得这种外观
    替代文字

要为行星表面设置动画,只需移动下面的行星表面纹理即可。您必须聪明地在纹理到达边缘时移动纹理,以获得无缝,无尽的旋转。

希望这会有所帮助,并且是您想要的效果!

PS看到了有关艺术家的文章,作者以一种非常新颖的方式来制作行星纹理-让我想到了这个答案:) http://www.behance.net/gallery/Pan-Planets/9557465


np Henrik。不过,一看到您的帖子,我就说:“我敢打赌,我知道这个人的意思。” 我不确定100%,但是我认为这是原始《星际迷航》电视节目中旋转行星效果的实现方式。
Tim Holt 2010年

这是一个很好的答案,让我对自己的游戏项目有了一个想法。下次我装载《星际争霸2》生病时,必须看看这是怎么做的=)
Bryan Harrington 2010年

很棒的答案,很棒的截图!
错误454

您的图片消失了。您认为可以解决此问题吗?
神话

3

我会猜测你的意思,然后在这里提出一个想法,但是肯定不会成为“著名的”方法。

全二维

取2个纹理。一个是你的地块,另一个是你的云。云应该具有匹配的Alpha层,以便您可以“直视它们”。

使纹理平铺,即它们无缝包裹。有一些程序可以帮助您在Photoshop中制作这些内容或教程,您可以按照这些程序进行操作。

然后,最后制作一个只是圆形的模版遮罩,因此实际上是通过在正方形纹理上看一个圆孔,从而遮盖了角落。

现在,您可以对土地和云纹理的纹理矩阵进行动画处理,以使其移动。使它们以不同的方向和速度移动,并且它似乎正在旋转。这完全取决于您制作纹理的无缝程度。


2

我认为本文介绍了该技术。(它是俄语的,所以我发布了翻译链接。)

https://translate.googleusercontent.com/translate_c?depth=1&hl=zh-CN&rurl=translate.google.com&sl=auto&sp=nmt4&tl=en&u=https://habrahabr.ru/post/248381/&usg=ALkJrhgViuYdAi-Vav3cyhxvydkaBKh6EQ

我已经在这里实现了。http://github.com/meric/renderplanet

基本上,您需要拍摄对正交投影进行编码的图像(http://mathworld.wolfram.com/OrthographicProjection.html),然后使用着色器将行星和云的纹理包裹起来。根据dt偏移行星纹理以使其旋转。将准备好的半透明图像用于大气环和阴影,或者通过绘制半透明弧并针对阴影使用着色器进行一些实验来生成它。

这是图片:

正字法

对于圆内的每个像素,Red + Green/255要查找的行星/云纹理的归一化X坐标和Blue + Alpha/255归一化Y坐标。

结果如下:

样品

行星和云的纹理应为等矩形投影。


1

您对所使用的上下文的限制尚不明确。3D渲染中的绝大多数纹理都是2D。因此,如果您只是显示一个3D球体,并在其周围映射了2D表面纹理,那么这实际上不是问题。如果您无法使用3D渲染,则必须确切说明可以使用的内容。

基本问题是必须在球体表面上渲染平坦的纹理,而3D渲染可免费获得该纹理。随着行星旋转,行星表面的可见部分以非线性方式进行动画处理(纹理的赤道部分移动的速度快于极点)。因此,我认为您要么在将映像映射到光盘上时就必须自己使映像变形,要么按照VirtualVoid的建议进行操作,并且只是拥有多个随时间变化的映像。

实施起来很可怕,但是如果您能够逐像素渲染纹理,则基本上可以对球体的每一行进行栅格化计算。假设您的表面贴图纹理被展平,因此在赤道处有512px的图像。我们还假设您的可见光盘宽度为256像素。现在,将渲染光盘的每一行视为表面纹理上的滑动窗口。在赤道上,窗口是纹理宽度的50%,您只需将256px的每个像素复制到光盘的等效像素上即可。光盘上的下一行将略小于256 px,但是由于曲面图失真,因此仍然有256 px的输入曲面图数据。因此,您然后对输入的表面贴图数据进行二次采样,并渲染出结果像素。为了简化数学,让我们 s假设输出光盘中赤道与极点之间的距离的1/3为128px宽。因此,这128像素中的每一个将是2个相邻像素的平均值。当您走到极点时,您将平均所有256像素平均为几个输出像素。

您也可以采用另一种方法,使源纹理中的线具有不同的长度。因此,尽管包含源数据的行中有512px,但向下的1/3行中只有256px,而底部的行只有几个像素。但是每行在等效y坐标处是光盘宽度的两倍。但是,那种纹理绝对是非常可怕的。并且可能会遭受可怕的别名问题。

在这两种情况下,您的动画都只是简单地增加输入纹理中的起始像素x,然后环绕到输入纹理线的起点。

我现在写的越多,我就越相信这是一个可怕的主意,只有在您确实没有其他选择的情况下,您才会实施。而且您将不得不处于非常不寻常的情况下,别无选择。

我不相信我曾听说过任何解决此(相当模糊)问题的方法,可以将其作为一种特定的命名技术。


0

精灵。听起来您正在描述的是3D游戏引擎中的2D精灵,可以廉价地渲染(Nintendo64像很多早期的3d引擎一样,在整个地方都可以做到这一点)。

如果要渲染行星旋转,则只需要显示一个2D精灵即可,该2D精灵是基于预先渲染的行星旋转的精灵表进行动画处理的。就像动画.GIF一样。问题是它会被预先渲染,因此,正如您所说,这仅在不允许用户操纵视角的情况下才有效。

http://en.wikipedia.org/wiki/Sprite_(computer_graphics


0

那可能只是一个简单的动画,使用一个带有多个帧的纹理。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.