Grapeoff
@Grapeoff
В чём концепция...?

Как разработчики игр и софта оптимизируют свои игры и программы под определённое железо?

Иногда можно услышать подобную фразу: «Игры, в основном, оптимизируют под видеокарты Nvidia».

Я тут задался вопросом, а как это происходит? Для этого нужен самописный движок?

Представим, что я использую Unity, как это должно выглядеть?

using Nvidia;

Game game = new Game()(
Nvidia.OptimizeForOurGPUAndRemoveCompatibilityWithAMD(game);


Это все шутки, конечно, но может у Nvidia есть какой-то собственный язык написания шейдеров, например?
  • Вопрос задан
  • 444 просмотра
Решения вопроса 5
GavriKos
@GavriKos Куратор тега Разработка игр
Дополнительные шейдерные инструкции, CUDA, вполне возможно - форматы текстур. Возможно - ковыряние в драйверах и понимание процессов рендеринга на низком уровне.
Да, чаще всего такое встречается не то чтобы в самописных движках, а в тех где какая то часть рендер-пайплайна открыта или редактируема.
Ответ написан
Комментировать
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Ради интереса гляньте в исходники dlib, OpenCV, ffmpeg
Там тема оптимизации раскрыта полностью. Грубо говоря код идет по другой ветке и использует другие инструкции.
Ответ написан
Комментировать
gbg
@gbg Куратор тега Железо
Любые ответы на любые вопросы
Десятки экстеншенов OpenGL как бы намекают
NV_bindless_multi_draw_indirect
NV_bindless_texture
NV_blend_equation_advanced
NV_blend_square
GL_NV_command_list.txt
NV_compute_program5
NV_conditional_render
NV_conservative_raster
NV_copy_depth_to_color
NV_copy_image
NV_deep_texture3D
NV_depth_buffer_float
NV_depth_clamp
NV_draw_texture
NV_explicit_multisample
NV_fence
NV_fill_rectangle
NV_float_buffer
NV_fog_distance
NV_fragment_coverage_to_color
NV_fragment_program
NV_fragment_program_option
NV_fragment_program2
NV_fragment_shader_interlock
NV_framebuffer_mixed_samples
NV_framebuffer_multisample_coverage
NV_geometry_shader_passthrough
NV_geometry_shader4
NV_gpu_program4
NV_gpu_program5
NV_gpu_program5_mem_extended
NV_gpu_shader5
NV_half_float
NV_light_max_exponent
NV_multisample_coverage
NV_multisample_filter_hint
NV_occlusion_query
NV_packed_depth_stencil
NV_parameter_buffer_object
NV_parameter_buffer_object2
NV_path_rendering
NV_path_rendering_shared_edge
NV_pixel_data_range
NV_point_sprite
NV_primitive_restart
NV_register_combiners
NV_register_combiners2
NV_sample_locations
NV_sample_mask_override_coverage
NV_shader_atomic_counters
NV_shader_atomic_fp16_vector
NV_shader_atomic_float
NV_shader_buffer_load
NV_shader_storage_buffer_object
NV_shader_thread_group
NV_shader_thread_shuffle
NV_texgen_reflection
NV_texture_barrier
NV_texture_compression_vtc
NV_texture_env_combine4
NV_texture_expand_normal
NV_texture_multisample
NV_texture_rectangle
NV_texture_shader
NV_texture_shader2
NV_texture_shader3
NV_transform_feedback
NV_transform_feedback2
NV_vertex_array_range
NV_vertex_array_range2
NV_vertex_attrib_integer_64bit
NV_vertex_buffer_unified_memory
NV_vertex_program
NV_vertex_program1_1
NV_vertex_program2
NV_vertex_program2_option
NV_vertex_program3
NV_video_capture
NVX_conditional_render
NVX_gpu_memory_info


И объясняют, почему Торвальдс показал им широкий жест
Ответ написан
Комментировать
Jump
@Jump
Системный администратор со стажем.
Я тут задался вопросом, а как это происходит?
Разработчик изучает возможности железа и думает как их максимально эффективно задействовать. По сути переписывает код, под изменившиеся условия.

Для этого нужен самописный движок?
Как бы нет принципиальной разницы какой код вы будете переписывать - свой, или чужой.

Например у вас программа которая шифрует данные по популярному алгоритму AES - код программы описывает какие данные передать процесору, и какие операции процессор должен сделать и в какой последовательности.
Потом вы узнаете что ваш процессор поддерживает криптографию на аппаратном уровне- и вносите изменения в код. Добавляете в код программы условие проверки поддержки AES процессором, и если она есть, вместо страницы кода добавляете инструкцию AESENC. В результате шифрование выполняется на порядок быстрее.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Я полагаю так. Нужно оринтироваться на массовое железо. Если ты купил себе топовое - на нем затестил. То не факт что игра будет хорошо принята игровым сообществом. В своё время создатели Doom-3 не могли сделать релиз. Они ждали пока железо достигнет какого-то уровня

Тоесть - разработчик должен сначала представить себе целевую аудиторию. Кто это? Детишки со смартфонами. У них - на 80% будет один набор фич. Бюджетнички такие себе. Насколько мама с папой им купили телефон - настолько они и поиграют. Это один сегмент.

Другое. Олд-геймеры. Мусчины. Которые прилично зарабатывают. И сидят вечерами спокойно в Steam и покупают то что хотят. У них будет железо топовое плюс минус 1-3 года оставания.

Третье. Офисные клерки. Они сидят на типовых HP/Intel железках. Тоже сегмент.

Вобщем игра должна быть шпионом который собирает профиль конфигурации и рапортует девелоперу на сайт чтоб собрать сведенья по рынку железа и далее - сегментировать его.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@lonelymyp
Хочу вылезти из минуса по карме.
Есть ощущение что в игровой индустрии этим вообще никто не занимается, запустилось - скорей в магазин продавать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы