из куба сферу

Speed Tree : Terrain & Trees.

из куба сферу

Сообщение Cyrix 05 окт 2018, 11:33

Здравствуйте!
Подскажите пожалуйста, как из куба "выдавить" сферу?
Cyrix
UNIт
 
Сообщения: 116
Зарегистрирован: 16 сен 2009, 11:32

Re: из куба сферу

Сообщение IDoNotExist 05 окт 2018, 11:38

Cyrix писал(а):Здравствуйте!
Подскажите пожалуйста, как из куба "выдавить" сферу?

Погуглить хотя бы 5 секунд. https://catlikecoding.com/unity/tutorials/cube-sphere/
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: из куба сферу

Сообщение Cyrix 05 окт 2018, 11:48

Упс... пропустил, СПАСИБО!!! :)
Cyrix
UNIт
 
Сообщения: 116
Зарегистрирован: 16 сен 2009, 11:32

Re: из куба сферу

Сообщение Cyrix 05 окт 2018, 12:12

Создал в 3д максе кубик, конвертнул в FBX и положил в Unity

приклеил вот этот скрипт:

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class PlanetLOD : MonoBehaviour {
       
        Mesh m;
       
        // Use this for initialization
        void Start () {
                m = GetComponent<MeshFilter>().mesh;
               
                Vector3[] vertices = m.vertices;
                Vector3[] verticesN = m.vertices;
                Vector3[] normals = m.normals;
               
                for (int i = 0; i < vertices.Length; i++) {
                        verticesN[i].x = SphericalX (vertices[i].x, vertices[i].y, vertices[i].z);
                        verticesN[i].y = SphericalY (vertices[i].x, vertices[i].y, vertices[i].z);
                        verticesN[i].z = SphericalZ (vertices[i].x, vertices[i].y, vertices[i].z);
                }
                m.vertices = verticesN;
                m.RecalculateNormals();
               
               
        }
       
       
        float SphericalX (float x, float y, float z) {
                return x * Mathf.Sqrt (1.0F - y*y/2.0F - z*z /2.0F + y*y*z*z/3.0F);
        }
        float SphericalY (float x, float y, float z) {
                return y * Mathf.Sqrt (1.0F - z*z/2.0F - x*x/2.0F + z*z*x*x/3.0F);
        }
        float SphericalZ (float x, float y, float z) {
                return z * Mathf.Sqrt (1.0F - x*x/2.0F - y*y/2.0F + x*x*y*y/3.0F);
        }
}
 


получилась какая-то ерунда
Cyrix
UNIт
 
Сообщения: 116
Зарегистрирован: 16 сен 2009, 11:32

Re: из куба сферу

Сообщение Cyrix 08 окт 2018, 14:56

В примере объект создаётся из ничего. А как мне мой объект, созданный мною куб преобразовать в сферу?
Cyrix
UNIт
 
Сообщения: 116
Зарегистрирован: 16 сен 2009, 11:32

Re: из куба сферу

Сообщение IDoNotExist 08 окт 2018, 15:16

Cyrix писал(а):Создал в 3д максе кубик, конвертнул в FBX и положил в Unity

А почему ты в максе сразу не создашь нужную тебе кубо-сферу?

https://www.youtube.com/watch?v=nXOoSDR3BU8
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: из куба сферу

Сообщение Cyrix 08 окт 2018, 18:25

Можно и так конечно... но всё-таки хотелось бы понять, как это сделать средствами Unity3D
Cyrix
UNIт
 
Сообщения: 116
Зарегистрирован: 16 сен 2009, 11:32

Re: из куба сферу

Сообщение Paul Siberdt 09 окт 2018, 14:58

Cyrix писал(а):получилась какая-то ерунда

Вы бы показали на картинках, что за кубик создали и что за ерунда появилась. А-то домысливать и фантазировать, почему у вас получилась какая-то ерунда, можно бесконечно и непродуктивно. :)
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: из куба сферу

Сообщение Cr0c 09 окт 2018, 15:49

