Застрял в текстурах? Вам сюда! (По быстрому)

Привет, реакторчане! Хочу немного рассказать про 3d, разработку игр и контента, создаваемого  для неё.

Сегодня расскажу, что такое текстуры и в чем мы все-таки застреваем в играх.

 Для полной картины, думаю, стоит начать с самого начала - создания 3d модели и текстурирования. 
 За основу возьмем  одну из простых фигур - куб. 3D модель, как многие уже знают, состоит из вершин (vertex)  в трехмерном пространстве, соединенных гранями (edge) . Эти вершины и грани образуют полигон . Есть несколько типов полигонов: треугольный (tris), четырехугольный (quads) и ngone - полигон в котором более 4-х вершин. (рис1)

                                                                                                      рис1.

   Теперь, для текстурирования нашего объекта , нам необходимо создать UV развертку. Давайте сделаем это на примере картонной коробки, которую вы развернули на полу. Uv развертка - это ваша модель, развернутая в двумерном пространстве. Т.е все полигоны нашего объекта будут расположены в одних UV координатах (плоскости). (рис2). 

                                                                                 
                                                                                                    рис2.
Наша модель готова к текстурированию! Разберемся что же такое текстура, в которой все застревают!? Текстура - это всего лишь 2d картинка (растровое изображение), используемое для придания фактуры и детализации нашей 3d модели, накладываемое по uv развертке и не более того. Обычно используют текстуру размером 1x1 т.е. 2048х2048. Пример: Рис3.  
                                                                                                      Рис3. 

    Теперь о главном!  Так почему же объекты в играх застревают друг в друге, проваливаются сквозь пол, и отталкивают в космос?! Во всем виноваты коллайдеры (collider) и физика движка. Что же такое коллайдер?  Если проще, то коллайдер - это такая же сетка из вершин и граней с помощью которой, физический движок просчитывает столкновения между объектами. Только эта модель не отображается. Есть несколько основных типов коллайдеров: Box collider,Sphere Collider, Mesh collider и другие (рис4) . Чем они проще (чем меньше полигонов ), тем быстрее движок просчитывает их взаимодействие. Из названий первых двух понятно, что эти коллайдеры представляют собой куб и сферу, а третий это сетка, которая в точности повторяет наш объект или её более упрощенный вариант. 
 Рассмотрим два первых вида на модели чайника, из известной программы 3dmax в не менее  известном движке Unity.
                                                                                                   
                     
/
/
\ /
\ /
Box collider
Sphere Collider,песочница
                                                                                                         Рис4.

                            При просчете физики используется модель коллайдера, а геометрия самого объекта не учитывается. 
                                                                                              Пример.
                                    
При попытке прохождения одного коллайдера сквозь другой , они начинают отталкивать друг друга в противоположных направлениях. 
                                                                                          Пример.


Так из-за чего тогда происходят застревания? - Из за ошибок в просчете физики. А если точнее, то из-за скорости её просчета. Если говорить простым языком, то проверка столкновений (и не только) объектов в игре производится несколько раз за определенное время. И если один объект попадает в другой, в промежутке между просчетами, получается знакомый нам эффект застревания.