два хэша в ожидании манго
@Zeux:
Коротко о С++.
Я тут попробовал в UE4 импортнуть меш на 500к треугольников и импорт занимает 5 минут
Я немножко расстроился и спросил людей в теме, как так?
5 минут это по таймеру а не фигура речи
Они говорят, дык, выключи adjacency buffer, все знают
Выключаешь генерацию adjacency buffer (это спец. индекс буфер для тесселяции), и таки да, секунд 5 импорт.
Решил почитать код, там используется библиотека nvtess которой вроде кроме как в UE нету нигде. Внутри какой-то стандартный код. Поиск соседних треугольников, хеш мепа кастомная, хеш на позицию. Ну ок.
Посмотрел повнимательнее, и нашел.
// source/ThirdParty/nvtesslib/inc/nvtess.h:327
inline size_t hash_value(const Vector3& v3)
{
#if PLATFORM_MAC || PLATFORM_LINUX
return 31337 * std::hash<float>()(v3.x) + 13 * std::hash<float>()(v3.y) + 3 * std::hash<float>()(v3.z);
#else
return 31337 * stdext::hash_value(v3.x) + 13 * stdext::hash_value(v3.y) + 3 * stdext::hash_value(v3.z);
#endif
}
template <class _Kty>
inline size_t hash_value(const _Kty& _Keyval) { // hash _Keyval to size_t value one-to-one
return (size_t) _Keyval ^ (size_t) 0xdeadbeef;
}
Второй кусочек кода из стандартной библиотеки мсвц. В файлике сверху #error deprecated - don’t use this, но есть дефайн который эпики ставят чтобы скомпилировать и использовать stdext хеш мепы.
Ну и понятно когда позиции меньше 1 то их всех сплющивает в хеш 0
Говорят, починят.
Самая радость в том что оригинальная nvtess реализация написана в 2010 и всегда использовала stdext (и не собиралась кроме как MSVC), std::hash это эпики добавили позже
То есть этот код натурально всегда сваливался в N^2. Они даже кастомную хеш таблицу написали для скорости (наверное со стандартной N^2 кеш миссов это не очень быстро даже на среднего размера мешах).
.
@sim0nsays:
Коллективная стрельба в ноги
@aruslan:
интересно почему включили для мака и линукса, но не включили для windows.
хэш-функция с плавающей точкой помогает, кстати?
@Zeux:
Потому что включили чтобы код компилировался
А не чтобы быстро работал
И да, в std::hash более или менее нормальный хешер который байты скармливает FNV (кроме минус нуля и нуля понятно).
Не то чтобы пик инженерной мысли но не квадрат хоть в итоге
@aruslan:
я на прошлой неделе посвятил какое-то время изучению жизни и повадок “игуан настоящих, обыкновенных”, вот этих:
очень гибкие, сильные, смышлёные и исключительно быстрые животные.
они обычно спят до вечера, пока не начинает спадать жара, и потом спускаются и выползают взводом на траву, чтобы занять места согласно боевому расписанию.
те которых я изучал эшелонировались под развесистым манговым деревом.
бывали вязкие, маркесовские длинные вечера, когда ни одного плода манго с дерева не падало, и игуаны лениво провожали прохожих тяжелым взглядом, не поворачивая голов.
головы у всех смотрели строго по направлению к заходящему солнцу, и этим они очень напоминали частично ожившие подсолнухи с шипами, что прилегли отдохнуть.
но иногда с дерева прилетало спелое манго, и тогда братва медленно к нему подползала, и неторопливо, без спешки, соблюдая иерархию и социальные нормы, его сжирала, обычно в парах, чтобы удобнее было разрывать большие куски.
необходимо отметить, что манговых деревьев вокруг росло очень много. собственно, кроме манговых деревьев и кокосовых пальм изредка встречались ещё только папайи и какой-то непонятный фрукт, который Google Lens не опознал.
но это изобилие слабо волновало взвод игуан за которым я наблюдал.
и не то чтобы был какой-то другой взвод: насколько я видел, кроме этих игуан, одной семьи енотов и мифического крокодила в пруду за забором (“а там правда есть крокодил?” “нет, но вы можете сами проверить в камышах”) никто по оазису не ползал и не прыгал.
птички и пеликаны иногда подлетали и кричали что-то обидное игуанам, но те стоически не закрывали глаз и не обращали внимания на клоунов.
моя старшенькая в конце концов не выдержала и спросила, почему бы игуанам не подползти тупо к одному из соседних деревьев и не сожрать упавшее там манго, не дожидаясь пока прилетит со своего дерева.
я с любовью и нежностью посмотрел на дочь; ее глаза блестели, а подзагоревшие щеки румянились после отработки нового трюка на flying trapeze.
я ответил, что когда прижмёт и без манго будет совсем невмоготу – игуаны обязательно пойдут искать их под соседними деревьями.
но в душе я знал, что большинство игуан прекрасно обойдётся листьями, травой и молодыми побегами, оправдываясь что манго со своего дерева всегда слаще, и вообще – манго полежавшее на жаре не такое уж кстати и вкусное.
игуаны безупречно бегают, хорошо плавают и ныряют, и отлично защищены шипами высокого гребня вдоль хребта. их не удивишь одуванчиками, и они уже давно переключились на платформы и инфраструктуру.
они крайне опытны и аккуратны, и поэтому в их #ifdef
“лишь бы компилировалось”
код будет лучше, быстрее и правильнее того ужаса
что “уже десять лет работает” и в обход дефектов которого
сформировались ритуальные пляски,
но брать ответственность и риски и переключать основную ветвь они на хороший код не будут, потому что
если долго сидеть под манговым деревом, то плод рано или поздно упадёт в руки сам.