All streams
Search
Write a publication
Pull to refresh
71
0
Dzmitry Malyshau @kvark

User

Send message
Вот это тоже повеселило:
o.Normal = lerp(fixed3(0.5,0.5,1), n1, clamp(splat_control.r + 0.3,0,1));
Нормаль — это единичный вектор перпендикулярный к поверхности. И так как нам нужно ее плавно уменьшать, мы не можем просто умножать ее на какой-то коэффициент. Для решения этой задачи я интерполирую текущую нормаль в т.н. «нулевую нормаль», при которой на текстуре не будет никакого рельефа.

Ваша «нулевая нормаль» мало того что не «нулевая», так даже и не единичная :) Должно быть (0,0,1). И впредь, если копируете чужой код — ссылайтесь на него в комментариях к коду, а то все будут думать, что это вы свой код не понимаете.

Насколько я знаю далее оно в недрах ShaderLab нормализуется.

Это возможно, но не имело бы смысла, ибо вредит производительности. UnpackNormal точно возвращает единичную нормаль (в пространстве TBN), так что тратить целую инструкцию нормализации «на всякий случай» никто не будет.

Функция расчета тангенса взята из другого шейдера ландшафта и прекрасно работает

Ага, и следующий, кто скопирует Ваш код, тоже будет так писать. Тяп-ляп, copy-paste, и вуаля — работает! Это не подход в 3D-графике, и уж тем более не для тех, кто выставляет свой код на суд общественности.
Я вижу, что тангенс неверный, и даже могу объяснить выбор (1,0,1) вместо, скажем (1,0,0). Просто при (1,0,0) высока вероятность совпасть с нормалью, на чём код успешно рухнет (или произведёт на свет NaN и Inf значения). Естественно, (1,0,1) от этого тоже ничего не защитит, просто вероятность меньше :) Это то же самое, что объяснять, почему самоубийцы прыгают с крыши высоких домов, а не низких: логика есть, но в целом подход неверный (лучше совсем не самоубиваться).

Договориться с дизайнером о чем? Мех в данном случае строит юнити.

Значит нужно понять, куда у меха Unity направлена U координата.

Зачем писать про шум если вы не знакомы с юнити и тем более не видели шейдер в работе?

То есть по Вашему, раз песочек сверкает при повороте камеры, то шейдер работает? Я делаю суждения из кода и скринов, которые Вы предоставили. Ваша карта нормалей — классический шум нормалей (песок), так что, конечно, на её ориентацию можно забить. Вот если бы показали что-либо вменяемое — там и посмотрели бы.
Несколько вопросов/замечаний:
o.Normal += lerp(fixed3(0.5,0.5,1), n2, clamp(splat_control.b + 0.3,0,1));

А нормализовывать её мы не будем? Если UnpackNormal — функция Unity, то она почти наверняка возвращает единичную нормаль, а значит и «o.Normal» от нас ждут единичной.

// A general tangent estimation
fixed3 T1 = float3(1, 0, 1);
fixed3 Bi = cross(T1, v.normal);
fixed3 newTangent = normalize(cross(v.normal, Bi));

В каком пространстве всё это считается: объектном или мировом?
Почему в качестве опорного тангенса выбран (1,0,1)? По идее, раз Unity этой информации не предоставляет, то Вам нужна какая-то договорённость с дизайнером. Скажем, U направлена по мировой/локальной оси X, или что-то в этом духе. Эта договорённость и определяет опорный тангенс. Не верю, что вы договорились до (1,0,1) ну никак:)

Альтернативно, Вы можете вывести тангенс и битангенс из pixel derivatives, если Unity позволит Вам:
1. Подставить тангенс уже в пиксельном шейдере (чего уж там, можно и UnpackNormal самому переписать).
2. Использовать инструкции dFdx, dFdy (в терминологии GL). Уверен, что не все устройста, на которых работает Unity, эти инструкции поддерживают.

В общем, получается, что нормали произвольной длины и в неконтролируемо-повёрнутом пространстве. Разве что для шума годятся, не более…
Следующая статья автора — стартап по ритуальным услугам: погребение программ в болванках, сожжение распечатанного исходного кода, мумификация на магнитую ленту.

