Понедельник, 23 Мая 2022, 00:00

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: beril  
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Как отключить текстуру по скрипту (РЕШЕНО)
Как отключить текстуру по скрипту
DantorSДата: Вторник, 04 Марта 2014, 12:52 | Сообщение # 1
заслуженный участник
Сейчас нет на сайте
Допустим в сцене есть 99 3d моделей. Эти 3d модели имеют различные материалы. Как сделать чтобы по скрипту отключалась определенная текстура. Например только normal map. Неужели на все 99 моделей нужно вешать отдельный скрипт
(
If кнопка нажата = normal map модели 01 off
If кнопка нажата = normal map модели 02 off
И т.д.
)


Сообщение отредактировал DantorS - Среда, 05 Марта 2014, 18:37
lakorisДата: Вторник, 04 Марта 2014, 14:58 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
Думаю, можно сделать что-то вроде:
var allModels = GameObject.FindGameObjectsWithTag("YourTag").GetComponent<Тут берешь компонент материал, или что-то другое>();
allModels.нормал мап.setActive(false);

или что-то с массивом придумать
DantorSДата: Вторник, 04 Марта 2014, 16:07 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
Я немного не понял код: я должен впихивать GameObject.FindGameObjectsWithTag("YourTag") в каждый материал? Как обозначать что мне нужно выключить именно normal map? Тэг же должен обозначатся в шейдере (т.е. там где описывается normal map)
lakorisДата: Вторник, 04 Марта 2014, 17:32 | Сообщение # 4
постоянный участник
Сейчас нет на сайте
На все эти 99 объектов накинь тег. И по тегу ищи эти объхекты, бери их компонент Материал и изменяй.
DantorSДата: Вторник, 04 Марта 2014, 18:20 | Сообщение # 5
заслуженный участник
Сейчас нет на сайте
Цитата DantorS ()
Как обозначать что мне нужно выключить именно normal map? Тэг же должен обозначатся в шейдере (т.е. там где описывается normal map)

Вопрос тотже


Сообщение отредактировал DantorS - Вторник, 04 Марта 2014, 18:21
zaicev9797Дата: Вторник, 04 Марта 2014, 18:30 | Сообщение # 6
AbRaKaDaBrA
Сейчас нет на сайте
написать скрипт в котором будет две переменные - материалы

public Material MatB;
public Material MatNB;

первый мат. забампленный, второй не забампленный, при необходимости менять renderer.material на тот материал который нужен.

renderer.material = MatB;
или
renderer.material = MatNB;

и в шейдер лезть не надо


проект Mysterious Space. The losted moment
DantorSДата: Вторник, 04 Марта 2014, 18:41 | Сообщение # 7
заслуженный участник
Сейчас нет на сайте
И на 99 моделей будет 188 материалов. А если я решу отключить несколько текстур? Сколько материалов придется создавать? Нет это - не вариант.
zaicev9797Дата: Вторник, 04 Марта 2014, 18:54 | Сообщение # 8
AbRaKaDaBrA
Сейчас нет на сайте
в таком случае попробуй так

public Material mat;
public Shader B;
public Shader NB;

void Update()
{
mat.shader = B;
или
mat.shader = NB;
}

переменные B и NB можно назначать из одного главного скрипта, т.е. в итоге получается тебе просто нужно в главном обьекте - скрипте указать все шейдеры которые будут меняться и менять шейдер объектам с разными тегами (то есть уже даже не всем сразу, а только тем которым надо, или в зависимости от расстояния, тут уже как тебе нужно)


проект Mysterious Space. The losted moment
DantorSДата: Вторник, 04 Марта 2014, 19:27 | Сообщение # 9
заслуженный участник
Сейчас нет на сайте
zaicev9797, Как я понял ты здесь написал примерно тоже самое что и в предыдущем своем сообщении. Сейчас как я понял ты меняешь уже не материал, а шейдер. Я же вроде сказал что такой вариант не подходит.
White9Дата: Вторник, 04 Марта 2014, 20:30 | Сообщение # 10
заслуженный участник
Сейчас нет на сайте
DantorS, мне кажется zaicev9797 прав - других тривиальных вариантов нет. Да и unity на определённом расстоянии от камеры сам ухудшает качество текстур, так что проблемы почти не вижу )
Цитата DantorS ()
И на 99 моделей будет 188 материалов. А если я решу отключить несколько текстур? Сколько материалов придется создавать? Нет это - не вариант.

