Почему текстура не накладывается в 3д макс

Обновлено: 04.07.2024

Есть модель в 3DMax + текстура. Текстуру получил с помощью Unvrap UVW. Импортирую модель в obj файл. Накладываю затем эту текстуру в своей программе и в RenderMonkey. Результаты идентичные.
Получаю следующее:

Если текстуру зеркально отобразить по вертикали, то накладывается всё нормально, но текстура получается зеркальная:

Изображение

Если накладывать текстуру в максе, то все ок.

Не могу понять, что я делаю неправильно. Подозреваю, что где то в Max-се инвертируются текстурные координаты, но где и почему, не могу понять.
Я понимаю, что можно изначально инвертировать текстуру перед тем, как наносить на неё рисунок, но я брал готовые модели и там ситуация аналогичная, и инверсия только искажает текстуры модели.

Вот модель с текстурой (obj, max):
Barrel.7z

И так со всеми obj моделями? или только с этой?

Я брал вот эту модель, ситуация аналогичная((
А в Max-e все накладывается идеально.

mmortall
> Я брал вот эту модель, ситуация аналогичная((
Первую провели - в максе нор и максовская и obj
судя по всему рендермаки и твоя программа не учитывают каую-либо особенность obj формата. хотя еще более вероятно - то что ты не поставил какую нибудь галочку при эксопрте. (помню както пытался в obj что то эксопртнуть, так там настроек как дофигища. в итоге забил просто)

Да не так и много там галок. я ставлю экспорт текстурных координат и нормали. Можно ещё группы сглаживания.
Да, в максе все отлично, а в других редакторах все зеркально. В этом и проблема((

А во что ещё удобно экспортировать для гейм дева? Я думал, obj самый удобный. С COLLADA пока не умею работать.

Кстати, вы не знаете, почему у меня в программе текстуры такими берутся кубиками на краях? Это связано с отсутствием MIP-текстур ?

mmortall
> Да, в максе все отлично, а в других редакторах все зеркально. В этом и
> проблема((
Глянул. есть галочка Flip YZ-asix - может в ней дело?

> А во что ещё удобно экспортировать для гейм дева? Я думал, obj самый удобный. С
> COLLADA пока не умею работать.
для геймдева удобно свой формат, со своим экспортером. можешь еще 3ds попробывать. есть готовые библиотеки для чтения этого формата. (анимацию правда не поддирживает)
а вообще про это много тем на форуме

mmortall
> Кстати, вы не знаете, почему у меня в программе текстуры такими берутся
> кубиками на краях? Это связано с отсутствием MIP-текстур ?
это связано с фильтрацией, и с параметрами семплера (тип адресации текстуры врап, миррор и т.д.).
при считывании текселя из текстуры - для сглажывания беруться еще соседние тексели
мипмапы генеряться как правило автоматически, если не предпринимать ничего проти. т.е. на каждом следующем уровне мипа - эти артефакты только усиливаются.
решение - делать вокруг основного рисунка "бордюр" размером 2^n где n - количество мип уровней

Flip YZ-asix - это не с текстурой связано. Пробовал, одинаково.
В общем скачал я 3D object converter, он умеет загружать файлы разных форматов. И он накладывает текстуру так, как надо. И развертку показывает правильную. Видимо моя программа и РендерМонкей неверно читает obj-файл.

> для геймдева удобно свой формат, со своим экспортером. можешь еще 3ds попробывать. есть готовые
> библиотеки для чтения этого формата. (анимацию правда не поддирживает)
> а вообще про это много тем на форуме

Спасибо, почитаю. 3ds попробую.

>это связано с фильтрацией, и с параметрами семплера (тип адресации текстуры врап, миррор и т.д.).
понятно, спасибо. Попробую изменить эти настройки. Посмотрю и отпишу, что получится.

mmortall 100% не помню, вроде оси 3DS max и сцены могут отличаться. +Условие правосторонняя система координат и левосторонняя. При экспортировании/импортировании это нужно учесть.

>Кстати, вы не знаете, почему у меня в программе текстуры такими берутся кубиками на краях? Это связано с отсутствием MIP-текстур ?

Ты имеешь ввиду явную границу на гранях ? Это скорее всего из-за груп сглаживания (если я тебя правильно понял). При экспортировании это не было учтено и нормали экспортированы не верно (если вообще экспортированны).

mmortall
> Видимо моя программа и РендерМонкей неверно читает obj-файл.
либо 3дмакс его неверно записывает =))

Всю жись делал texCoord.y = -texCood.y при экспорте любых моделей из майки и макса.

XProger
> Всю жись делал texCoord.y = -texCood.y при экспорте любых моделей из майки и
> макса.
а у меня без этого работает. Что я делаю не так?

Такая опция похоже есть в РендерМонкей. Это же сделал в своей программе.
Теперь текстура накладывается без предварительной инверсии в фотошопе, но все равно зеркально(((

Я так понял, дело в том, что в максе правосторонняя система координат (как в OpenGL), а у меня в DirectX - левосторонняя.

Вот настройки наложения текстуры. Изменение этих настроек никак не влияет на наложение текстры, разве что мирор делает текстуру зеркально, тогда вообще все неправильно, а анизотропная фильтрация лучше смотрится на очень дальних расстояниях, как и должно быть.

>Ты имеешь ввиду явную границу на гранях ? Это скорее всего из-за груп сглаживания (если я тебя правильно понял). При экспортировании это не было учтено и >нормали экспортированы не верно (если вообще экспортированны).

Неверное нет, я имею в виду на скрине, где моя программа, на границе текстура берется загзагами.
А при отдалении текстура сползает и заменяется нижней, а сам обект инвертируется. Чем то напоминает случай, если неправильный CULLMODE поставить. Может это явление как то связано с проблемой инверсии текстуры.
Что интересно, с текстурой плоскости все в порядке.
Нормали экспортируются, но освещение я отключил. Группы сглаживания - нет, т.к. пока с ними не умею работать.

В общем проблему частично решил инверсией координат прямо в Unvrap UVW. Однако для уже готовых моделей тогда придется делать заново развертку((

По поводу зигзагов по краям оказалось дело в матрице проекции:

Если изменить 0.01f на 0.1f или 1.0f, то артефакты на швах текстуры исчезают. Если установить 0.001f, артефакты вообще колоссальные. Не понимаю, почему.

mmortall
> В общем проблему частично решил инверсией координат прямо в Unvrap UVW. Однако
> для уже готовых моделей тогда придется делать заново развертку((
ужасное решение.
отрази текстурные координаты. при экспорте\загрузке.

mmortall
> 0.01f, 10000.0f
ОМГ. почитай про z-буфер, z-файтинг и т.п. его точность весьма ограничена.
обычно более чем достаточно 1.f, 1000.f
и артефактов это не вызывает

Особенности текстурирования в 3ds Max

Простое текстурирование

1. Откройте 3ds Max и создайте несколько примитивов: бокс, шар и цилиндр.

Простое текстурирование в 3ds Max 1

Простое текстурирование в 3ds Max 2

Простое текстурирование в 3ds Max 3

Простое текстурирование в 3ds Max 4

5. Приступим, непосредственно к текстурированию.

Простое текстурирование в 3ds Max 5

Простое текстурирование в 3ds Max 6

Простое текстурирование в 3ds Max 7

Простое текстурирование в 3ds Max 8

Это был самый простой способ текстурировать объекты. Рассмотрим более сложный вариант.

Текстурирование разверткой

1. Откройте в 3ds Max сцену, имеющую объект со сложной поверхностью.

Сложное текстурирование в 3ds Max 1

Сложное текстурирование в 3ds Max 2

Сложное текстурирование в 3ds Max 3

4. Перейдите на уровень полигонов и выберите все полигоны объекта, которые нужно текстурировать.

Сложное текстурирование в 3ds Max 4

Этот процесс носит автоматический характер. Компьютер сам определяет, как лучше разглаживать поверхность.

Сложное текстурирование в 3ds Max 6

Сложное текстурирование в 3ds Max 7

Вот мы и познакомились с простым и сложным текстурированием. Практикуйтесь как можно чаще и вы станете настоящим профи трехмерного моделирования!

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.


Если вы решили начать работать в 3d max, то первое, что нужно научиться делать — это моделировать. Видимо, вы уже что-то создали, раз решили научиться накладывать текстуру на объект. В данной статье вы узнаете, как текстурировать на начальном этапе. Предупреждаю: этот урок только для новичков.

Новички! Поехали!

Чтобы наложить текстуру на объект, нужно научиться правильно работать с редактором материалов (material editor). Чтобы его вызвать, нужно нажать горячую клавишу «m», либо кликнуть по значку справа вверху.

mateditor-symbol

Перед вами появится окно с этим самым редактором. Выглядит оно так:

slate-mat-editor

Slate Material Editor

Надпись «Slate Material Editor» вверху окна говорит о том, что вы открыли обновленный редактор, который появился в последних версиях 3ds max, включая версии 2013, 2014, 2015, 2016 и 2017.

В старых версиях 3ds max использовался только компактный редактор материалов, который выглядит, как таблица с ячейками. Для многих он наиболее привычен и работать в нем удобнее. Поэтому новичкам рекомендуется пользоваться именно им. Чтобы переключить на компактный вариант, нажмите на раздел «Modes» и выберите «Compact Material Editor».

select-mat-editor

Перед вами появится такое окно:

compact-mat-editor

Compact Material Editor

Увеличиваем число ячеек

Следующее, что нужно сделать — это увеличить количество ячеек, т.к. уже в ближайшее время их для вас станет слишком мало. Нажимаем правой кнопкой мыши на любой ячейке (сером шарике) и выбираем 6×4 Sample Windows.


Теперь перед нами 24 ячейки. Если хотите сделать еще больше ячеек, то читайте эту статью. Следующее, что нужно сделать, это выбрать первую ячейку и прописать название. Это и будет наш первый материал (шейдер).

Даем имя материалу и выбираем текстуру

Назовем его соответственно. Например, «Дерево пола». Только писать будем английскими буквами, потому что в будущем, например, в другой версии 3ds max, это название может отображаться каракулями (проблема русских шрифтов). Поэтому старайтесь выработать привычку писать все по-английски. И не обязательно знать язык. Пишем просто «derevo pola» и этого вполне достаточно, чтобы понять всем.

nasvanie-yachejki

Следующее, что мы делаем, это открываем раздел «Maps». Он нам как раз и нужен для добавления текстуры в наш материал. Ведь просто текстуру на объект (3d-модель) не наложить. Накладывается именно материал(шейдер), который будет содержать внутри себя текстуру, например, дерева или штукатурки.

Важно! Материал может иметь не одну, а сразу несколько разных текстур, например, смешанных между собой, а так же текстуру рельефа, отражения и т.д.

Об этом позже, т.к. сейчас вам нужно понять только основы. Продолжаем. Нажимаем «Maps»:

razdel-maps

Здесь нам нужен для начала только раздел Diffuse Color, в котором и будет храниться основная текстура. Кликаем на слот None напротив Diffuse Color, выбираем свиток «Standart» и 2 раза кликаем по Bitmap.

bitmap-1

Теперь остается только выбрать на вашем компьютере подходящую текстуру и добавить (загрузить) ее в bitmap.

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

Назначаем материал объекту

Чтобы 3d-модель приняла достойный вид, нужно «натянуть» на нее нашу выбранную текстуру. Применяем материал к объекту. Это можно сделать двумя путями:

  1. просто перекинуть из редактора на объект (действие 1 на скриншоте ниже);
  2. выделить объект, выделить нужный материал, кликнуть на значок (действие 2).


Вот и все. Материал назначен объекту. Чтобы текстура была видна на 3d модели, нужно нажать на шахматный значок (действие 3 на скриншоте).

От автора: Если вы решили изучить редактор материалов на профессиональном уровне, рекомендую не учиться по таким статьям, а пройти специальный курс на эту тему. Эти знания помогут вам реально создавать красивые интерьеры и зарабатывать этим на жизнь, как работают профессиональные 3d-визуализаторы. Но предупреждаю! Стандартными средствами 3ds max у вас не получится создать красивое освещение, поэтому вам нужно будет установить Vray или Corona Renderer. Это специальные плагины, которые помогут создать более реалистичный свет в сцене.

На прошлых уроках, для наложения текстур на объекты сцены, мы использовали набор встроенных в 3Ds-Max текстур (плитка, дерево) или применяли заливку цветом с определёнными эффектами. При разработке дизайнерских проектов, будь то дизайн комнаты или новейшего автомобиля, желательно применять к элементам проекта те материалы, которые будут использоваться при реализации проекта. Например, цвет и рисунок штор, ковров, обивки стульев и диванов, изображения на картинах висящих на стенах, материалы стен и тому подобное. 3Ds-Max позволяет загружать пользовательские текстуры (картинки, фотографии) в редактор материалов. Рассмотрим простой пример текстурирования стен помещения. Для этого следует создать небольшую сцену состоящую из пола и двух стен.


Желательно поставить на сцену источник света и настроить его яркость и тени, так как мы делали на прошлых уроках.
Для покрытия стен обоями (например, сфотографированными в магазине) воспользуемся загрузкой в редактор материалов нашей фотографии с текстурой обоев. В нашем случае можно использовать любую фотографию (картинку) в стандартных форматах файла: bmp, jpg, jpeg, gif и тому подобных. Текстуры можно нарисовать самому в редакторе Paint или Photo Shop или скачать в Интернете, подобрав себе ту, которая наиболее подходит к проекту. Например, такую:


Важно, что бы картинки текстур хранились в одной папке (каталоге на диске) вместе с проектом. Это нужно для того, что бы можно было переносить проект с одного компьютера на другой. Откроем редактор материалов (буква М латинская на клавиатуре) и, нажав, пустую кнопку напротив поля Diffuse, в появившемся списке материалов (Material/Map Browser) выберем пункт Bitmap (битовая карта):


Двойным щелчком мыши на этой опции или нажав кнопку ОК, перейдём в менеджер файлов, где нужно выбрать папку с вашим проектом и файлом текстуры:


И нажав кнопку "Открыть" поместим выбранный рисунок в текущий контейнер. Назначим полученный материал на одну из стен. Для этого следует выделить стену и нажать кнопку Assign Material to Selection Если материал не отобразился на объекте, то следует нажать кнопку Show Map in Viewport. В итоге получим изображение текстурной карты на стене.


Как видно из рисунка, 3Ds-Max автоматически подогнал нашу карту под размер стены. Для того, что бы расположить на стене, например 10 листов обоев по 8 рисунков на листе, следует в счётчике Tiling поля U ввести значение 10, а в поле V ввести значение 8.


У такого метода наложения текстур есть один недостаток. Текстура накладывается на всю поверхность куба стены, то есть, с обратной стороны стены тоже будет рисунок обоев.


Если такое расположение текстуры недопустимо, то следует преобразовать объект в редактируемый каркас и, выделив нужную поверхность применить текстуру только к выделенной поверхности. Проделаем это со второй стеной. Выделим вторую стену и нажмём правую кнопку мыши. В локальном меню выберем опцию Convert to / Convert to Editable Mesh


Перейдем на закладку Modify (модификация). На закладке следует выбрать выделитель Polygon и выделить фронтальную поверхность на второй стене.


Так же, как и в случае с первой стеной, назначим материал на вторую стену, но уже на выделенную её часть. Теперь материал назначен только на фронтальную часть стены.


Теперь, когда материалы на стены назначены, выясняется ещё одно неприятное обстоятельство. Всё дело в том, что ширина у стен разная, а количество листов обоев на стенах одинаковое. При этом ширина обоев на более широкой стене шире, чем на более узкой. То есть мы не можем независимо, для каждой стены отдельно, поменять значения счётчика Tiling поля U. В 3Ds-Max есть возможность независимо применять один и тот же материал для разных объектов. Эта возможность заключается в том, что к объекту применяется UVW карта, а к карте уже применяется материал. Для применения UVW карты, например на фронтальную стену следует снова выделить фронтальную поверхность стены и в разделе модификаторов, из списка, выбрать UVW Map.


Применив UVW Map к стене, следует выбрать опцию Box для настройки отображения карты на стене.


Теперь, счётчиком Width можно установить число полос обоев в зависимости от ширины стены. Если нужно, то можно поменять и значение Height - число повторений рисунка на обоях.
Таким образом, можно применять пользовательские битовые карты практически к любым объектам сцены. В заключение, применим пользовательскую битовую карту к полу, например такую:


Загрузим карту в контейнер материала и применим её к полу. К назначенным битовым картам можно применять различные эффекты, например зеркальность. Для перехода к начальным настройкам редактора материалов следует нажать кнопку Go to Parent.


Зайдя в раздел Maps, следует выбрать опцию Reflection и применить эффект Raytrace (Это мы уже проделывали на предыдущих уроках). В результате получим качественное изображение пола.

Читайте также: