модель из "желе"

Программирование на Юнити.

модель из "желе"

Сообщение powerscin 17 авг 2011, 11:42

Добрый день,
Подскажите пожалуйста, вот есть у меня 3d-модель как ее можно сделать "как желе" и что бы отдельные части реагировали на притяжение. Если кто то что то подобное делал напишите пожалуйста, большое спасибо
powerscin
UNIт
 
Сообщения: 54
Зарегистрирован: 25 июл 2011, 18:55

Re: модель из "желе"

Сообщение Neodrop 17 авг 2011, 15:19

Через Cloth
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: модель из "желе"

Сообщение powerscin 18 авг 2011, 16:35

К сожалению нет, я делаю для iphone, а там cloth не поддерживается, может есть аналоги?
powerscin
UNIт
 
Сообщения: 54
Зарегистрирован: 25 июл 2011, 18:55

Re: модель из "желе"

Сообщение Neodrop 18 авг 2011, 18:18

Кодом двигать вершины.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: модель из "желе"

Сообщение artk 18 авг 2011, 20:15

Костями, и некоторые кости связать Joint-ом и добавить rigidbody, а лучше рассчитывать растяжение скриптом. Делал примерно так же, что бы кубик, при столкновении, сминался, - ловил событие и двигал кости процедурно. Можно так же добиться нужного эффекта. Но это слишком затратно, лучше использовать анимацию.

У меня вопрос немного в оффтоп:
В чем проблема сделать морфинг для простенькой модели. В формате, таких как 3ds, md2 анимация храниться просто последовательно в координатах. Что мешает, читая файл, двигать вершины процедурно(файл, естественно, сразу в буфер)?
Быстро ли работают функции работы с вершинами и полигонами в [unity 3D] или анимация быстрее?
Аватара пользователя
artk
Старожил
 
Сообщения: 749
Зарегистрирован: 22 май 2011, 12:22

Re: модель из "желе"

Сообщение powerscin 22 авг 2011, 10:16

А еще такой вопрос, я использую на модели скрипт для деформации при столкновениях:
Синтаксис:
Используется javascript
var minForce = 1.0;
var multiplier = 0.1;
var deformRadius = 1.0;
var maxDeform = 0.0;
var bounceBackSpeed = 0.0;
var bounceBackSleepCap = 0.001;
var onCollision = true;
var onCall = true;
var updateCollider = false;
var updateColliderOnBounce = false;
private var vec : Vector3;
private var point : Vector3;
private var tf : Matrix4x4;

private var mesh : Mesh;
mesh = GetComponent(MeshFilter).mesh;

if (!GetComponent(MeshCollider)) {updateCollider = false;updateColliderOnBounce = false;}

