Доброго всем времени суток! Интересует ваше мнение по реализации. Есть вода. Реализована средствами плоскости с самописным шейдером. Так же есть круги (то же реализованы плоскостью и шейдером и анимированы с помощью скрипта). На плоскости воды повешен триггер и скрипт, который по онТриггерСтейт происходит считывание координат Икс и Зет объекта вошедшего в воду и Игрик самой воды и в это место происходит инстантиейт круга на воде. Круг самоликвидируется после того, как проиграет анимацию до конца.
Сейчас это реализовано так. Вопрос: на сколько данная система логична по вашему мнению? Ну и если есть советы, буду благодарен!
В крайзис флоумапом сделано ,ну то есть есть что-то вроде генерации текстуры в зависимости от объекта и его движения и потом либо бамп рефлектион или теселятион.
Тут посоветовали следующий вариант: реализовать всю работу внутри шейдера. То есть не инстантиейт круга в мире, а размещение его в переданной скриптом позиции и анимирование уже в шейдере. Мысль хорошая, но возник вопрос: Каким образом можно передать позицию в шейдер, в каком именно месте плейна будет размещаться текстура? И как сделать так, что бы она не была зациклена? Ну то есть один раз разместилась на меше в конкретной точке и всё. Возможно звучит несколько по дилетантски, но в этом вопросе, честно говоря, не подкован.
Да легко..material.SetVector("_MyPos",myPos(Vector4)); Насчёт зацыкленности..прикол в том что я хз как несколько текстур делать что б появлялось в шейдере,ибо ты выстрелишь и оно каждый раз будет менять позицию, можно сделать что б просто увеличивался тайлинг круга и сделать его через нормал мап и поставить интенсивность текстуры(альфу) и просто после цыкла полного уменьшать его до 0 и когда снова нужно ставить 1.
Да легко..material.SetVector("_MyPos",myPos(Vector4));
Это я понимаю, меня интересует не механизм передачи информации, а её формат. Размещение текстуры на меше зависит от UV координат. Сейчас пока писал, кажется, сам понял, но если не прав, прошу поправить. Так как на практике не применял... Размещение текстуры зависит от UV координат, а именно, от параметра offset. Его значение, на сколько я понимаю, варьируется от 0 до 1. И таким образом в зависимости от размеров меша воды и его координат объекта, вошедшего в воду, можно рассчитать этот самый offset достаточно просто. Но! Остаётся вопрос о зацикливании. Опять таки: Если мы имеем большой меш и в шейдере будем анимировать текстуру круга путём её увеличения, изначально она будет достаточно маленькой, а значит будет мороситься по всей поверхности воды. Но ведь как-то можно сделать так, что бы она ложилась на меш единожды... Что касается вариантов с манипуляцией вершинами, на мой взгляд, это не самый правильный вариант, по крайней мере мне он не нравится. Мой шейдер воды работает с приломлениями, ипользоя карты нормалей и круг я собирался сделать так же.
По ссылке на форум? Да. В скрипте! Потому я считаю, что подход неверен. Поищи - на форуме есть даже пак с кругами, с расчетами на GPU Вот: http://forum.unity3d.com/threads....ailable И не ленись искать - это быстрее, чем ждать когда кто-то за тебя найдет.
seaman, я не ленюсь. Прежде чем написать на форумы, я в течении нескольких дней искал и пересматривал не один вариант реализации, как шаровые ,так и платные. В конце концов разработав свой. И уже потом обратился за советом, как его улучшить или же вообще пойти в другую сторону. А вариант работы с вёртексами, как через скрипт, так и через шейдер отмёл сразу, так как если использовать шейдерное искажение картами нормалей, мне хватит всего одного полигона и не нужно манипулировать вершинами. Но за ссылки благодарю, возможно натолкнут на какие-то мысли.