Почему на моей модели не горит непрерывный свет?

9

Я создал базовую текстурированную модель куба в Blender для практики моделирования, а затем импортировал ее в Unity. После того, как я включил немного освещения, это выглядит довольно уродливо. Свет не является непрерывным на ряду текстурированных кубов:

введите описание изображения здесь

Что еще более странно, свет на блоках, составляющих пол , непрерывен. Что я делаю неправильно?

Вот как это выглядит без текстур:

введите описание изображения здесь

Если бы я не знал, что это идеальные кубики, я бы сказал, что на поверхности есть небольшая кривая. Я также попытался осветлить текстуру, но это также не помогло:

https://dl.dropbox.com/u/45620018/lighter%20texture.PNG

Я просто экспортировал модель из Blender и не устанавливал никаких нормалей или подобных вещей. Однако я также не сделал ничего особенного с моделью напольного кирпича.

Проверил нормали, и они, кажется, указывают в правильном направлении.

введите описание изображения здесь

Также я не вижу разницы между двумя моделями. На панели текстур я также установил плоскую проекцию:

введите описание изображения здесь

Я проверил различные панели в Blender, и единственная опция, связанная с нормальным режимом на панели «Данные объекта», это «Автоматическое сглаживание», и по умолчанию она отключена:

введите описание изображения здесь

nosferat
источник
Работает ли это правильно, если вы отключите текстурирование?
Msell

Ответы:

7

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

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

Кевин Рид
источник
2
Вы были правы, я должен был сказать Блендеру сделать края острыми. Я мог бы добиться этого с модификатором EdgeSplit. ( wiki.blender.org/index.php/Doc:2.4/Manual/Modifiers/Generate/… )
nosferat
Вы можете просто выбрать все грани в Blender и назначить им «Плоское» затенение через левое меню (то, которое активируется «T»). Или, в Unity, вы можете выбрать верхнюю часть вашей иерархии импорта Blender, выбрать расчет нормалей (вместо импорта), а затем выбрать угол сглаживания (выбрав что-то вроде 60, вы получите желаемый эффект). Я не думаю, что это действительно нормальная проблема, нормальные нормальные, иначе вы бы ничего не увидели в Unity (или в Blender, если бы включили выборку задних частей).
Shivan Dragon
4

Несколько предложений относительно того, в чем может быть проблема:

а) Вы проверили, все ли нормали лица сетки направлены в правильном направлении? Это довольно просто сделать это в Blender)

б) Вы применили правильное УФ-картирование? Unity экспортирует все данные текстуры в зависимости от того, как вы настроили Blender. Посмотрите на панель «Текстура» в Blender, особенно на панель «Отображение» в разделе «Текстуры» (в идеале она должна быть настроена на UV.

(PS Какова здесь политика в отношении вложений или публикации ссылок на файлы проекта, скажем, ссылка Dropbox или Google Drive в вопросе? Это должно быть так просто исправить, если я смогу просто просмотреть все файлы.)

balajeerc
источник
2
Чтобы ответить на вопрос вложения, в Stack Exchange внешние ссылки на файлы для отдельных вопросов не являются предпочтительными, поскольку они, как правило, исчезают. Изображения должны быть загружены на наш собственный хостинг (через кнопку загрузки в редакторе), чтобы команда SE могла убедиться, что они остаются. Нет особой поддержки не изображений (например, файлов Blender для этого вопроса), но лучше найти альтернативы, так как это больше напоминает «пожалуйста, отладьте мой очень большой код», что вряд ли будет полезным для всех, кроме оригинальный аскер, вопреки целям SE.
Кевин Рейд