Доброго времени суток Тостер! Задался вопросом об оптимизации своего проекта и проверки скриптов, тестировалось всё на Пеньке (Pentium CPU B970 2.30 GHz) в разрешении 800x450 (Не лучшее железо для теста) И при проверке заметил интересную штуку gfx.waitforpersent, связанное с Рендерингом... Ещё я не давно сделал скрипт на волны (Поймете дальше зачем я рассказал про этот скрипт), но из-за gfx 45 FPS и просадки до 30 FPS...
Отключил VSync, думал что всё пропадёт... gfx пропал но на смену ему пришёл мой скрипт из-за которого начались те же просадки только я не понял почему он занимает в Обновлении столько процентов если пересчитывание вертикалей равен 2.8%...
Скрин:
Отключил скрипт и опять gfx.waitforpresent, но оптимизация появилась 70 FPS при выключенном VSync и Скрипте...
Скрин;
Скрипт:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using ArchimedsLab;
public class Waves : MonoBehaviour
{
public float waveHeight = 10.0f;
public float speed = 1.0f;
public float waveLength = 1.0f;
public float noiseStrength = 4.0f;
public float noiseWalk = 1.0f;
public float randomHeight = 0.2f;
public float randomSpeed = 5.0f;
public float noiseOffset = 20.0f;
private Vector3[] baseHeight;
private Vector3[] vertices;
private List<float> perVertexRandoms = new List<float>();
private Mesh mesh;
void Awake()
{
mesh = GetComponent<MeshFilter>().mesh;
if (baseHeight == null)
{
baseHeight = mesh.vertices;
}
for (int i = 0; i < baseHeight.Length; i++)
{
perVertexRandoms.Add(Random.value * randomHeight);
}
}
void Update()
{
if (vertices == null)
{
vertices = new Vector3[baseHeight.Length];
}
for (int i = 0; i < vertices.Length; i++)
{
Vector3 vertex = baseHeight[i];
Random.seed = (int)((vertex.x + noiseOffset) * (vertex.x + noiseOffset) + (vertex.y + noiseOffset) * (vertex.y + noiseOffset));
vertex.z += Mathf.Sin(Time.time * speed + baseHeight[i].x * waveLength + baseHeight[i].z * waveLength) * waveHeight;
vertex.z += Mathf.Sin(Mathf.Cos(Random.value * 1.0f) * randomHeight * Mathf.Cos(Time.time * randomSpeed * Mathf.Sin(Random.value * 1.0f)));
vertex.z += Mathf.PerlinNoise(baseHeight[i].x + Mathf.Cos(Time.time * 0.1f) + noiseWalk, baseHeight[i].z + Mathf.Sin(Time.time * 0.1f)) * noiseStrength;
vertices[i] = vertex;
}
mesh.vertices = vertices;
mesh.RecalculateNormals();
}
}
Баг или Фича? Что делать не знаю, впервые с оптимизацией сталкиваюсь)
Заранее Спасибо!