Вот тут спорят о смысле этого эксперимента, а он очень даже есть. Вспомните пролётные мисии — Вояджеры, Пионеры, потом Новые Горизонты. Во всех случаях они предоставили нам прекрасные снимки далёких планет и спутников, но только с одной стороны. Карта Плутона, Тритона и пр. очень детальная в одном полушарии, и размытая в другом (или же данные вообще отсутствуют). А теперь представьте, что АМС за несколько дней/недель до пролёта отстрелила камеру с батареей, передатчиком и небольшими двигателями ориентации. Пролетев мимо Плутона на 3.2 дня раньше/позже основной АМС (сутки на Плутоне — 6.4 земных), она могла бы отснять обратное полушарие в большом разрешении, а затем передать данные на основную АМС.
А вы попробуйте пройтись по Сыктывкару с коляской даже сухую погоду. Иной раз коляску надо целиком поднимать — иначе не залезть на местное подобие тротуаров через бордюр полметра высотой.
Ну вот я как раз за то, чтобы в подобных статьях использовались знакомые/общепринятые обозначения. Если уж так хочется перевести на Могучий, писали бы при первом появлении в скобках оригинальную английскую фразу:
Не знаю как где, но геймдев.ру у нас вроде один, и все программисты графики так или иначе через него проходили, и "выучились" именно на тамошней терминологии.
Если уж цепляться за точность перевода, то shading — это отбрасывание тени (затенение), а не света. А использование слова "отбрасывание" вызывает путаницу, т.к. есть ещё culling — отбрасывание (исключение из рендера) невидимых поверхностей/объектов. В обсуждаемой статье весь раздел "Отбрасывание света и декалей" вызывает недоумение, т.к. не понятно, о чём идёт речь. Там смешался кластерный шейдинг и куллинг источников света, не видимых камере. Весь раздел надо раза три перечитать, чтобы врубиться. И я вроде не новичок в графике и знаю все эти техники! О, да, и давайте тогда рендер заменим на "представление", "показывание"?
Тем что это общепринятые "термины" (ну или сленг) в среде программистов графики. По сути англицизмы. Профессионалы вас не поймут (ну или заминусят), новички только запутаются.
Зря человека заминусили. Я не поленился и составил список косяков перевода. Хоть я в графике уже 15 лет, но надмозговый перевод привычных терминов заставлял зависнуть буквально в каждом абзаце. Если не знакомы с терминологией, лучше оставляйте английский, ей-богу!
несвязанными ресурсами (bindless resources) -> надо было оставить bindless ресурсы. Дословный смысл — несвязываемые, а не несвязанные.
Z-иерархическая глубина -> иерархический z-буфер
mip-цепи -> пирамида мип-уровней
сетки -> меши (ну не говорят же "сетки")
Отбрасывание света -> шейдинг что ли?
кластерного отбрасываения света -> clustered shading (кластеризованный шейдинг, или просто кластерный)
Преграждение окружающего света -> ambient occlusion
Непрозрачный прямой проход -> прямой проход для непрозрачной геометрии
вместо привязки размытия, отражений -> вместо бинда размытия, отражений
неровности текстуры -> текстура неровностей
отражений экранного пространства -> отражения в экранном пространстве, или screen-space отражения
в прямом шейдере -> эээ… это что-то новое))
разрешение частиц освещения -> разрешение [текстуры] освещения частиц. Неверный порядок слов полностью поменял смысл фразы.
цель рендера -> рендер таргет
целевое воздействие -> это вообще шедевр. По всей видимости, имелось в виду автоэкспозиция (auto exposure)
при вычислении воздействия в ходе тональной компрессии -> при вычислении экспозиции в ходе тональной компрессии
А я купил на рабочий стол икеевскую лампу со встроенной беспроводной зарядкой, и кладу телефон на нее. В машине тоже есть беспроводная зарядка в держателе. В итоге штатная проводная зарядка лежит в тумбочке, и достается только для поездок.
Вот, кстати, почему до сих пор нет в смартфонах опции ограничения заряда? Ведь в 90% случаев мы оставляем его подключенным к заряднику без присмотра, и он, естественно, заряжается до 100%. Для удобства, чтобы не лазать в настройки каждый раз, сделать простой виджет с кнопками 80%, 90%, 100%, которые появляются, как только подключаешь зарядник.
Думаю, ответ банален — маркетинг & устаревание (т.е. надо же чтобы тел в тестах жил 100500 часов, а через год-два смотрелся дряхло на фоне новых моделей). Но может быть есть такие приложения сторонние?
Действительно, где это такие "нормальные магазины" водятся? Где все мне подберут обоснованно, покажут, выберут лучшее. Прям фантастика. Не подскажете парочку в РФ?
Автор, похоже, никогда серьезно не играл в серьезные шутеры. Батька отличается от нуба не тем, что умеет метко стрелять, а тем, что досконально знает карту, где что лежит и когда респаунится/открывается, владеет механикой игры и грамотным выбором оружия в зависимости от ситуации и с учётом особенностей архитектуры карты. Рандомная генерация напрочь убирает знание карты, и что остаётся? С тем же успехом можно сражаться в чистом поле. Будет тупое сравнение, у кого мышка точнее и рука меньше дрожит. Никакого фана.
Главный компонент, которому положена водянка — это ГПУ. Смешно читать про кастомную супер-пупер водянку с радиатором от жигулей, бесшумно замораживающую процессор, при этом рядом воткнута 1080Ti с тремя кулерами. Пфф…
Вот NZXT выпускает адаптер для AIO на GPU — Kraken G12. С минимумом колхоза (пришлось отпилить металлическое ухо над разъёмами питания) встала на RTX2080 с родным фронт и бэкплейтом (т.е. снял только радиатор GPU с кулерами). 320 мм радиатор на вдув — температура под длительной 100% нагрузкой 40°, на выдув — 60°. Второй такой же 320 мм AIO стоит на рейзене, температура около 50°, выше 75° не поднимается (тут сложно сказать, рейзены странно её показывают, она постоянно пульсирует, график — пилообразный). Замечу, что я сторонник тишины, поэтому кулеры и помпы на минимальных оборотах. Если их раскрутить, можно отыграть 10-15°. До «апгрейда» видеокарта грелась до 75° и гудела соответственно.
Жаль что мало «заводских» решений вроде Radeon Vega LC. А ещё лучше было бы если бы выпускались видеокарты без радиаторов с унифицированным креплением для водоблоков AIO. Сейчас ведь производительность топовых видеокарт сдерживается именно невозможностью обеспечить адекватное охлаждение.
Так вы на встройке играете? Ну тогда конечно, чего вы ожидали. В те времена (да и сейчас, чего уж там) встройка годится только видео смотреть и какие-то 2д аркады гонять, не более.
Просадка при копировании данных в видеопамять может быть из-за того, что в 2007 в видеокартах не было асинхронного copy engine, поэтому копирование данных могло быть только в синхронном режиме, т.е. с остановкой конвеера, между кадрами. Аппаратные асинхронные PBO появились позже, врядли ли crytec занимались апдейтом старого движка ради этого.
Не рендеринг того, что не видно, а постановку в очередь на рендеринг, т.е. поиск нужных объектов, чтение, распаковку. Ну и шейдеры заранее можно подготовить, а не ждать, пока отрисуются все эффекты
Так это и делается. Эффекты шейдерами же и рисуются, если бы шейдеры ещё не были загружены, нечего было бы рисовать. То же с моделями, текстурами и т.д. — пока не загружено, никаких мобов не было бы видно, они появлялись бы внезапно, по окончании загрузки.
Конечно, какая-то очередь есть, но этого явно недостаточно — в описанной ситуации, когда вообще вся игра расположена в ОЗУ, а уровень целиком ещё и закэширован — занимает 2,5 ГБ, свободное ОЗУ ещё есть, что мешает разложить всё по полочкам, чтобы потом не было описанной просадки при появлении нескольких мобов четырёх классов?
А при чём здесь ОЗУ, видеокарта держит текстуры и модели в собственной памяти. Сколько там её было в топовых видеокартах в 2007, 512 Мб? Поэтому текстуры и загружаются на ходу по мере надобности, иначе было никак. В некоторых играх и сейчас без этого никак. Хотя видеопамяти уже 8+ Гб, но и текстуры тоже нехилые для 4к разрешения нужны, плюс несколько 4к рендер-таргетов.
К сожалению, простаивают. CryEngine 2'64. Понимаю, что возможно так написана игра, но подобные тормоза, судя по отзывам на форумах, присущи всем играм на, как минимум, ранних версиях движка.
Ну так движок писался под процессоры тех лет, когда 4 ядра было сверхкруто. И ожидали частот 10 ГГц «уже в скором будущем». Полагаю, поэтому ставка была сделана не на распараллеливание, а на ожидание большей скорости одного ядра в будущем.
Также можно было бы подумать о создании очереди на фоновый рендеринг объектов — во время уменьшения нагрузки на DirectX проводить рендеринг объектов, у которых есть шанс скоро появиться в кадре.
Это так не работает. Что значит рендеринг объектов, у которых есть шанс скоро появиться в кадре? Рендерить объекты надо в том положении и ориентации, которые они займут в данном кадре. Заранее это сделать нельзя, т.к. не известно, как будет двигаться игрок. Это работает только для очень далёких объектов, таких как облака или острова в море на горизонте. Техника называется «импостеры» и применяется очень давно.
Возможно, если бы свободные от работы на DirectX ядра занимались бы неторопливой фоновой подготовкой данных — загрузкой и распаковкой в безбрежное ОЗУ ресурс-паков,
Это 100% делалось. Чем ещё, по-вашему, занимались другие ядра? Я в своём движке уже в 2007-2008 делал загрузку ресурсов в параллельных потоках, это был общий тренд в геймдеве.
В статье же объясняется, откуда тормоза — слишком много дипов, без аппаратного инстансинга (в то время его ещё не завезли). В современных движках, наоборот, стремятся как можно больше всего запихнуть в один дип (смерджить геометрию в один большой меш, чтобы отрисовать её одной командой) и использовать инстансинг (когда N копий объекта, например камня или куста, отрисовывается одной командой). А там же:
В этой сцене вызывается более 4 тысяч групп полигонов для 2,5 миллиона треугольников окружения, чтобы наложить на них 1 932 текстуры
т.е. грубо говоря один дип — всего 625 труегольников. И так 4000 раз! Это ужас как неоптимально. В современном движке то же самое рисовалось бы 100 дипами по 100к треугольников, и это работало бы в разы быстрее. 1932 текстуры, если они не собраны в одни огромный атлас, а переключаются для каждого дипа — это тоже очень сурово.
Для игры 2007 года такое количество вызовов чрезвычайно высоко, потому что излишние траты CPU в DirectX 9 (и, в меньшей степени, в DirectX 10) для выполнения каждого вызова не были так уж тривиальны.
Это справедливо и сейчас, поэтому существует инстансинг и прочие методы сокращения числа дипов. Теоретически, такую сложную вещь, как динамически изменямый/подгружаемый на ходу рельеф с уникальными текстурами в каждом патче (типа Google Earth) сегодня можно отрисовать одним вызовом.
Вот тут спорят о смысле этого эксперимента, а он очень даже есть. Вспомните пролётные мисии — Вояджеры, Пионеры, потом Новые Горизонты. Во всех случаях они предоставили нам прекрасные снимки далёких планет и спутников, но только с одной стороны. Карта Плутона, Тритона и пр. очень детальная в одном полушарии, и размытая в другом (или же данные вообще отсутствуют). А теперь представьте, что АМС за несколько дней/недель до пролёта отстрелила камеру с батареей, передатчиком и небольшими двигателями ориентации. Пролетев мимо Плутона на 3.2 дня раньше/позже основной АМС (сутки на Плутоне — 6.4 земных), она могла бы отснять обратное полушарие в большом разрешении, а затем передать данные на основную АМС.
Да нет, там чистейший воздух, по сравнению с другими столицами регионов. Если с ЛПК не несёт ничего :)
А вы попробуйте пройтись по Сыктывкару с коляской даже сухую погоду. Иной раз коляску надо целиком поднимать — иначе не залезть на местное подобие тротуаров через бордюр полметра высотой.
Жена с феминистскими наклонностями и маленький ребенок! Прогулки с коляской в парке по 2+ часа каждый второй день обеспечены. Рекомендую.
Ну вот я как раз за то, чтобы в подобных статьях использовались знакомые/общепринятые обозначения. Если уж так хочется перевести на Могучий, писали бы при первом появлении в скобках оригинальную английскую фразу:
Не знаю как где, но геймдев.ру у нас вроде один, и все программисты графики так или иначе через него проходили, и "выучились" именно на тамошней терминологии.
Если уж цепляться за точность перевода, то shading — это отбрасывание тени (затенение), а не света. А использование слова "отбрасывание" вызывает путаницу, т.к. есть ещё culling — отбрасывание (исключение из рендера) невидимых поверхностей/объектов. В обсуждаемой статье весь раздел "Отбрасывание света и декалей" вызывает недоумение, т.к. не понятно, о чём идёт речь. Там смешался кластерный шейдинг и куллинг источников света, не видимых камере. Весь раздел надо раза три перечитать, чтобы врубиться. И я вроде не новичок в графике и знаю все эти техники! О, да, и давайте тогда рендер заменим на "представление", "показывание"?
Тем что это общепринятые "термины" (ну или сленг) в среде программистов графики. По сути англицизмы. Профессионалы вас не поймут (ну или заминусят), новички только запутаются.
Зря человека заминусили. Я не поленился и составил список косяков перевода. Хоть я в графике уже 15 лет, но надмозговый перевод привычных терминов заставлял зависнуть буквально в каждом абзаце. Если не знакомы с терминологией, лучше оставляйте английский, ей-богу!
несвязанными ресурсами (bindless resources) -> надо было оставить bindless ресурсы. Дословный смысл — несвязываемые, а не несвязанные.
Z-иерархическая глубина -> иерархический z-буфер
mip-цепи -> пирамида мип-уровней
сетки -> меши (ну не говорят же "сетки")
Отбрасывание света -> шейдинг что ли?
кластерного отбрасываения света -> clustered shading (кластеризованный шейдинг, или просто кластерный)
Преграждение окружающего света -> ambient occlusion
Непрозрачный прямой проход -> прямой проход для непрозрачной геометрии
вместо привязки размытия, отражений -> вместо бинда размытия, отражений
неровности текстуры -> текстура неровностей
отражений экранного пространства -> отражения в экранном пространстве, или screen-space отражения
в прямом шейдере -> эээ… это что-то новое))
разрешение частиц освещения -> разрешение [текстуры] освещения частиц. Неверный порядок слов полностью поменял смысл фразы.
цель рендера -> рендер таргет
целевое воздействие -> это вообще шедевр. По всей видимости, имелось в виду автоэкспозиция (auto exposure)
при вычислении воздействия в ходе тональной компрессии -> при вычислении экспозиции в ходе тональной компрессии
И это ещё не всё. Ниже ещё приводили примеры.
А я купил на рабочий стол икеевскую лампу со встроенной беспроводной зарядкой, и кладу телефон на нее. В машине тоже есть беспроводная зарядка в держателе. В итоге штатная проводная зарядка лежит в тумбочке, и достается только для поездок.
Вот, кстати, почему до сих пор нет в смартфонах опции ограничения заряда? Ведь в 90% случаев мы оставляем его подключенным к заряднику без присмотра, и он, естественно, заряжается до 100%. Для удобства, чтобы не лазать в настройки каждый раз, сделать простой виджет с кнопками 80%, 90%, 100%, которые появляются, как только подключаешь зарядник.
Думаю, ответ банален — маркетинг & устаревание (т.е. надо же чтобы тел в тестах жил 100500 часов, а через год-два смотрелся дряхло на фоне новых моделей). Но может быть есть такие приложения сторонние?
Действительно, где это такие "нормальные магазины" водятся? Где все мне подберут обоснованно, покажут, выберут лучшее. Прям фантастика. Не подскажете парочку в РФ?
Думаете, Жилетт с Брауном не в курсе? Им нафиг не надо выпускать вечные бритвы.
Автор, похоже, никогда серьезно не играл в серьезные шутеры. Батька отличается от нуба не тем, что умеет метко стрелять, а тем, что досконально знает карту, где что лежит и когда респаунится/открывается, владеет механикой игры и грамотным выбором оружия в зависимости от ситуации и с учётом особенностей архитектуры карты. Рандомная генерация напрочь убирает знание карты, и что остаётся? С тем же успехом можно сражаться в чистом поле. Будет тупое сравнение, у кого мышка точнее и рука меньше дрожит. Никакого фана.
Вот NZXT выпускает адаптер для AIO на GPU — Kraken G12. С минимумом колхоза (пришлось отпилить металлическое ухо над разъёмами питания) встала на RTX2080 с родным фронт и бэкплейтом (т.е. снял только радиатор GPU с кулерами). 320 мм радиатор на вдув — температура под длительной 100% нагрузкой 40°, на выдув — 60°. Второй такой же 320 мм AIO стоит на рейзене, температура около 50°, выше 75° не поднимается (тут сложно сказать, рейзены странно её показывают, она постоянно пульсирует, график — пилообразный). Замечу, что я сторонник тишины, поэтому кулеры и помпы на минимальных оборотах. Если их раскрутить, можно отыграть 10-15°. До «апгрейда» видеокарта грелась до 75° и гудела соответственно.
Жаль что мало «заводских» решений вроде Radeon Vega LC. А ещё лучше было бы если бы выпускались видеокарты без радиаторов с унифицированным креплением для водоблоков AIO. Сейчас ведь производительность топовых видеокарт сдерживается именно невозможностью обеспечить адекватное охлаждение.
Просадка при копировании данных в видеопамять может быть из-за того, что в 2007 в видеокартах не было асинхронного copy engine, поэтому копирование данных могло быть только в синхронном режиме, т.е. с остановкой конвеера, между кадрами. Аппаратные асинхронные PBO появились позже, врядли ли crytec занимались апдейтом старого движка ради этого.
habr.com/ru/post/511894
Так это и делается. Эффекты шейдерами же и рисуются, если бы шейдеры ещё не были загружены, нечего было бы рисовать. То же с моделями, текстурами и т.д. — пока не загружено, никаких мобов не было бы видно, они появлялись бы внезапно, по окончании загрузки.
А при чём здесь ОЗУ, видеокарта держит текстуры и модели в собственной памяти. Сколько там её было в топовых видеокартах в 2007, 512 Мб? Поэтому текстуры и загружаются на ходу по мере надобности, иначе было никак. В некоторых играх и сейчас без этого никак. Хотя видеопамяти уже 8+ Гб, но и текстуры тоже нехилые для 4к разрешения нужны, плюс несколько 4к рендер-таргетов.
Ну так движок писался под процессоры тех лет, когда 4 ядра было сверхкруто. И ожидали частот 10 ГГц «уже в скором будущем». Полагаю, поэтому ставка была сделана не на распараллеливание, а на ожидание большей скорости одного ядра в будущем.
Это так не работает. Что значит рендеринг объектов, у которых есть шанс скоро появиться в кадре? Рендерить объекты надо в том положении и ориентации, которые они займут в данном кадре. Заранее это сделать нельзя, т.к. не известно, как будет двигаться игрок. Это работает только для очень далёких объектов, таких как облака или острова в море на горизонте. Техника называется «импостеры» и применяется очень давно.
Это 100% делалось. Чем ещё, по-вашему, занимались другие ядра? Я в своём движке уже в 2007-2008 делал загрузку ресурсов в параллельных потоках, это был общий тренд в геймдеве.
В статье же объясняется, откуда тормоза — слишком много дипов, без аппаратного инстансинга (в то время его ещё не завезли). В современных движках, наоборот, стремятся как можно больше всего запихнуть в один дип (смерджить геометрию в один большой меш, чтобы отрисовать её одной командой) и использовать инстансинг (когда N копий объекта, например камня или куста, отрисовывается одной командой). А там же:
т.е. грубо говоря один дип — всего 625 труегольников. И так 4000 раз! Это ужас как неоптимально. В современном движке то же самое рисовалось бы 100 дипами по 100к треугольников, и это работало бы в разы быстрее. 1932 текстуры, если они не собраны в одни огромный атлас, а переключаются для каждого дипа — это тоже очень сурово.
Это справедливо и сейчас, поэтому существует инстансинг и прочие методы сокращения числа дипов. Теоретически, такую сложную вещь, как динамически изменямый/подгружаемый на ходу рельеф с уникальными текстурами в каждом патче (типа Google Earth) сегодня можно отрисовать одним вызовом.