Не понял это предложение


Сообщение отредактировал White9 - Вторник, 04 Марта 2014, 20:33
DantorSДата: Вторник, 04 Марта 2014, 21:17 | Сообщение # 11
заслуженный участник
Сейчас нет на сайте
Ладно что на самом деле нужно. Нашел шейдер с поддержкой подповерхностнового рассеивания (SSS, traclucensy map). В целях оптимизации хочу чтобы пользователь моего проета имел возможность отключить эту текстуру. Ведь если делать тесселяцию она сама (наверное, незнаю точно) отключаестя у пользователей не имеющих доступ к directX 11.
Цитата White9 ()
Не понял это предложение

Что не понятного, zaicev9797 предложил такой вариант: использывать несколько материалов/шейдеров и переключаться между ними.
White9Дата: Среда, 05 Марта 2014, 00:53 | Сообщение # 12
заслуженный участник
Сейчас нет на сайте
Цитата DantorS ()
Что не понятного, zaicev9797 предложил такой вариант: использывать несколько материалов/шейдеров и переключаться между ними.

Так это логично, мне непонятно как ты насчитал 188 материалов )) Ведь материала, по сути, только два и то они попеременно включаются/выключаются
DantorSДата: Среда, 05 Марта 2014, 00:54 | Сообщение # 13
заслуженный участник
Сейчас нет на сайте
Это самый простой путь. Не самый лучший. Посмотри вариант lacoris-a
lakorisДата: Среда, 05 Марта 2014, 02:06 | Сообщение # 14
постоянный участник
Сейчас нет на сайте
DantorS, зачем ЕМУ смотреть? Надо то ж тебе..
DantorSДата: Среда, 05 Марта 2014, 08:13 | Сообщение # 15
заслуженный участник
Сейчас нет на сайте
Чтобы убедиться что его вариант не самый лучший вариант. А что насчет твоего варианта? Как указать что нужно отключить именно normal map, а не весь материал?
Storm54Дата: Среда, 05 Марта 2014, 10:24 | Сообщение # 16
постоянный участник
Сейчас нет на сайте
Может просто создать несколько материалов: Один только с дифуз, другой еще и с нормал мап. И подменять эти материалы.
DantorSДата: Среда, 05 Марта 2014, 12:16 | Сообщение # 17
заслуженный участник
Сейчас нет на сайте
Цитата Storm54 ()
Может просто создать несколько материалов: Один только с дифуз, другой еще и с нормал мап. И подменять эти материалы.

Тоже самое в этой теме сказали уже двое человек
Цитата White9 ()
Ведь материала, по сути, только два и то они попеременно включаются/выключаются

Цитата zaicev9797 ()
написать скрипт в котором будет две переменные - материалы

public Material MatB;
public Material MatNB;

первый мат. забампленный, второй не забампленный, при необходимости менять renderer.material на тот материал который нужен.
PoqXertДата: Среда, 05 Марта 2014, 15:55 | Сообщение # 18
постоянный участник
Сейчас нет на сайте
Перед началом демагогии вы справку читали?
Очень сомневаюсь. Иначе бы вы нашли это.


Расширения для Unity3D
Блог программиста - PoqXert.ru
White9Дата: Среда, 05 Марта 2014, 16:22 | Сообщение # 19
заслуженный участник
Сейчас нет на сайте
PoqXert, эм... Разве это поменяет текстуру не на всех объектах с данным материалом, независимо от расстояния до камеры?
PoqXertДата: Среда, 05 Марта 2014, 16:38 | Сообщение # 20
постоянный участник
Сейчас нет на сайте
White9, ТС про расстояние до камеры что-то говорил?

Расширения для Unity3D
Блог программиста - PoqXert.ru
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Как отключить текстуру по скрипту (РЕШЕНО)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2022 Рейтинг