太空引擎吧 关注:215贴子:371

Space Engine创建天体教程8:Space Engine自定义行星纹理(CubeMap

只看楼主收藏回复

IP属地:甘肃1楼2019-01-13 12:57回复
    宇宙模拟器Space Engine创建天体(星球,星系,星云,星团等)和天体系统教程8: Space Engine自定义行星纹理(CubeMap软件)详解
    本篇教程主要来自space engine官方手册的翻译和一些参考资料,在教程结尾我会附上相关的教程和资料链接
    导航:
    1.CubeMap介绍
    2.CubeMap安装后的目录文件
    3.CubeMap的配置文件和命令行
    4.Space Engine中使用的行星纹理的格式
    5.CubeMap使用教程
    6.Glue使用教程
    7.一般建议
    8.CubeMap实例教程链接


    IP属地:甘肃2楼2019-01-13 13:11
    回复
      把链接复制到浏览器地址栏上,按回车键就可以看了
      关于宇宙模拟器Space Engine的天体(星球,星系,星云,星团等)脚本参数,如何创建天体(星球,星系,星云,星团等)的脚本,请看这些教程
      space engine打包创建好的SE脚本成pak文件(MOD),分享和使用pak文件(MOD)的方法
      https://weibo.com/ttarticle/p/show?id=2309404323664098104088
      space engine文件夹和pak(MOD)文件,脚本组成和脚本创建详解
      https://weibo.com/ttarticle/p/show?id=2309404325406277828246&mod=zwenzhang
      space engine 质心,恒星参数详解
      https://weibo.com/ttarticle/p/show?id=2309404325407154386790&mod=zwenzhang
      space engine 行星主要参数详解
      https://weibo.com/ttarticle/p/show?id=2309404325410862182101&mod=zwenzhang
      space engine 行星的地表,海洋,云,熔岩,极光参数详解
      https://weibo.com/ttarticle/p/show?id=2309404325411734579032&mod=zwenzhang
      space engine 生命,吸积盘,彗尾,行星环,日冕,大气参数详解
      https://weibo.com/ttarticle/p/show?id=2309404325414733531245&mod=zwenzhang
      space engine星系,星团,星云


      IP属地:甘肃3楼2019-01-13 13:14
      回复(1)
        该楼层疑似违规已被系统折叠 查看此楼


        IP属地:甘肃4楼2019-01-13 13:20
        回复
          4.space engine中使用的行星纹理的格式
          InputFile参数指定源圆柱纹理的路径。
          OutFolder指定立方体贴图纹理的输出文件夹的路径, 如果路径包含空格,则必须用引号括起来:“带空格的路径”。
          TempFolder参数指定临时文件夹的路径。
          该应用程序用于存储临时文件,如果未指定,则临时文件将存储在OutFolder中。
          如果该文件夹不存在,则自动创建名为neg_x,neg_y,neg_z,pos_x,pos_y,pos_z的子文件夹。

          源圆柱纹理应采用原始格式(raw格式文件),原始格式是一个简单的二维像素数组,其大小和容量(位深度)由配置文件中的以下参数描述:
          InputWidth 源图像的宽度
          InputHeight 源图像的高度
          InputChannels 通道数(灰度,1,RGB ,3,RGBA ,4等)
          Input16bit 容量(位深度):每通道16或8位
          InputByteSwap 仅适用于16位:对于小端序(little-endian)为true,对于大端序(big-endian)为false
          InputUnsigned 仅适用于16位:对于无符号(unsigned)为true,对于有符号(signed)值为false
          InputLatOffset 经度偏移,单位是度
          立方体纹理是一组文件夹和文件,其结构如下:
          cubemap 在OutFolder参数中指定的文件夹
          neg_x neg_x面的文件夹
          0_0_0.jpg — 0级1块
          1_0_0.jpg –\
          1_0_1.jpg –+ + - 1级的4个图块
          1_1_0.jpg –|
          1_1_1.jpg –/
          2_0_0.jpg –\
          2_0_1.jpg –|
          2_0_2.jpg –|
          2_0_3.jpg - + - 2级的16个图块
          2_1_0.jpg –|
          2_1_1.jpg –|
          2_1_2.jpg –|
          2_1_3.jpg –|
          ………
          neg_y neg_y 面的文件夹
          neg_z neg_z 面的文件夹
          pos_x pos_x 面的文件夹
          pos_y pos_y 面的文件夹
          pos_z pos_z 面的文件夹
          立方体贴图的纹理由六个面组成,它们的名称是按照坐标系的半轴命名的,它们是交叉的。让原点成为行星的中心。然后Y轴穿过行星的两极:北极在正Y面,南极在负Y面。X轴从左到右通过,即左面为负X,右面为正X,Z轴向观察者方向通过,即远面为负Z,近面为正Z,在原始的圆柱纹理中,这对应于:上边界为北极,下边界为南极,左、右交界处右边界垂直穿过neg_x面,中心子午线垂直穿过pos_x面,圆柱形纹理的中心位于pos_x面的中心。
          标准扫描Cubemap纹理:

          一些行星地图并非以零子午线为中心。例如,它可能会运行到纹理的左边界上。在这种情况下,可以将经度偏移设置为180°,把生成的立方纹理“旋转”到正确的位置:inputlatoffset 180
          立方体平面的分辨率计算为原始纹理宽度的四分之一,四舍五入到最接近的2次方。例如,如果原始纹理分辨率为86400 x 43200,则会给出每个面的分辨率为32768 x 32768(131072/4)
          每个面结构为一组图块,图块的分辨率由TileWidth参数确定,并且不得超过表面的分辨率。例如,如果TileWidth=512,并且面分辨率为32768,那么我们将有7个级别的图块:log2(32768/512)+1=7。级别的编号从0到6;级别的编号是图块文件名中的第一个数字(0_0_0.jpg,…,6_63_63.jpg)。每个级别的总分辨率按顺序翻倍,而平铺文件的数量则是原来的四倍。因此,我们将有一个0级(0_0_0.jpg)的磁贴,分辨率为512 x 512。它将具有整个面的缩小图像。将有4个1级图块(1_0_0.jpg…1_1_1.jpg),每个图块包含整个面的图像的四分之一。每个图块的分辨率再次为512 x 512,因此一级的普通分辨率为1024 x 1024。2层将有16块图块,以此类推。最后一个(最详细的)级别(6)将有64*64=4096个图块(每个512 x 512),总分辨率为32768 x 32768。图块文件名中的第二个和第三个数字是垂直(V)和水平(U)索引,从左到右和从上到下进行索引,以下是前三个级别的示例图片(分块分辨率为128 x 128)
          level 0

          level 1

          level 2

          space engine官方手册配图


          IP属地:甘肃5楼2019-01-13 13:48
          回复
            5.CubeMap使用教程
            将源圆柱纹理转换为平铺立方体纹理分几个阶段执行,只能对某些面执行转换,这由配置文件中的以下参数控制(将参数设置为false或0将禁用相应面的所有阶段):
            Create_NEG_X true
            Create_POS_X true
            Create_NEG_Y false
            Create_POS_Y false
            Create_NEG_Z true
            Create_POS_Z true
            通过将配置中的参数设置为true是执行该操作,设置false或0,是禁用执行(请参见下文):
            CreateBaseTex true 创建基础纹理
            ComputeFaces true 处理选定的面(计算最新级别的临时原始文件)
            DownsizeFaces true 计算所选面的LOD(将其他级别的临时原始文件计算回0)
            UpdateEdges true 更新面边缘
            TileFaces true 将选定面的临时原始文件拆分为图块
            OptimizeTiles false 优化图块错误,删除同质图块
            (1)创建圆柱形基础纹理
            要执行此操作,配置文件必须具有CreateBaseTex true
            Space Engine使用特殊的小圆柱纹理(称为“基础纹理”)来渲染远离相机的行星。创建此纹理是通过对源圆柱纹理进行简单的采样来实现的,方法是将像素平均为方形块。参数BaseTexDownSize指定减少源纹理的次数,参数BaseTexFormat指定生成的基础纹理的格式。
            例如,将10800 x 5400的纹理减少四次,得到2700 x 1350的纹理。对于Space Engine,最好使用分辨率为512 x 256的基本纹理。但是CubeMap只支持BaseTexDownSize缩小大小的整数,因此并非所有源纹理都可以转换为512 x 256基纹理。
            例如,10800/512=21.09375,因此BaseTexDownSize缩小的近似值为21,得出10800/21=514。因此,有必要使用第三方程序(如Photoshop)再次缩小最终的基础纹理。为了节省精度,必须制作分辨率为~1000×500的基本纹理,然后在第三方程序中将其缩小到512×256。
            (2)计算CubeMap纹理的面
            要执行此操作,配置文件必须具有ComputeFaces true
            通过双线性滤波执行转换:为了导出面中当前像素的颜色,计算圆柱形纹理中对应点的浮点坐标,并通过最接近的四个像素的线性插值获得颜色。这种方法产生了非常好的结果,这些伪影可能只在极点处可见。设置DoublePrecision true会稍微修改算法,结果颜色是通过对如上所述获得的四个值进行平均而获得的,但是使用了一个双细节的网格。
            程序在RAM中使用一个特殊的缓存来存储原始的圆柱形纹理。因此,可以转换非常大的源纹理,而无需将其完全加载到内存中。例如,NASA的地球纹理,即下一代 Blue Marble,其未包装尺寸(原始格式)为86400 x 43200 x 3=10.4 GB。缓存大小由参数MaxMem(大小以MB为单位)设置。在当前版本(1.06)中,设置较大的值(大于512 MB)可以降低处理速度,因为这样可以减少缓存中的长搜索。最佳值在64-512MB范围内,并在较小程度上取决于源纹理的大小。
            有两种类型的缓存 - Line和Quad。通过MethodSide参数为立方体贴图的侧面(neg_x,neg_z,pos_x,pos_z)和极坐标面的MethodPolar(neg_y,pos_y)执行选择类型。允许的值为Line和Quad(不带引号)。Line方法通过小行块读取源文件,而Quad方法读取小方块。Quad方法应该对极面更有效,但在当前版本(1.06)中没有显著差异。
            在TempFolder参数指定的临时文件夹中创建一个名为raw的临时子文件夹。在raw文件夹中,创建子文件夹neg_x,neg_y,neg_z,pos_x,pos_y,pos_z,保存相应立方体贴图面(cubemap)的原始文件。每个face的原始文件将具有level6.raw的名称(因为我们将有7个级别,从0开始),分辨率为32768 X 32768
            如果TileBorder参数为非零,则会在每个图块的边界上添加其他像素,这些像素是相邻图块的边界像素的副本。此附加边框的宽度由此参数定义,因此,如果配置文件具有TileWidth 512和TileBorder 1,我们将获得分辨率为514 x 514的分片。临时文件级#.raw的分辨率将增加2 TileBorder * cubeFaceWidth / TileWidth,其中cubeFaceWidth是级别.raw文件的原始分辨率。在我们的示例中,级别6的分辨率为32768+128=32896。这些额外的像素可以在Space Engine中渲染行星时消除景观中的间隙或图块接缝处的锐边。对于地形高程地图,重要的是将图块保存为无损格式,如16位PNG。在以前版本的CubeMap中,使用布尔参数AddExtraData而不是TileBorder(AddExtraData true等于TileBorder 1)。
            Normalize true 输出图像(高度图)
            EnterNormData true 手动输入标准化数据,false则自动查找
            NormMinValue -10577 最小像素值
            NormMaxValue 8430 最大像素值
            (3)计算面层次
            要执行此操作,配置文件必须具有DownsizeFaces true
            对临时原始文件执行两次相应的缩小比例操作,从而在临时文件夹中创建文件(在我们的示例中)level5.raw、level4.raw、level3.raw、level2.raw、level1.raw、level0.raw,分辨率分别为16384 x 16384到512 x 512。
            如果TileBorder不为零,则新临时文件级别#.raw的分辨率将增加2 * TileBorder * cubeFaceWidth / TileWidth,其中
            cubeFaceWidth是级别#.raw文件的原始分辨率。


            IP属地:甘肃6楼2019-01-13 14:00
            回复
              (4)更新面边界
              要执行此操作,配置文件必须具有UpdateEdges true且TileBorder必须设置为非零
              如果启用了添加附加帧像素(TileBorder非零),为了获得位于面边界的正确像素值,Cubemap需要从相邻面获取像素。因此,必须计算所有面,必须对所有面执行ComputeFaces和DownsizeFaces操作。否则程序将崩溃。
              (5)将临时原始文件分成平铺
              要执行此操作,配置文件必须具有TileFaces true
              临时文件被拆分为分辨率为TileWidth(或TileWidth + 2 * TileBorder,如果TileBorder非零)的图块,并以下列格式之一保存到以face命名的文件夹中:
              raw 8或16位,任意数量的通道,无压缩
              tga 8位,1,3,4通道,无压缩
              dds 8位,1,3,4通道,无压缩
              jpg 8位,1,3,通道,有损压缩
              tif 8或16位,1,3,4通道,有损压缩
              png 8或16位,1,3,4通道,无损压缩
              tile格式由以下参数描述:
              OutFormat tile格式(raw,tga,dds,jpg,png)
              OutFormat2 低字节或alpha通道的tile格式(raw,tga,dds,jpg,png)(参见SeparateHiLo和SeparateRGBA)
              TileWidth 图块分辨率
              TileBorder 带有附加像素的边框宽度
              Out16bit 容量(位深度):每通道16或8位(仅允许16和raw和png)
              OutByteSwap 仅限16位:对于小端(MAC)为true,对于big-endian为false
              OutUnsigned 仅限16位:无符号时为true,有符号值为false
              OutInvertAlpha 反转RGBA图像的alpha通道
              OutJPEGquality 保存为JPEG(0 ... 100)的质量
              SeparateRGBA 将RGBA图块保存为两个单独的文件:RGB和alpha
              SeparateHiLo 将16位图块保存为两个单独的文件:高字节和低字节
              有必要详述参数OutFormat2,SeparateRGBA和SeparateHiLo
              Space Engine支持以两个单独的纹理文件的形式存储行星表面的rgb a纹理的特殊方法,一个用于RGB组件的颜色文件和一个用于alpha通道的黑白文件。这可以用来节省磁盘空间。例如,地球表面需要RGB通道中指定颜色的RGBA纹理,以及Alpha通道中指定的水的遮罩。支持4个通道(rgba)的压缩纹理格式只有png和tif。但是,这些格式的文件非常大,而里面的颜色信息可以以JPG格式压缩,质量足够好,并且把水面遮罩很好地压缩在无损PNG格式中。这种由两个纹理组成的组合集JPG+PNG比单个4通道PNG占用的空间要小得多。要使用此方法,请将SeparateRGBA设置为true,并指定OutFormat的rgb纹理和OutFormat2的alpha纹理的格式:
              OutFormat jpg
              OutFormat2 png
              SeparateRGBA true
              使用此配置,CubeMap将为每个图块保存两个文件:带有后缀_c的RGB文件和带有后缀_a的alpha文件,例如:
              3_2_16_c.jpg
              3_2_16_a.png
              对于16位高程图,它还可用于将16位图块图像分成两个文件:低字节和高字节,有时将它们单独保存到8位文件中,与保存在单个16位图像(PNG或TIF)中相比,在大小上具有优势。因此,请将SeparateHiLo设置为true,并指定OutFormat的高字节纹理和OutFormat2的低字节纹理的格式:
              OutFormat png
              OutFormat2 jpg
              SeparateHiLo true
              使用此配置,CubeMap将为每个图块保存两个文件:带有后缀_h的高字节文件和带后缀_l的低字节文件,例如:
              3_2_16_h.png
              3_2_16_l.jpg
              注意:高字节文件必须以无损格式保存,如png。否则,地形会有很大的伪影!低字节文件可以以有损压缩的格式保存,例如JPG,但它也会导致伪影。只有png+png的组合不会产生伪影,有时会影响更好的文件大小,在这种情况下,建议使用这种方法。
              Space Engine自动检测并加载双文件纹理,无需对行星脚本进行额外调整。如果图块文件已存在于文件夹中,则会覆盖它们。


              IP属地:甘肃7楼2019-01-13 14:07
              回复
                (6)优化图块
                要执行此操作,配置文件必须具有optimiztiles true
                Space Engine支持在任何位置使用任何细节级别的平铺立方体贴图纹理。这意味着可以拥有分辨率为6 x 32768 x 32768(从Blue Marble Next Generation获得)的地球纹理,并且在某些地方(如大峡谷),可以通过添加具有更高级别的其他图块来改进级别细节。反之亦然,没有细节的大型均匀区域(海洋)只能有较低级别的分片(从0到2),其余的分片被移除,这样可以节省磁盘空间并缩短加载时间。Cubemap可以尝试识别这些均匀区域并将其移除。因此,建议仅对具有较大均匀区域(如海洋)的纹理使用此优化,不建议对其他纹理使用此优化。通过计算图块上像素颜色的变化(像素颜色与图块平均颜色之间差异的绝对值的加权和)来检测均匀性。如果此变化小于配置文件中参数MinVar指定的值,则认为平铺是同类的,并将其移动到临时位置。名字为optimized的子文件夹在TempFolder参数指定的临时文件夹中创建。在这个文件夹中创建了名为neg_x,neg_y,neg_z,pos_x,pos_y,pos_z的子文件夹,任何检测到的均匀图块都会移动到这些子文件夹中,它们是移除的候选。
                在没有优化生成tile(OptimizeTiles false)之后,从某个值MinVar开始并使用OptimizeTiles运行CubeMap,而其他阶段被禁用(参数CreateBaseTex to TileBaces设置为false)。最好只对一个面做,通过参数Create_NEG_X ... Create_POS_Z选择它。接下来,查看哪些图块已移动到临时文件夹。如果对结果不满意,将图块向后移动(手动),调整MinVar值,然后重复,直到获得可接受的结果,然后使用找到的MinVar的最佳值对其他面进行优化。
                当前版本(1.06)没有使用好的算法,因此可能存在错误,例如,具有小岛和周围均匀海洋的图块可以被视为均匀图块,而具有轻微颜色渐变的图块可以被视为不均匀图块。因此,建议查看临时文件夹中的所有图块,并将那些似乎不适合删除的图块移回原来的位置。还建议将这些删除的图块保存在某个位置,这样就可以快速恢复错误删除的图块,而无需再次启动cubemap的完整转换过程(尤其是在源圆柱纹理较大的情况下)。
                双文件图块(SeparateRGBA或SeparateHiLo)不支持优化。


                IP属地:甘肃8楼2019-01-13 14:16
                回复
                  6.Glue使用教程
                  InputFolder 具有图块的文件夹的路径
                  OutFile 输出原始文件的路径
                  TilePrefix 字符串,图块文件名中的前缀(级别编号)
                  TileExt 字符串,tile的文件扩展名
                  StartU 初始U索引
                  StartV 初始V指数
                  SwapUV 交换U和V指数
                  TileWidth 图块宽度
                  TileHeight 图块高度
                  OutWidth 输出原始图像宽度
                  OutHeight 输出原始图像高度
                  ChannelsPerPixel 通道数(灰度 - 1,RGB - 3,RGBA - 4等)
                  BytesPerChannel 每个通道的字节数:1表示8位,2表示16位,等等)
                  ConvertToGrayscale 转换为灰度(仅限8位)
                  MaxMem 以MB为单位的内存高速缓存大小
                  tile文件名的格式为:TilePrefix_v_u.TileExt;
                  例如,对于此配置文件:
                  TilePrefix 5
                  TileExt png
                  StartU 2
                  StartV 3
                  SwapUV false
                  第一个图块的名称为5_3_2.png;将通过增加索引u和v来获得下一个图块的名称,直到达到配置文件中指定的输出纹理的分辨率。使用*的扩展名表示程序应按以下顺序查找任何支持格式的图块:dds,png,jpg,jpeg,tif,tiff,tga,raw。例如,如果文件夹包含两个文件3_1_2.jpg和3_1_2.tga,则将加载第一个文件。
                  如果扩展名与上面的某个不匹配,工具将切换到原始模式:输入块被认为具有原始格式,即没有标题的简单未压缩像素数组。扩展名可以是.raw、.img或任何其他扩展名,不需要将瓷砖重命名为.raw。在原始模式下,通道数(ChannelsPerPixel)和容量(BytesPerChannel)不受限制。它可以用于粘合任意数据数组(不一定是纹理),就像它们是矩形块一样,图块不一定必须是方形的 ,因此提供了单独的参数TileWidth和TileHeight。参数converttograyscale通过对通道值进行简单的平均,将多通道图块(rgb、rgb a等)转换为灰度原始纹理,仅允许8位图块。


                  IP属地:甘肃9楼2019-01-13 14:42
                  回复
                    7.一般建议
                    (1)将源纹理、临时文件夹和输出文件夹放在不同的物理驱动器上,可以显著提高性能。如果对源文件和临时原始文件进行碎片整理,性能也会提高。
                    (2)在其名称中写入有关源原始纹理格式(raw格式文件)的信息,例如,Earth-surface-32k-RGBA.raw是一个RGBA纹理32768 x 16384; Mars-bump-16k-16bit.raw是16384 x 8192的16位高程图。这有助于避免混淆。
                    (3)可以在Photoshop,IrfanView和其他程序中将任何格式的纹理转换为原始格式(raw格式文件),使用它们还可以查看临时原始文件(如果有足够的RAM,以便这些程序能够加载大型原始文件)
                    (4)保存每个转换后的纹理的配置文件,以后可以使用。将.ccf文件扩展名与程序CubeMap.exe相关联,将.gcf与操作系统中的Glue.exe相关联,然后双击配置文件将自动启动相应的实用程序,还可以将配置文件拖放到CubeMap或Glue的快捷方式上。
                    (5)CubeMap可以通过Ctrl + C组合中断,并在下次启动时从同一点继续工作。例如,如果不知道16位高程图的格式,即应在参数InputByteSwap和InputUnsigned中指定哪些值,则首先可以转换一个面并查看结果(图块)。但是如果纹理非常大,这样的测试需要很长时间。因此,可以在ComputeFaces阶段中断转换,并在Photoshop或其他程序中查看临时文件的完成部分,或者将ComputeFaces设置
                    为false并再次运行CubeMap,等待生成某些图块。
                    (6)建议查看极面pos_y和neg_y的转换结果,如果存在明显的伪像,请尝试设置DoublePrecision为true,或者在Photoshop或其他程序中编辑极面的原始文件。要执行此操作,请仅运行极坐标面的ComputeFaces,编辑原始文件,禁用ComputeFaces并执行其余操作。
                    (7)为了避免精度损失,不建议对高度图进行标准化,其动态范围为“几乎实现”:例如(1 ... 252)为8位,( - 32000 ... 32000)为16位。
                    (8)如果要将图块保存为Cubemap不支持的格式,必须执行转换为无损格式(如tga),然后使用第三方软件将所有图块批量转换为所需格式,例如IrfanView或ImageMagic。


                    IP属地:甘肃10楼2019-01-13 15:01
                    回复
                      IP属地:甘肃11楼2019-01-13 15:15
                      回复
                        该楼层疑似违规已被系统折叠 查看此楼


                        IP属地:甘肃12楼2019-01-13 15:17
                        回复
                          该楼层疑似违规已被系统折叠 查看此楼


                          IP属地:甘肃13楼2019-01-13 15:24
                          回复
                            该楼层疑似违规已被系统折叠 查看此楼


                            IP属地:甘肃14楼2019-01-13 15:39
                            回复
                              @雨后彩虹2


                              IP属地:甘肃15楼2019-01-13 21:03
                              回复