Полезное

Мы Вконтакте

Discord канал

#
Пред.
Модератор: LEX38RUS
Аватара пользователя
Пользователь
Сообщения: 22
Ребята, здравствуйте! Помогите разобраться как устроен механизм текстурирования на конкретном примере. Имеется две текстуры размерами 32х32 и 2048х2048, провожу над ними операцию перемножения (multiply) и получаю на выходе смешанную текстуру, итак, вопрос- каким образом движок перемножил две текстуры разного размера? И второй вопрос, какого размера текстуру получаем на выходе?
На картинке в приложении верхняя текстура имеет разрешение 32х32, нижняя соотвественно 2048х2048.
http://s1.uploadpics.ru/images/-kkeORKuSx.png
Аватара пользователя
Пользователь
Сообщения: 564
Текстуры там не перемножаются, перемножается значение цвета для каждого пиксела при рендере.

Накладывается первая текстура, растягиваясь по ув-координатам.
Затем так же накладывается вторая.
Затем цвета каждого пиксела перемножаются.
Результат во вьюпорте виден.
Аватара пользователя
Пользователь
Сообщения: 22
Это понятно, не понятно по какому принципу происходит перемножение каналов разноразмерных матриц?
Аватара пользователя
Пользователь
Сообщения: 22
Т.е. перед обработкой текстур они приводятся к одному размеру. В таком случае как быть если мне охото отобразить эту маленькую текстуру на большой сохранив ее размеры?
Аватара пользователя
Администратор
Сообщения: 1581
Нет, они не приводятся к одному размеру. UV координаты на модели работают от 0 до 1, таким образом любая текстура просто накладывается на это UV пространство своим левым верхним углом на 0, а правым нижем на 1.

Грубо говоря две разные текстуры в любом случае накладываются на UV одинаково. То есть 32х32 текстура накладывается на пространство от 0 до 1, и текстура 2048х2048 накладывается так же на пространство от 0 до 1. Разрешение текстур не меняется, меняется скорее мастштаб отображения.

Изображение

Если вы бы работали с 3Д графикой и моделированием, то там по UV развертке это легче понять.

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

То есть берется пиксель, где рендирится модель, берет одну текстуру, расположенную по UV, потом другую текстуру, расположенную по UV. Смотрит, где экранный пиксель на этих текстурах и берет значения оттуда. Ну и умножает.

Изображение

Советую ещё вот эту статью прочитать: http://uengine.ru/site-content/articles ... ds-details
_________________
Просьба, не писать вопросы по движку в ЛС. Я не единственный, кто знает UE4, и поэтому пишите на форум или в группу.
Аватара пользователя
Пользователь
Сообщения: 22
Спасибо за разъяснения и за полезную ссылку на статью. Но вопрос все еще актуален. Давайте рассмотрим следующий пример. В engine content имеется такая текстура LevelGrid1DStripes, ее размер 4096х1. Как видим на скриншоте, то она размножилась по оси Х. Выходит движок замостил ей выходной размер текстуры, но как часто он это делал, 4096 раз? С виду не скажешь.
Изображение
Аватара пользователя
Администратор
Сообщения: 1581
Нет, текстура не дублируется, если вы этого сами не указали. Как я сказал выше, она "растягивается" по UV координатам. Это значит, что её верхний левый угол ложится на UV 0;0, а нижний правый в 1;1. Не важно, какого она соотношения или размера.

В вашем случае текстура 4096x1 наложилась на 0;0 своим 1x1 пикселем, а на 1;1 наложилась своим 4096x1 пикселем. Простым языком - текстура просто растянулась до 4096x4096 для заполнения всего пространства.
_________________
Просьба, не писать вопросы по движку в ЛС. Я не единственный, кто знает UE4, и поэтому пишите на форум или в группу.
Аватара пользователя
Пользователь
Сообщения: 22
Выходит движок при наложении на UV преобразует текстуры к максимальному имеющемуся значению? И выходит в вышеуказанном примере действительно 4096 полосок? Если так, то получается ,что и текстура размером 32х32 из первого примера растягивается до 2048х2048.
Аватара пользователя
Администратор
Сообщения: 1581
Размер текстур не меняется. Забудьте вообще о разрешении, здесь оно не имеет значения вообще. Имеет значение только 0 и 1. Первая текстура имеет размер 1 и вторая текстура имеет 1. Растягивается что-то просто визуально из-за того, что вы рендерите поверхность не в том размере, что текстура. Но внутри ничего не растягивается. Просто накладывается.
_________________
Просьба, не писать вопросы по движку в ЛС. Я не единственный, кто знает UE4, и поэтому пишите на форум или в группу.
Аватара пользователя
Пользователь
Сообщения: 22
Уважаемый, Flakky! Я запутался. <<Простым языком - текстура просто растянулась до 4096x4096 для заполнения всего пространства. >>
<<Растягивается что-то просто визуально из-за того, что вы рендерите поверхность не в том размере, что текстура. Но внутри ничего не растягивается. Просто накладывается. >>
Попробуйте, пожалуйста, объяснить другими словами. Я так понимаю, что каждая текстура будет преобразована к квадратному варианту по наибольшей стороне путем ее дублирования. Ну если взять текстуру 128х64, то она будет повторена два раза до 128х128, верно?


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

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница