Ответы пользователя по тегу 3D
  • Блендер: геометрия не булится?

    Судя по артефактам, у вас там или дублирующиеся фейсы в самой модели или две одинаковые модели накладываются друг на друга, поэтому вы и не видите результата.
    Ответ написан
  • Существует ли аддон или софт для блендера, расставляющий освещение в сцене в соответствии с HDRI картой?

    В Blender есть возможность просто поставить HDRI-карту в качестве источника освещения окружения. Это наиболее реалистичный способ осветить сцену.
    Как это сделать, можно посмотреть, например здесь
    Ответ написан
  • Почему эти вершины такие "острые"?

    У вас там дублирующиеся вершины, похоже. Удалите с помощью merge vertices -> by distance
    Ответ написан
  • Как создать цилиндрическую винтовую линию?

    Можно умножить получаемые координаты на нужную матрицу трансформации.
    https://habr.com/ru/post/319144/ раздел "Матрица вращения"
    Матрица считается один раз перед рисовкой, а потом все координаты спирали умножаются на неё.

    Пример:
    Есть у нас вектор, вокруг которого хотим повернуть всю спираль: (vx,vy,vz)
    Есть угол, на который хотим повернуть: a

    Тогда матрица поворота вокруг этого вектора выглядит так:
    {
    	{cos(a)+(1-cos(a))*vx*vx,     (1-cos(a))*vx*vy-sin(a)*vz,   (1-cos(a))*vx*vz+sin(a)*vy,  0},
    	{(1-cos(a))*vy*vx+sin(a)*vz,  cos(a)+(1-cos(a))*vy*vy,     (1-cos(a))*vy*vz-sin(a)*vx,   0},
    	{(1-cos(a))*vz*vx-sin(a)*vy,  (a-cos(a))*vz*vy+sin(a)*vx,  cos(a)+(1-cos(a))*vz*vz,      0},
    	{0,                           0,                           0,                            1}
    }


    Чтобы упростить формулы, обозначу элементы матрицы через переменные a,b,c,d,e,f,g,h,i
    a=cos(a)+(1-cos(a))*vx*vx
    b=(1-cos(a))*vx*vy-sin(a)*vz
    c=(1-cos(a))*vx*vz+sin(a)*vy
    d=(1-cos(a))*vy*vx+sin(a)*vz
    e=cos(a)+(1-cos(a))*vy*vy
    f=(1-cos(a))*vy*vz-sin(a)*vx
    g=(1-cos(a))*vz*vx-sin(a)*vy
    h=(a-cos(a))*vz*vy+sin(a)*vx
    i=cos(a)+(1-cos(a))*vz*vz


    Получается уже не такая страшная матрица:
    a, b, c, 0
    d, e, f, 0
    g, h, i, 0
    0, 0, 0, 1

    Чтобы повернуть любую точку (x,y,z), используя эту матрицу, достаточно перемножить координаты точки на матрицу, добавив еще единицу как четвертую координату.

    5f1bd4d78ffe6921159705.gif

    Перемножаем, получая новые координаты точки (x,y,z) (повернутые на заданный угол вокруг заданного вектора)

    newx = a*x + b*y + c*z
    newy = d*x + e*y + f*z
    newz = g*x + h*y + i*z

    Можете использовать эту формулу перемножения, вообще не думая о матрицах.
    Просто подставляйте вместо букв a-i соответствующие куски тригонометрии, которые я выше написал.
    Ответ написан
  • Насколько трудно реализовать фотореалистичную модель в игре?

    По ссылке ну совсем не фотореализм. Стопкадр еще может и сойдет за реальность, но анимация очень нереалистичная. Обычно все как раз в анимацию и упирается, смоделить и зашейдить реалистичное лицо относительно легко, даже в готовых библиотеках уже есть почти все для этого. А вот сделать реалистичную анимацию уже очень сложно. Особенно это касается динамичных морщинок, которые появляются и исчезают на коже при движении лицевых мышц.
    Ответ написан
    Комментировать
  • Как увеличить фрагмент в видео?

    Практически любым видеоредактором.
    Если вам это автоматизировать нужно, то ffmpeg
    Ответ написан
    Комментировать
  • Как реализовать текстурирование?

    Вам нужно почитать что такое текстурные координаты, MIP-текстурирование, фильтрация текстур.
    Если очень упрощенно, то у каждой вершины треугольника есть пара текстурных координат (u и v), это как x и y, только для текстуры. Они говорят о том, в каком месте картинки текстуры находится эта вершина. Эти координаты обычно между 0 и 1, где 0 это ноль на картинке, а 1 это ширина или высота картинки (в зависимости от того, u это или v).
    Далее, при растеризации этого треугольника, для каждого отрисованного пикселя производится интерполяция этих координат. После интерполяции мы получаем координаты точки в картинке текстуры, которая соответствует данному месту на рендерящемся треугольнике.
    Тут вступают в работу mip-карты (это просто наша текстура с разными разрешениями), например, исходник текстуры 512x512, мип-карты для него будут 256x256, 128x128, 64x64, итд хоть до 1х1. Из какой мип-карты брать информацию определяется по расстоянию от камеры до данной точки треугольника. Чем дальше точка, тем меньшая по разрешению мип-карта берется, для оптимизации.
    Когда выбрали точку, вступает в дело фильтрация текстур, тут есть несколько разных алгоритмов. Их цель — сгладить переходы между пикселями текстуры (текселями), эти алгоритмы отвечают за то, какой цвет точки выбрать, если мы попали не точно по текселю, а между текселями (что происходит практически всегда). Самый простой — nearest, он просто берет цвет ближайшего текселя.
    Ответ написан
    Комментировать
  • Как определить видимые ребра многоугольника к точки на плоскости?

    Многоугольник — это набор вершин, заданный в определенном порядке. Вот и определите нормали исходя из этого порядка. Например, задайте себе как стандарт обход многоугольника всегда по часовой стрелке, тогда нормаль грани всегда будет под 90 градусов влево от вектора, проведенного из вершины n в вершину n+1.
    В 2д движках обычно так и делают.
    Ответ написан
    Комментировать
  • В чем смысл Z-буферизации, как я представляю, что сцену с парой тысяч полигонов он за 10 лет не нарисует?

    Во всех современных играх используется z-buffer. В том числе всяких GTA V.
    И если рисовать сначала ближние объекты, то отрисовка перекрытых z-буфером фрагментов будет аппаратно отсекаться видеокартой, а это очень быстро. Полностью они отрисовываться чаще всего не будут.
    Плюс, в игре никогда не будет ситуации с 99 полнополигональными деревьями на одной линии, ибо кроме z-буфера используются и другие технологии.
    Например, благодаря LOD, полное количество полигонов будет только у самых ближних объектов, а чем дальше объект, тем более низкополигональная его версия будет подставляться вместо него. Вместо самых далеких объектов вообще будут плоские картинки.
    Благодаря деревьями видимости из кадра будет убираться часть объектов, которые сейчас не должны быть видимы камерой, они просто не будут рисоваться, потому что движок поймет, что они перекрыты от взгляда.
    итд...

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

    Советую на хабре почитать серию постов "как рендерится кадр в игре n" https://habr.com/ru/company/ua-hosting/blog/271931/ там довольно хорошо показаны все шаги, в том числе z-буфер.
    Ответ написан
    Комментировать
  • Factorio - игра с настоящим 2D?

    Графика в полном 2д. Поезда в том числе, они рендерят спрайты на каждые n градусов поворота.
    Про пайплайн создания графики они писали тут: https://www.factorio.com/blog/post/fff-146
    Кстати, почитайте другие посты их блога, там очень много технической информации о внутренностях игры.
    Ответ написан
    1 комментарий
  • Почему объект выглядит поломанным при импорте .fbx из Blender в Unreal Engine 4?

    У вас нормали развернуты не в ту сторону у некоторых поверхностей.
    Игровые движки для оптимизации не рисуют те полигоны, которые направлены не в камеру, а от нее.
    В Блендере 2.8 можно поставить галочку face orientation, чтобы увидеть направление поликов.
    5e709657af61d215925100.png

    После этого синим будут показаны полигоны, которые смотрят в камеру, а красным, которые смотрят от камеры. В игровом движке красные показываться не будут.
    Я для примера развернул одну грань кубика, вот как это выглядит.
    5e7096834e26f433545140.png
    Ответ написан
    Комментировать
  • Возможно ли, чтобы UV растягивалась автоматически с изменением меша в Blender?

    Генерируйте текстурные координаты прямо в шейдере, завязываясь на положение текселя в пространстве.
    5e26b69a0e06e474634007.png
    В ноде mapping настраивайте размер и положение плиток.
    Ответ написан
    3 комментария
  • В чем можно сделать интерактивный 3д план?

    Зависит от того, насколько глубоко вы хотите погружаться в программирование.
    Можно собрать это все в конструкторе, например Blend4Web
    Можно написать на javascript с использованием ThreeJS
    Ответ написан
    Комментировать
  • Где это найти в Blender 2.81?

    Скорее всего имеется ввиду пара параметров clip start и clip end (видны при выбранной камере на вкладке камеры). Если clip end сделать очень большим, начнется z-fighting.
    5e0a28452f105044970397.png
    Ответ написан
    Комментировать
  • Зачем нужен HDRI, когда можно просто выставить свет?

    С HDRI выставляют фоновое освещение, в основном для экстерьерных сцен. Потому что вручную очень сложно передать все детали освещения, которое исходит от неба. Там есть сложные облака, рассеивание, изменение спектра при закате, итд. Достаточно просто сделать серию 360-фотографий с разной экспозицией и специальный софт сделает из этого HDRI-карту. Ну или просто скачать готовую.
    Для интерьерных сцен HDRI используют только в предметке, когда надо осветить какой-то предмет, будто он находится в данном интерьере. Особенно это полезно, когда делаешь видео, где в реальный видеоряд вставляется какой-то CG-объект. Просто снимаешь HDRI со съемочной площадки и не паришься потом с ручной подгонкой освещения объекта, оно будет очень натуральным и соответствующим видео.
    Ответ написан
    Комментировать
  • Почему пропали объекты в Blender?

    У вас clip start и clip end равны друг другу.
    Поставьте clip end = 5000

    Это правый верхний угол вьюпорта, раздел View, сразу под Focal length

    clip start — это минимальное расстояние до камеры, end — максимальное.
    Все, что ближе clip start и дальше clip end, не показывается.
    Ответ написан
    Комментировать
  • Что ознает Blockout в создании уровня?

    Blockout — это когда ты грубо накидываешь на уровень параллелепипеды вместо всех объектов, чтобы примерно прикинуть масштабы и что где будет расположено.
    Ответ написан
    Комментировать
  • Как загрузить модель obj в Three.js?

    Разместите проект на http-сервере, можно локальном, тогда все будет в порядке. Когда вы открываете просто html-файл, браузер не позволяет ему загружать произвольные файлы с компьютера во имя безопасности.
    Ответ написан
    1 комментарий
  • Как реализуется глянцевая и матовая плоская поверхность?

    В Блендере это настраивается параметром roughness у шейдера Principled.
    Учтите, что при предметной визуализации очень важно иметь хорошую HDR карту окружения, чтобы на объектах были блики и отражения.
    Значения слева направо: 0, 0.1, 0.7
    5d4971a8785d1502914992.png
    Если бы я не поставил здесь карту окружения, то небо бы не отражалось в пластинках и мы бы не увидели степень матовости поверхности. Поэтому важно или иметь сцену вокруг объекта или карту окружения.

    5d4971e24688c771353177.png
    Ответ написан
    Комментировать
  • Как автоматизированно разрезать 3d модель на 2 части?

    Скрипт для Блендера должен.
    1. Импортировать модель.
    2. Создать параллелепипед, закрывающий половину модели.
    3. Применить модификатор boolean с режимом subtract на модель. То есть, вычесть параллелепипед из модели.
    4. Экспортировать получившуюся модель (это будет часть 1)
    5. Переключить модификатор boolean в режим intersection. То есть, оставить только ту часть модели, которая входит внутрь параллелепипеда.
    6. Экспортировать получившуюся модель (это будет часть 2)
    Ответ написан
    Комментировать