Просмотр исходного кода

Добавление шума к высотам

Andrey Ushakov 1 неделя назад
Родитель
Сommit
ec6f0b928e

+ 5 - 4
SpaceCraft.Unity/Assets/_Project/Materials/Grass.mat

@@ -11,12 +11,13 @@ Material:
   m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
   m_Parent: {fileID: 0}
   m_ModifiedSerializedProperties: 0
-  m_ValidKeywords: []
+  m_ValidKeywords:
+  - _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
   m_InvalidKeywords: []
   m_LightmapFlags: 4
   m_EnableInstancingVariants: 0
   m_DoubleSidedGI: 0
-  m_CustomRenderQueue: -1
+  m_CustomRenderQueue: 2000
   stringTagMap:
     RenderType: Opaque
   disabledShaderPasses:
@@ -106,8 +107,8 @@ Material:
     - _Parallax: 0.005
     - _QueueOffset: 0
     - _ReceiveShadows: 1
-    - _Smoothness: 0.371
-    - _SmoothnessTextureChannel: 0
+    - _Smoothness: 0.171
+    - _SmoothnessTextureChannel: 1
     - _SpecularHighlights: 1
     - _SrcBlend: 1
     - _SrcBlendAlpha: 1

+ 1 - 1
SpaceCraft.Unity/Assets/_Project/Scenes/Game.unity

@@ -276,7 +276,7 @@ MonoBehaviour:
   m_EditorClassIdentifier: Assembly-CSharp::CameraController
   player: {fileID: 1579309476}
   offset: {x: -20, y: 20, z: -20}
-  distance: 20
+  distance: 40
 --- !u!1 &410087039
 GameObject:
   m_ObjectHideFlags: 0

+ 32 - 17
SpaceCraft.Unity/Assets/_Project/Scripts/Game/PlaneGenerator.cs

@@ -1,10 +1,13 @@
 using System.Collections.Generic;
 using UnityEngine;
+using UnityEngine.UIElements;
 
 public class PlaneGenerator : MonoBehaviour
 {
     public Material material;
 
+    public float noiseLevel = 0.1f;
+
     private const int pqsResolution = 16;
     private const int sphereRadius = 10;
 
@@ -134,74 +137,86 @@ public class PlaneGenerator : MonoBehaviour
         mesh.GetComponent<MeshRenderer>().material = material;
     }
 
-    private void RotatePlaneZ(Vector3[] vertices)
+    private void RotatePlaneX(Vector3[] vertices)
     {
         for (int x = 0, vertex = 0; x < pqsResolution + 1; x++)
         {
             for (int z = 0; z < pqsResolution + 1; z++, vertex++)
             {
-                vertices[vertex] = new Vector3(-vertices[vertex].x, vertices[vertex].z, vertices[vertex].y);
-                vertices[vertex] = Vector3.Normalize(vertices[vertex]) * sphereRadius;
+                vertices[vertex] = new Vector3(vertices[vertex].y, vertices[vertex].x, -vertices[vertex].z);
+                var noise = GetNoise(vertices[vertex].y, vertices[vertex].z);
+                vertices[vertex] = noise * sphereRadius * Vector3.Normalize(vertices[vertex]);
             }
         }
     }
 
-    private void RotatePlaneY(Vector3[] vertices)
+    private void RotatePlaneX1(Vector3[] vertices)
     {
         for (int x = 0, vertex = 0; x < pqsResolution + 1; x++)
         {
             for (int z = 0; z < pqsResolution + 1; z++, vertex++)
             {
-                vertices[vertex] = Vector3.Normalize(vertices[vertex]) * sphereRadius;
+                vertices[vertex] = new Vector3(-vertices[vertex].y, -vertices[vertex].x, -vertices[vertex].z);
+                var noise = GetNoise(-vertices[vertex].y, -vertices[vertex].z);
+                vertices[vertex] = noise * sphereRadius * Vector3.Normalize(vertices[vertex]);
             }
         }
     }
 
-    private void RotatePlaneZ1(Vector3[] vertices)
+    private void RotatePlaneY(Vector3[] vertices)
     {
         for (int x = 0, vertex = 0; x < pqsResolution + 1; x++)
         {
             for (int z = 0; z < pqsResolution + 1; z++, vertex++)
             {
-                vertices[vertex] = new Vector3(-vertices[vertex].x, -vertices[vertex].z, -vertices[vertex].y);
-                vertices[vertex] = Vector3.Normalize(vertices[vertex]) * sphereRadius;
+                var noise = GetNoise(vertices[vertex].x, vertices[vertex].z);
+                vertices[vertex] = noise * sphereRadius * Vector3.Normalize(vertices[vertex]);
             }
         }
     }
 
-    private void RotatePlaneX(Vector3[] vertices)
+    private void RotatePlaneY1(Vector3[] vertices)
     {
         for (int x = 0, vertex = 0; x < pqsResolution + 1; x++)
         {
             for (int z = 0; z < pqsResolution + 1; z++, vertex++)
             {
-                vertices[vertex] = new Vector3(vertices[vertex].y, vertices[vertex].x, -vertices[vertex].z);
-                vertices[vertex] = Vector3.Normalize(vertices[vertex]) * sphereRadius;
+                vertices[vertex] = new Vector3(-vertices[vertex].x, -vertices[vertex].y, vertices[vertex].z);
+                var noise = GetNoise(-vertices[vertex].x, -vertices[vertex].z);
+                vertices[vertex] = noise * sphereRadius * Vector3.Normalize(vertices[vertex]);
             }
         }
     }
 
-    private void RotatePlaneY1(Vector3[] vertices)
+
+    private void RotatePlaneZ(Vector3[] vertices)
     {
         for (int x = 0, vertex = 0; x < pqsResolution + 1; x++)
         {
             for (int z = 0; z < pqsResolution + 1; z++, vertex++)
             {
-                vertices[vertex] = new Vector3(-vertices[vertex].x, -vertices[vertex].y, vertices[vertex].z);
-                vertices[vertex] = Vector3.Normalize(vertices[vertex]) * sphereRadius;
+                vertices[vertex] = new Vector3(-vertices[vertex].x, vertices[vertex].z, vertices[vertex].y);
+                var noise = GetNoise(-vertices[vertex].x, vertices[vertex].y);
+                vertices[vertex] = noise * sphereRadius * Vector3.Normalize(vertices[vertex]);
             }
         }
     }
 
-    private void RotatePlaneX1(Vector3[] vertices)
+    private void RotatePlaneZ1(Vector3[] vertices)
     {
         for (int x = 0, vertex = 0; x < pqsResolution + 1; x++)
         {
             for (int z = 0; z < pqsResolution + 1; z++, vertex++)
             {
-                vertices[vertex] = new Vector3(-vertices[vertex].y, -vertices[vertex].x, -vertices[vertex].z);
-                vertices[vertex] = Vector3.Normalize(vertices[vertex]) * sphereRadius;
+                vertices[vertex] = new Vector3(-vertices[vertex].x, -vertices[vertex].z, -vertices[vertex].y);
+                var noise = GetNoise(-vertices[vertex].x, -vertices[vertex].y);
+                vertices[vertex] = noise * sphereRadius * Vector3.Normalize(vertices[vertex]);
             }
         }
     }
+
+    private float GetNoise(float x, float y)
+    {
+        return 1 + Mathf.PerlinNoise(x, y) * noiseLevel;
+    }
 }