private var permaVerts : Vector3[];
permaVerts = GetComponent(MeshFilter).mesh.vertices;
private var sleep = true;
//--------------------------------------------------------------
function OnCollisionEnter (collision : Collision) {
        if (onCollision && collision.relativeVelocity.magnitude >= minForce) {
                sleep = false;
                var vertices = mesh.vertices;
                tf = transform.worldToLocalMatrix;
                for (var i=0;i<vertices.length;i++) {
                        for (var contact in collision.contacts) {
                                point = tf.MultiplyPoint(contact.point);
                                vec = tf.MultiplyVector(collision.relativeVelocity*UsedMass(collision));
                                if ((point - vertices[i]).magnitude < deformRadius) {
                                        vertices[i] += vec*(deformRadius-(point-vertices[i]).magnitude)/deformRadius*multiplier;
                                        if (maxDeform > 0 && (vertices[i]-permaVerts[i]).magnitude > maxDeform) {
                                                vertices[i] = permaVerts[i] + (vertices[i]-permaVerts[i]).normalized*maxDeform;
                                        }
                                }
                        }
                       
                }
                mesh.vertices = vertices;
                mesh.RecalculateNormals();
                mesh.RecalculateBounds();
                if (updateCollider) {GetComponent(MeshCollider).sharedMesh = mesh;}
        }
}
//--------------------------------------------------------------
function Deform(point : Vector3, direction : Vector3) {
        if (onCall && direction.magnitude >= minForce) {
                sleep = false;
                var vertices = mesh.vertices;
                tf = transform.worldToLocalMatrix;
                point = tf.MultiplyPoint(point);
                vec = tf.MultiplyVector(direction);
                for (var i=0;i<vertices.length;i++) {
                        if ((point-vertices[i]).magnitude <= deformRadius) {
                                vertices[i] += vec * (deformRadius-(point-vertices[i]).magnitude)/deformRadius*multiplier;
                                if (maxDeform > 0 && (vertices[i]-permaVerts[i]).magnitude > maxDeform) {
                                        vertices[i] = permaVerts[i] + (vertices[i]-permaVerts[i]).normalized*maxDeform;
                                }
                        }
                }
                mesh.vertices = vertices;
                mesh.RecalculateNormals();
                mesh.RecalculateBounds();
                if (updateCollider) {GetComponent(MeshCollider).sharedMesh = mesh;}
        }
}
//--------------------------------------------------------------
function Update () {
        if (!sleep && bounceBackSpeed > 0) {
                sleep = true;
                var vertices = mesh.vertices;
                for (var i=0;i<vertices.length;i++) {
                        vertices[i] += (permaVerts[i] - vertices[i])*(Time.deltaTime*bounceBackSpeed);
                        if ((permaVerts[i]-vertices[i]).magnitude >= bounceBackSleepCap) {sleep = false;}
                }
                mesh.vertices = vertices;
                mesh.RecalculateNormals();
                mesh.RecalculateBounds();
                if (updateColliderOnBounce) {GetComponent(MeshCollider).sharedMesh = mesh;}
        }
}
//--------------------------------------------------------------
function UsedMass (collision : Collision) {
        if (collision.rigidbody) {
                if (rigidbody) {
                        if (collision.rigidbody.mass > rigidbody.mass) {
                                return (collision.rigidbody.mass);
                        }
                        else {
                                return (rigidbody.mass);
                        }
                }
                else {
                        return (collision.rigidbody.mass);
                }
        }
        else if (rigidbody) {
                return (rigidbody.mass);
        }
        else {return (1);}
}


Можно ли каким-нибудь образом к определенной точке модели прикрепить своего рода "якорь" например сферу, но, что бы сфера сохраняла свои физические свойства как гравитация и что бы я мог к этой сфере прицепить joint, что бы ограничить движение.
Извините если немного сумбурно все описал, но никто с подобным дела не имел?
powerscin
UNIт
 
Сообщения: 54
Зарегистрирован: 25 июл 2011, 18:55

Re: модель из "желе"

Сообщение artk 01 сен 2011, 00:48

:-s что-то мозг разжижало, составляя алгоритм из этого скрипта. Можно демку посмотреть? Ну и принцип алгоритма накидать.
Если это ваш скрипт, то вам не составит проблем дописать что вы хотите. Вопрос, все же, не понятен. Посмотрите как устроена костаная анимация в (max_sm) . Назначить каждой вершине вес, в зависимости от дальности расположения от "якоря". Ну и привизать сферу к координатам точки.
Аватара пользователя
artk
Старожил
 
Сообщения: 749
Зарегистрирован: 22 май 2011, 12:22

Re: модель из "желе"

Сообщение powerscin 01 сен 2011, 09:52

нет, скрипт не я писал. Пример можно тут посмотреть:
http://forum.unity3d.com/threads/52040-Deform-Script-(early-stage)
powerscin
UNIт
 
Сообщения: 54
Зарегистрирован: 25 июл 2011, 18:55

Re: модель из "желе"

Сообщение dtntr 08 сен 2011, 23:45

Симуляция резины и желе.



Михайлов Дмитрий
skype: Dtntrr
icq: 168121770
e-mail: _ultradma@mail.ru
_ttp://vkontakte.ru/#/id28379000
Мой законченный проект: _ttp://www.kongregate.com/games/Dmitrii ... oll-bomber
dtntr
UNITрон
 
Сообщения: 201
Зарегистрирован: 06 окт 2009, 12:16
Откуда: Тверь
  • ICQ


Вернуться в Скрипты

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 4