Комментарии 27
На конференции был один социолог, который написал работу, чтобы ее прочитали все мы — он написал ее предварительно. Я начал читать эту дьявольщину, и мои глаза просто полезли из орбит: я ни черта не мог в ней понять! Я подумал, что причина в том, что я не прочел ни одной книги из предложенного списка. Меня не отпускало это неприятное ощущение «своей неадекватности», до тех пор пока я, наконец, не сказал себе: «Я остановлюсь и прочитаю одно предложение медленно, чтобы понять, что, черт возьми, оно значит».
Итак, я остановился — наугад — и прочитал следующее предложение очень внимательно. Я сейчас не помню его точно, но это было что-то вроде: «Индивидуальный член социального общества часто получает информацию чрез визуальные, символические каналы». Я долго с ним мучился, но все-таки перевел. Знаете что это означает? «Люди читают».
А тут вот прочитал — и все понял! Супер! Спасибо большое за перевод!
Интересно, а сжать можно? Скажем так:
Пиксельный шейдер — это функция от одной или нескольких текстур и координат, возвращающая пиксель в тех же координатах. Её выполнение можно распараллелить, что позволит получить готовую текстуру за меньшее время.
Давно уже, во времена флэша 11.5, участвовал в соревновании по процедурной генерации планет, результат ещё живой вот тут: http://www.fastswf.com/cugeu_M. Написан на PixelBender (потому как в то время была "нативная" поддержка его шейдеров внутри Flash) на подобном GLSL языке. Там и бампмэппинг был, и натягивание совы на глобус двухмерной текстуры на круг, и псевдо-трехмерное освещение. Интерфейс — кликнуть мышкой для создания новой планеты, водить мышкой для поворота. Предупреждение: в версии 11.8 Adobe убил поддержку JIT для шейдеров Pixel Bender, из-за чего FPS упал до нуля. Лучше всего скачать (весит 10 Кб) и запустить в standalone-плеере 11.5.
//By "up" direction of our normal map has the value (0.5,0.5,1.0) in terms of rgb
//So we offset by that amount
normalVector.x -= 0.5;
normalVector.y -= 0.5;
Вроде каноничней:
normalVector = 2.0 * normalVector - 1.0;
А то из-за этого у варианта в статье и чёрного цвета не возникает с противоположной от источника стороны.
Если говорить о чисто чёрно-белом изображении, то можно так: вычислить M, как в предыдущем варианте, затем, если М больше некоего порогового значения (например, 0.5), то делаем точку белой, иначе — чёрной. Пороговое значение можно варьировать, получая разные результаты.
К сожалению я тоже пытался реализовать именно с помощью среднего значения, но результат получался не таким уж и хорошим. Я наткнулся на представление цвета в теликах. Там используются коэфициенты, а не среднее арифметическое.
Но в любом случае спасибо за замечание.
Там используются коэфициенты, а не среднее арифметическое.
Я использую (3R+6G+B)/10 — очень близко к общепринятым, при этом легко запоминается и хорошо записывается, а разницу в 1% глазом все-равно не заметить
Нпример так:
gl_FragColor = vec4(1.0, floor(pos.x + 0.5), pos.y, 1.0);
Задача: Сможете ли вы сделать одну часть экрана красной, а другую синей? (Если не получится, то на следующем шаге я дам подсказку!)
Задача: Попробуйте разделить экран на четыре равных части разных цветов.
Даже подсказки не помогли)
Спасибо за ответ, попробую разобраться :)
Но ведь можно проще: color = lerp(color1, color2, step(pos.x, 0.5))
Перевод: Блог разработчиков NVidia, июнь 2016, объявлен конкурс Shadertoy Contest 2016
Столько лет а только 900+ работ. Некоторые возможно созданы одним автором. Неужели на всю планету едвали тысяча разработчиков наберется, которые умеют это делать. Я не умею, но перепрограммировать свою задумку получилось с огромной помощью других. Я вроде немного разобрался, но мне кажется это мой предел.
Создание шейдеров