Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于体素的游戏的纹理贴图或纹理平铺?(团结)_C#_Unity3d_Mesh_Voxel - Fatal编程技术网

C# 基于体素的游戏的纹理贴图或纹理平铺?(团结)

C# 基于体素的游戏的纹理贴图或纹理平铺?(团结),c#,unity3d,mesh,voxel,C#,Unity3d,Mesh,Voxel,我正在构建一个基于体素的游戏,它在许多方面在视觉上与Minecraft相似,即低分辨率纹理和方块 显然,优化对于这类游戏很重要,原因有很多,但我遇到过两种似乎相互排斥的游戏:纹理贴图和纹理平铺 使用纹理贴图,我将生成所有现有块纹理的单个纹理贴图,我已经读过,这可以极大地提高性能。这种优化的问题是纹理平铺似乎不可能,因为这种技术依赖于纹理文件的第一个和最后一个像素用于相同的纹理,而在使用贴图时,这不再是真的。这也意味着,就我所知,相邻区块的混乱永远无法合并 通过平铺,具有相同纹理的大组块可以组合成

我正在构建一个基于体素的游戏,它在许多方面在视觉上与Minecraft相似,即低分辨率纹理和方块

显然,优化对于这类游戏很重要,原因有很多,但我遇到过两种似乎相互排斥的游戏:纹理贴图和纹理平铺

使用纹理贴图,我将生成所有现有块纹理的单个纹理贴图,我已经读过,这可以极大地提高性能。这种优化的问题是纹理平铺似乎不可能,因为这种技术依赖于纹理文件的第一个和最后一个像素用于相同的纹理,而在使用贴图时,这不再是真的。这也意味着,就我所知,相邻区块的混乱永远无法合并

通过平铺,具有相同纹理的大组块可以组合成一个单一的2-3网格。虽然有效,但每个纹理都需要自己的材质对象,这意味着每个不同的块纹理都需要自己的子网格


以下哪一项更有可能提供优异的整体性能?

它们似乎相互排斥,但并非真的如此。
Minecraft不会重复纹理,它会重复UV

工作原理:
对于共享纹理的所有矩形,请确保它们的UV位于同一位置。
例如,所有草矩形的UV都应位于图集中草纹理的顶部。
要使它看起来好看,您需要。
此外,为了防止边缘出血,您需要确保所有纹理之间都有一些纹理

示例:
我制作了一个快速搅拌机项目来展示它。
侧面的矩形都在相同的纹理区域有UV,而顶部的矩形在不同的纹理区域有UV。
“重复”是通过使用图集中的无缝纹理完成的。
在这种情况下。没有添加填充,因为像素化纹理不需要填充


纹理取自Minecraft。

组合网格听起来不错,但很难实现。组合纹理将是一件很好的事情。使用硬件实例绘制多个网格。在实例数据中包含textureindex以寻址正确的纹理(通过除以平铺计数重新寻址UV)。您甚至可以尝试使用几何体着色器生成立方体。点过滤和无MIP应该不需要填充。如果这是可以接受的,这取决于你的游戏,没有mips的高分辨率纹理在远处看起来可能非常糟糕。但是OP没有说明他是如何过滤的,只是它的分辨率很低,有点像minecraft。我认为@QuaternionsRock的意思是,他正在通过合并多个立方体来合并它们,这会造成平铺纹理无法重复的问题。为什么?只要UV不变,纹理就会根据定义重复。纹理重复和钳制仅在UV位于纹理空间之外时生效。