Как написать шейдер для управления матрицей пикселей?

Общие вопросы о Unity3D

Как написать шейдер для управления матрицей пикселей?

Сообщение iNji555 01 июл 2020, 14:17

Здравствуйте. Такой вопрос. Мне нужно разбить экран на определенное количество пикселей, например 480х270, и управлять из кода каждым из них.

Сейчас я это делаю через спарйт, который растянут на весь экран в канвасе.
Управляю яркостью зеленого в конкретном пикселе, заранее подготавливая этот параметр в массиве Mas[,]
Синтаксис:
Используется csharp
// Start ---
texture = new Texture2D(winW, winH);
sprite = Sprite.Create(texture, new Rect(0, 0, winW, winH), Vector2.zero);
Pole.GetComponent<Image>().sprite = sprite;

// Update ---
for (int x = 0; x < winW; x++)
    for (int y = 0; y < winH; y++)
        texture.SetPixel(x, y, new Color(0, Mas[x, y], 0, 1));
 


Жрет это хозяйство треть процессора.
Когда еще только искал возможность делать так, мне говорили, что лучше делать это через шейдер, потому что через спрайт будет очень ресурсоемко.
Но никто не знает как это сделать через шейдер.
Посмотрел неколько видео, полистал статейки, не нашел ничего к чему можно зацепиться, непонятно там ВСЁ.

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

Памагити.
iNji555
UNец
 
Сообщения: 15
Зарегистрирован: 07 фев 2020, 21:40

Re: Как написать шейдер для управления матрицей пикселей?

Сообщение jetyb 03 июл 2020, 08:03

1. Тут же самое интересное место не передача массива в текстуру, а изменение этого массива. Как Mas меняется? Изменения же надо проводить в шейдере на видеокарте.
2. делать попиксельно texture.SetPixel очень затратно, быстрее texture.SetPixels (и texute.Apply() в самом конце написать).
jetyb
Адепт
 
Сообщения: 1486
Зарегистрирован: 31 окт 2011, 17:21

Re: Как написать шейдер для управления матрицей пикселей?

Сообщение Tolking 03 июл 2020, 13:15

Зачем каждый раз менять все пиксели текстуры? Зачем делать это каждый кадр?
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2715
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Как написать шейдер для управления матрицей пикселей?

Сообщение iNji555 04 июл 2020, 18:38

1. Тут же самое интересное место не передача массива в текстуру, а изменение этого массива. Как Mas меняется? Изменения же надо проводить в шейдере на видеокарте.
2. делать попиксельно texture.SetPixel очень затратно, быстрее texture.SetPixels (и texute.Apply() в самом конце написать).


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

texute.Apply() - Там и так делается после всех for, не в них.

Зачем каждый раз менять все пиксели текстуры? Зачем делать это каждый кадр?


В моем случае в этом есть прямая необходимость.
iNji555
UNец
 
Сообщения: 15
Зарегистрирован: 07 фев 2020, 21:40


Вернуться в Общие вопросы

Кто сейчас на конференции

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