1

我一直陪伴着许多人发布的问题以及你们给出的所有答案,遵循了几个教程,并且由于我的谷歌搜索上的所有链接都被标记为“已经访问过”,我决定放下我的骄傲并发布一个问题为你。

这是我的第一篇文章,所以我不知道我这样做是否正确,如果没有,抱歉,无论如何问题是这样的:

我正在 Unity 5 上的 C# 行星探索游戏中工作,我已经按照此处提到的一些教程从八边形中构建了一个球体,并且也可以使用它们构建 perlin 纹理和高度图,问题出现在应用上它们到球体并在网格上生成地形,我知道我必须映射球体的顶点和 UV 才能做到这一点,但问题是我真的很擅长数学,我找不到任何步骤接下来,我听说过 Tessellation 着色器、LOD、voronoi 噪声、perlin 噪声,并且在这个过程中迷失了方向。简化:

我有的:

  1. 我有球形网格

  2. 我有高度图

  3. 我已将它们与正确的法线贴图一起分配给材质

我认为我是什么;(老实说,我不知道这是否是正确的道路)需要帮助:

  1. 基于高度图生成球形网格变形的代码

  2. 如何使用那些基于 Tessellation LOD 的着色器等来制作一个真实大小的程序星球

非常感谢您的关注,如果我的粗鲁或要求太多,我们深表歉意,但是您可以提供的任何帮助都会对我有很大的帮助。

4

1 回答 1

1

我真的不认为我有能力为您提供代码特定信息,但这里有一些针对您的清单的补充/建议。

  • 如果您想设置 LOD 网格和纹理系统,我知道的唯一方法是准系统方法,您可以在其中物理创建网格和纹理的低多边形版本,然后在 Unity 中编写一个脚本,其中有一个距离数组,一旦玩家到达某个距离或接近对象,切换到适合该距离的网格和纹理。我认为您可以通过编写一个可以做同样事情的着色器来做同样的事情,但基本思想保持不变。下面以一些伪代码为例(我不太了解 Unity 库):

    int distances[] = {10,100,1000}
    Mesh mesh[] = {hi_res_mesh, mid_res_mesh, low_res_mesh}
    Texture texture[] = {hi_res_texture, mid_res_texture, low_res_texture}
    
    void Update()
    {
         if(player.distance < distances[0])
         {
             gameobject.Mesh = mesh[0]
             gameobject.Texture = texture[0]
         else
         {
             for(int i = 1; i < distances.length(); i++)
             {
                 if (player.distance <= distances[i] && player.distance >= distances[i-1]):
                 {
                     gameobject.Texture = texture[i]
                     gameobject.Mesh = mesh[i]
                 }
             }
         }
     }
    

如果您想要更难编码的真正基于 Tesselation 的 LOD 内容:这里有一些链接:

https://developer.nvidia.com/content/opengl-sdk-simple-tessellation-shader

http://docs.unity3d.com/Manual/SL-SurfaceShaderTessellation.html

基本上相同的概念适用。但是,不是物理地更改您正在使用的网格和纹理,而是使用与设置距离相同的想法在程序上更改网格和纹理,您可以在着色器代码中更改网格和纹理的分辨率。

  • 至于您的球形网格变形问题。您可以在 3dsMax、Maya 或 Blender 等 3d 编辑软件中执行此操作,方法是导入网格并应用网格变形修改器,并将纹理用作变形纹理,然后根据自己的喜好更改变形级别。但是如果你想实时做一些更程序化的事情,你将不得不使用顶点数组物理改变网格的顶点,然后重新三角化你的网格或类似的东西。对不起,我对这个话题不太有帮助,因为我对此知之甚少。以下是我可以找到与您的问题相关的链接:

http://answers.unity3d.com/questions/274269/mesh-deformation.html

http://forum.unity3d.com/threads/deform-ground-mesh-terrain-with-dynamically-modified-displacement-map.284612/

http://blog.almostlogical.com/2010/06/10/real-time-terrain-deformation-in-unity3d/

无论如何,祝你好运,如果我不清楚某些事情或者你需要更多解释,请告诉我。

于 2015-03-09T02:59:55.830 回答