Тут же главное условие, чтобы в кубе вертексов было столько же, сколько в сфере. Так-то задача с примитивной математикой: у сферы все вертексы равноудалены от центра, у куба эти вертексы на одном расстоянии по одной из осей при угле до 45 градусов (по каждому из 6 направлений).
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: из куба сферу

Сообщение Cyrix 10 окт 2018, 00:49

На самом деле задача не из лёгких. Требуется создать маленькую планету с рельефом из карты высот. Я вчитывался, как сделать рельеф из карты высот на ПЛОСКОСТИ. Как я понял, необходимо сначала "изрельефить" все 6 плоских сторон куба, а уже потом "надуть" этот куб изнутри. Сетка куба весьма плотная. Честно говоря уже глаз дёргается. Не могу найти решения! Помогите пожалуйста!
Cyrix
UNIт
 
Сообщения: 116
Зарегистрирован: 16 сен 2009, 11:32

Re: из куба сферу

Сообщение Cr0c 10 окт 2018, 01:55

Cyrix писал(а):На самом деле задача не из лёгких. Требуется создать маленькую планету с рельефом из карты высот. Я вчитывался, как сделать рельеф из карты высот на ПЛОСКОСТИ. Как я понял, необходимо сначала "изрельефить" все 6 плоских сторон куба, а уже потом "надуть" этот куб изнутри. Сетка куба весьма плотная. Честно говоря уже глаз дёргается. Не могу найти решения! Помогите пожалуйста!

Боюсь, это так не сработает. Каким образом рельеф делается у тебя?
https://catlikecoding.com/unity/tutoria ... placement/
Но это для DX11, не для мобилок
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: из куба сферу

Сообщение Paul Siberdt 10 окт 2018, 06:10

Рельефить сферу - очень простая задача. От плоскости отличия лишь в направлении вертекса не вверх, а радиально от центра.

Изображение
Изображение

В качестве template я бы посоветовал не кубосферу юзать, а сфероид и не генерить его в рантайме, а подготовить пачку мешей с разной плотностью в качестве ресурсов.
Вот, "потренируйтесь на кошках" из вложения:
У вас нет доступа для просмотра вложений в этом сообщении.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: из куба сферу

Сообщение Cyrix 10 окт 2018, 12:58

А можно пример скрипта для данного сфероида?
Cyrix
UNIт
 
Сообщения: 116
Зарегистрирован: 16 сен 2009, 11:32

Re: из куба сферу

Сообщение Paul Siberdt 10 окт 2018, 18:24

Синтаксис:
Используется csharp
using UnityEngine;

public class Spheroid : MonoBehaviour
{
    private MeshFilter mf;
    private Mesh m;
    private Vector3[] vertices;

    private float noiseOffset;
    private float worldRadius;
    private float wavelength = 5.0f;

    void AddNoise(float _radius)
    {
        for (var i = 0; i < m.vertexCount; i++)
        {
            var v = GetPerlinVector(m.vertices[i], noiseOffset, wavelength, true).magnitude;
            vertices[i] = m.vertices[i] + _radius * m.normals[i] * v;
        }
        m.vertices = vertices;
    }

    void Start()
    {
        noiseOffset = Random.value * 10000f;

        mf = GetComponent<MeshFilter>();
        m = mf.mesh;
        vertices = m.vertices;
        worldRadius = m.vertices[0].magnitude;

        AddNoise(worldRadius);
        m.RecalculateNormals();
    }

    private Vector3 GetPerlinVector(Vector3 position, float offset, float wavelength, bool center)
    {
        return new Vector3(
            GetPerlin(position.x, position.y, offset, wavelength, center),
            GetPerlin(position.y, position.z, offset, wavelength, center),
            GetPerlin(position.x, position.z, offset, wavelength, center));
    }

    private float GetPerlin(float a, float b, float offset, float wavelength, bool center)
    {
        return Mathf.PerlinNoise(offset + a / wavelength, offset + b / wavelength) - (center ? 0.5f : 0f);
    }

}
 
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: из куба сферу

Сообщение Cr0c 11 окт 2018, 01:54

noiseOffset - это сид (seed, зерно) для генерации псевдорандомного шума
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

След.

Вернуться в Земля и деревья.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2