В перспективе — освобождение алгоритмического духа путём транслирования кода на радио-волне в направлении Альфа Центавры, где духи программ обретают свой покой.
Git: 7 April 2005
Mercurial: 19 April 2005
Если бы он набирал темп быстрее Git, мы бы это уже давно заметили.
Тогда уже на Raspberry Pi :)
Да, забавно получилось… Сайт для заброшенных проектов сам пополнил их ряды :) Там для него, между прочим, изначально место полагалось.
Против GoogleCode и, тем более, Mercurial я ничего не имею — сам использую эту связку для своих проектов. Но вот проблема sourceforge, как помнится, была в рекламе. GitHub же не идёт тем путём, так что и будущее у него будет светлее.
Хоронить проекты в коробке под кроватью — слишком жестоко. Свою аналогичную проблему я решил, выложив проекты с кодом на специальном сайте (kvatom.com). База там, конечно, далеко не полная (обещаю, обещаю!), но видеть своё добро доступным приятнее :)
Задача WebGL — обеспечить максимальную доступность к OpenGL функциональности. Если бы они выбрали desktop OpenGL, то все мобильные устройства были бы недосягаемы. Фактически, OpenGL ES 2.0 — это идеальный вариант для Web'а. Только вот обновился бы по-быстрее :)
Так как WebGL базируется на GLES, эта технология значительно уступает OpenGL: в ней нет множества удобных расширений (ARB и т.п.), нет встроенной поддержки освещения, да даже GL_QUADS в ней не поддерживаются…

Не заблуждайте читателей! WebGL предоставляет функционал подмножества OpenGL ES 2.0. Расширения там тоже есть, просто их не так много, и отсутствие ARB префиксов никакой связи с функциональностью не имеет.

«Встроенной поддержки освещения» нету и в Core Profile OpenGL (3.0+) — это который НЕ устаревший, в отличие от Compatibility Profile, где есть стандартные функции освещения. И «даже» GL_QUADS в Core Profile тоже нету — это показывает, что никому эти примитивы не нужны.

Несомненно, GL ES 2.0 на сегодняшний день остаёт от настольного GL. Для меня это прежде всего отсутствие MRT (отрисовка в несколько плоскостей одновременно). Стоит также заметить, что GL ES 3.0 уже на подходе, так что будем надеяться, что WebGL скоро обновят.
Упс.., это и было переведено. Просто меня 32-ядерность смутила совсем. Прошу прощения.
The Deep Blue computer was a 32-node IBM RS/6000® SP high-performance computer, which used IBM POWER2 Super Chip processors, the single-chip implementation of the POWER2 processor. Each node employed a single microchannel card containing eight dedicated VLSI chess processors, for a total of 256 processors working in tandem. The Deep Blue programming code was written in C and ran under the IBM AIX® operating system.
Совсем не 32-ядерный он. Это кластер из 32-компьютеров, в каждом по 8 процессоров, своя память, IO, etc.
Учитывая повальную технологическую безграмотность, царствующую на просторах интернета (пробовали проверять правописание по количеству найденных гуглом страниц?), позволять большинству определять ключевые понятия — идея сомнительная.

Лучше почитайте, что знающие люди говорят. К примеру, утверждает ли сам Линус, что он написал именно ОС, а не ядро? Столлмэн упорно взывает называть вещи своими именами, не забывая приписывать GNU/ ко всему, что его использует. И если Linux — ОС, то почему я невижу этого имени в Debian GNU/Hurd и Arch Hurd, которые на 90% состоят из «того же материала»?
С первой книгой неприятных моментов, вообще говоря, у меня вообще не было :)
А со второй — небольшие конфликты с редакторами, в частности по языку, оставившие неприятный осадок.
А какие неприятные моменты были у Вас? Поделитесь тоже.
Из вики:
It is case-sensitive and capable of being used on floppy, hard disks and read-only media such as CD-ROMs
Судя по всему, ничего не мешает резервному копированию.
Хронология:
Апрель 2011 — proposal accepted
Июль 2011 — paper deadline
Ноябрь 2011 — article proofs
Февраль 2012 — publication
Самое неприятное:
Критика моего знания пунктуации и граматики.
Инструменты:
MiKTeX, LaTeX Lab, Google Docs для рисунков
Эти 5% издатели оценивают как 5000 USD.
В настоящий момент, когда Dart переводится в JS, на производительность надеяться не стоит. Проверка типов там выдает только предупреждения, и авторы, насколько мне известно, не собираются использовать эту информацию для оптимизации. Dart просто позволяет легче поддерживать код, да и вообще у меня нездоровое отношение к молодым языкам («движок» по ссылке был вообще написан на Boo).
Да, всего только нужно — договориться с производителем этих железяк (Lenovo?), добавить необходимые драйвера да подлатать дыры в надёжности — и моя бабушка будет счастливой обладательницей Haiku.
Осталось только найти богатого и влиятельного спонсора для осуществления всего этого…
Haiku написана на С++ и предоставляет объектно-ориентированный С++ интерфейс. Можно много спорить, как это лучше или хуже стандартных C API, но это как минимум смелая попытка сделать шаг вперёд. Подробнее на вики.

Information

Rating
Does not participate
Location
Toronto, Ontario, Канада
Date of birth
Registered
Activity