Как стать автором
Обновить

Комментарии 11

Вы бы под кат статью спрятали…
Я извиняюсь, не в том месте тег проставил, вот оно и не спрятало
Круто! Очень интересно! Спасибо огромное!
Спасибо, я старался осветить самое важное, учитывая комментатрии dotsquid можно дополнить статью, но я лучше опишу все тонкие моменты в следующей.
Непонятная целевая аудитория статьи.

С одной стороны, люди, которые более-менее знакомы с программированием трехмерной графики (пусть даже незнакомые с Unity3d), смогут самостоятельно найти примеры в документации.

С другой стороны, у людей, которые вообще незнакомы с этой областью, скорее всего появится куча новых вопросов. Например:
1)
Тег { «RenderType» = «Opaque» } помечает шейдер как непрозрачный. Это влияет на очередь отрисовки.
Каким образом влияет? Почему нельзя было уделить абзац на пояснение процесса отрисовки полупрозрачной геометрии и проблем с ней связанной: необходимость сортировки по отдалению от камеры либо использование изощренных техник order-independent transparency (вроде depth peeling)? И, соответственно, сказать, что непрозрачную геометрию можно рисовать значительно быстрее, поэтому важно правильно указать этот флаг.
2)
#pragma surface surf Lambert – объявление функции surface-шейдера… модель освещения по Ламберту.
Вы уверены, что все знают, что такое освещение по Ламберту? Можно было бы тоже пару абзацев уделить тому, как рассчитывается интенсивность света, и что Ламбертова модель освещения подразумевает использование всего двух векторов: нормали поверхности и вектора от источника света до обрабатываемого пикселя. И поэтому, с одной стороны, оно очень быстрое, а с другой стороны, очень простое и далеко до реалистичного: поверхности исключительно матовые.
3)
После чего функцией clip мы указываем, какие пиксели мы пропускаем при рендеринге. Т.к. отсекаем мы по информации, которая хранится в альфа-канале, то в параметрах указываем tex.a.
А в коде почему-то еще вычитаете 0.5. Возможно, стоило написать, что функция clip отбрасывает текущий пиксель, если аргумент функции меньше нуля? Соответственно, в вашем случае, если значение альфа-канала текущего пикселя меньше 0.5, то пиксель нарисован не будет, и таким образом вы управляете прозрачностью финальной картинки (та самая рожица на текстуре кирпича).
Ну и т.д.

ЗЫ. Почему в диаграмме, подписанной «DX8 — DX10», присутствует геометрический шейдер? И шейдер не «фрагментарный», а «фрагментный».
Сами понимаете, всего учесть порой невозможно. Но я обязательно учту замечания в следующий раз.
а можно сзанудничать и попросить изменить dx8-dx10 на картинке на год? :)
Ну ведь не майкрософтом единым… Тем более-то в Unity3d
А давайте я просто допишу туда год? Суть то в том, что началось это с восьмого директа.
даешь статью про dx11 и тесселяюцию в unity 4.0 !)
Идея хороша. Надо будет пощупать сначала все эти прелести
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории