Предрасчёт рейкаста для эффективного рендеринга травы и меха (комментарии)
Это сообщение сгенерировано автоматически.
Устал писать, поэтому наверняка где-то накосячил. Просьба написать, что не понятно, что нужно пояснить, что исправить и добавить.
спасибо за статью!
не ожидал, что еще и шевелится будет. это наборы анимированных фреймов предрасчитанных для О(1) выборок текстур? статью пока не читал
*Lain*
предрассчитанная текстура одна. анимация в коде, который её использует.
Хмм... XYZ-нормаль нужна только для травинок с бампом?
Но даже в этом случае польза сомнительная, ибо нет зависимости от Z.
А для гладких травинок 2D нормаль можно представить в виде угла отклонения от направления взгляда и запаковать всю lookup-текстуру в RG вместо RGBA.
}:+()___ [Smile]
во-первых, травинки вертикальны и параллельны только в базовой версии алгоритма. в случае, если по ходу луча их двигать, это создаёт эффект наклонённых в разные стороны травинок с ненулевой z-координатой нормали. на самом деле я пробовал запекать в RG, это тоже имеет смысл для некоторых типов геометрии вроде меха, но для спутанной травы лучше хранить Z-координату в явном виде. а аппаратного формата с тремя компонентами всё равно нет, поэтому храню 4. но эти микрооптимизации на самом деле не принципиальны, там гораздо интереснее, как обходить ограничения алгоритма на паралелльные волокна, например.
Каеф. Интересно было бы глянуть под острым углом)
Здорово выглядит, но до конца я так и не понял ::)
Трава, я так понял, получается исключительно примятая.
Suslik
> По третьей размерности (количество углов) можно брать от 8 до 64 в зависимости от применения. Я обычно использу текстуры 64х64х8.
Неужели 8 углов реально хватает? На видео сколько у тебя углов используется?
> Здесь также меняется толщина волокон — чем дальше мы идём по лучу, тем толще делаются волокна
Каким образом ты делаешь волокна толще? Насколько я понял ты реймаршишь по слоям, в каждом слое за одну выборку определяешь точку пересечения. Но как можно сделать волокна толще, если у тебя одна предрассчитанная карта? Или у тебя там их несколько?
MrShoor
> Неужели 8 углов реально хватает? На видео сколько у тебя углов используется?
я не помню, около 8. там суть в том, что когда два слоя по углам интерполируются, это выглядит как один слой, сменяемый другим. это может выглядеть практически незаметно, если не вглядываться в упор, а увеличение разрешения может наоборот участить этот процесс и сделать его более заметным. короче, там надо много экспериментировать, чтобы найти оптимальное разрешение и оно вовсе не всегда окажется максимальным.
MrShoor
> Каким образом ты делаешь волокна толще? Насколько я понял ты реймаршишь по
> слоям, в каждом слое за одну выборку определяешь точку пересечения. Но как
> можно сделать волокна толще, если у тебя одна предрассчитанная карта? Или у
> тебя там их несколько?
карта одна. но чем дальше проходишь по лучу, тем больше увеличиваешь радиус всех волокон. это создаёт иллюзию утолщающихся к основанию травинок, хоть и не является честным рассчётом.
foxes
> Трава, я так понял, получается исключительно примятая.
вовсе нет. просто некоторые артефакты, которые появляются при применении не совсем честных техник вроде утолщения травинок, наиболее очевидны при взгляде параллельно волокнам, поэтому я их на том видео скрыл, положив траву под углом. если подобных хаков не использовать, выглядит корректно под любым углом.
Suslik
> карта одна. но чем дальше проходишь по лучу, тем больше увеличиваешь радиус
> всех волокон.
Но как ты этот радиус увеличиваешь? Вот у тебя 3д текстура, в которой ты по xy координатам и углу в z получаешь расстояние на луче до пересечения. Но ведь уменьшить расстояние по лучу - не достаточно. При увеличении радиуса у тебя может образоваться новое пересечение. Вот пример:
Если чуть-чуть увеличить радиус у препятствий, то луч начнет пересекать то, что раньше не пересекал. Как этот момент обходится?
Демка будет?
Тема в архиве.