2-х сторонний материал для веток

Шейдеры и все-все-все.

2-х сторонний материал для веток

Сообщение OlegF 19 фев 2011, 17:49

Поиском по форумам и в гугле ничего толкового найти не получилось. Скачал дефолтные шейдеры юнити и попробовал TreeSoftOcclusionLeaves.shader, но они не компилятся в 3.1, кидается куча ошибок и рекомендуется юзать surface шейдеры.

Задача простая - есть деревья, есть плашки с текстурами веток и прочего, их нужно рисовать с двух сторон. Можно только диффузно, можно без теней (хотя тени желательны). Копировать вершины/фейсы и флипать нормали не разрешается, нужен минимум фейсов в модели. Мне порекомендовали написать шейдер, который рендерит в одном проходе фронт фейсы, а во втором проходе флипает нормали и рендерит бекфейсы (и меняет CW на CCW). Такой вполне подошел бы, но сделать надо за сегодня/завтра, а я в юнити и ее шейдерах разбираюсь слабо. Помогите ссылкой или примерами :)
OlegF
UNец
 
Сообщения: 34
Зарегистрирован: 19 фев 2011, 17:23

Re: 2-х сторонний материал для веток

Сообщение Paul Siberdt 19 фев 2011, 18:08

http://unity3d.ru/distribution/viewtopic.php?f=16&t=3580

Недавняя тема. Вам надо изучить вопрос, как скопировать понравившийся шейдер для листвы и поставить ему Off для параметра Cull

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

Re: 2-х сторонний материал для веток

Сообщение OlegF 19 фев 2011, 18:38

Если мы просто включим задние фейсы, их освещение будет некорректно, т.е они будут освещаться с учетом тех же нормалей, что и передние фейсы. Задача - корректное диффузное освещение с альфатестом. По этой же причине не подходят двухсторонние материалы из раздела Particles, там используется блендинг, а не альфатест. Фактически нужно сэмулировать на шейдере дублирование геометрии с инвертированием нормалей для задних фейсов.

Можно переформулировать задачу так - нужен шейдер освещения с альфа тестом и желательно с тенями, дополнительный проход я сам напишу. Код должен быть на CG, потому что surface шейдеры сами генерируют проходы.
OlegF
UNец
 
Сообщения: 34
Зарегистрирован: 19 фев 2011, 17:23

Re: 2-х сторонний материал для веток

Сообщение gnoblin 19 фев 2011, 21:00

шейдер на CG не будет нормально работать с освещением

Копировать вершины/фейсы и флипать нормали не разрешается, нужен минимум фейсов в модели.

В обоих случаях геометрия будет дублироваться, что ручками в 3д пакете, что вторым проходом с cull off и инвертированными нормалями.
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: 2-х сторонний материал для веток

Сообщение gnoblin 19 фев 2011, 21:02

Если учитывать что сурфейс шейдер в два прохода сделать не получится, я бы остановился на варианте с дублированием геометрии.

Либо придется делать два объекта\один объект с двумя материалами с двумя разными шейдерами.
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: 2-х сторонний материал для веток

Сообщение alexz 19 фев 2011, 21:48

gnoblin писал(а):Если учитывать что сурфейс шейдер в два прохода сделать не получится, я бы остановился на варианте с дублированием геометрии.

Причём кажется, что будет достаточно написать скрипт, который продублирует в каждом нужном меше его же треугольники, только уже с обратным порядком вершин.
alexz
UNITрон
 
Сообщения: 270
Зарегистрирован: 16 ноя 2010, 23:37

Re: 2-х сторонний материал для веток

Сообщение gnoblin 20 фев 2011, 01:14

Кстати да!
Отличное решение :ymsmug: .
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: 2-х сторонний материал для веток

Сообщение Neodrop 20 фев 2011, 01:17

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

Re: 2-х сторонний материал для веток

Сообщение OlegF 20 фев 2011, 16:58

Пока да, приходится дублировать геометрию. Двухпроходный шейдер - требования заказчика. Опишу ситуацию чуть более подробно. Наша программа генерит некоторую геометрию (растения итд.), заказчик попросил перебросить все это в Юнити с определенными ограничениями по геометрии/шейдерам. Каждое растение, грубо говоря, состоит из нескольких частей: солид геометрия, которую можно рендерить любым встроенным шейдером, плашки, т.е двухсторонние плоскости, тут меня попросили использовать двухпроходный шейдер и билборды (аля спид три). Так что еще придется как-то писать шейдер для билбордов, пока что тупо юзается юнитевская система частиц. :)
Очень бы хотелось найти работающий шейдер с освещением и тенями на Cg для версии 3.1. Все, что я смог найти именно на Cg было сделано для 2.0, в частности втроенные шейдеры (builtin shaders) с оф. сайта Юнити. Surface-шейдеры, FFP-материалы и встроенные шейдеры к сожалению не походят. Помогите плиз с примером такого шейдера.
OlegF
UNец
 
Сообщения: 34
Зарегистрирован: 19 фев 2011, 17:23

Re: 2-х сторонний материал для веток

Сообщение gnoblin 20 фев 2011, 17:59

чем не подходит сурфейс шейдер?

чем обусловлено требование заказчика? :ymtongue:
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: 2-х сторонний материал для веток

Сообщение OlegF 20 фев 2011, 21:01

чем не подходит сурфейс шейдер?

Код должен быть на CG, потому что surface шейдеры сами генерируют проходы.


Плюс надо писать свой шейдер для билбордов, для чего surface шейдеры тоже не подходят (нужен доступ к атрибутам вершины). Решение простое - поделитесь пожалуйста ссылкой или исходником Cg шейдера освещения под версию 3.1, как-то же в юнити можно писать свои шейдеры, контролирующие все, а не только освещение?
OlegF
UNец
 
Сообщения: 34
Зарегистрирован: 19 фев 2011, 17:23

Re: 2-х сторонний материал для веток

Сообщение gnoblin 21 фев 2011, 00:35

В сурфейс шейдере можно манипулировать вершинами.

Сурфейс шейдер сам генерит проходы - и?

Можно взять скомпилированный сурфейс шейдер и добавить свой проход куда нужно (правда, это уже продвинутая техника :) ).
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: 2-х сторонний материал для веток

Сообщение gnoblin 21 фев 2011, 00:37

Мне уже эта тема начинает немного напоминать троллинг :-\
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: 2-х сторонний материал для веток

Сообщение Guyver 21 фев 2011, 09:06

жаль что поздно ....

а какбы кто запрещает флипать нормали в шейдере? ... сделать if для напраления нормали к свету ну и там решать прямая нормаль или обратная будет браться

фактически узнать туда ли смотрит нормаль это

[псевдокод]
float lit = dot(l,n);
if (lit > 0)
{
return lit;
} else
{
return dot(l,flip(n));
}

тупой и дешовый фейк без ифов но c не корректной картинкой abs(dot(l,n)) (п.с. для лисьтев может проканать как мега фейковый сабсурфейс скаттеринг)
Xcombat: 3D шутер на летающих тарелках!
Аватара пользователя
Guyver
UNIверсал
 
Сообщения: 392
Зарегистрирован: 21 июл 2010, 08:04
Откуда: Челябинск

Re: 2-х сторонний материал для веток

Сообщение gnoblin 21 фев 2011, 14:28

насколько я знаю быстрее будет работать ?-синтаксис O:-)
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт


Вернуться в Shader Lab

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

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