StiMOR
StiMOR
Cloop210
🙃
Re
Ты предлагаешь тратить больше времени на инструмент.
Не надо выдумывать мои слова за меня.
Подразумевается, что рассуждения на тему "современности" движков и их пайплайнов — не относятся к играм.
Подразумевается, что рассуждения на тему "производительности" — не относятся к играм.
Подразумевается, что список использованных технологий не относится к "хитовости" игр.
Подразумевается, что прослойки не заменяют разработчика.
Гений напишет три строчки которые будут лагать на китайском квантовом суперкомпутере за 1кккк млрд баксов.
Применяющий мозги на чём угодно напишет принципиально что угодно, и будет работать нормально.
Это противоречит законам инфомартики. У каждого пк есть лимиты.
RenPy \ GameMaker\ Godot все еще сильно лагают на многих устройствах.
Видимо разработчики кривые. Хотя там есть хорошие игры и даже хиты.
Никто не спорит что есть талантливые программисты, есть студии которые могут оптимизировать целые игры.
Есть просто студии в которых есть ресурсы.
А есть просто обычные разработчики. Которые думают и выстраивают приоритеты над игрой, а не движком.
Как результат это дает больше плодов, даже если что то лагает и.т.д. и.т.п. Важно что бы было играбельно.
Сделать можно и на голом OpenGL и вообще без GPU. Вопрос времени и ресурсов. С этим тоже спорить не буду.
Делайте. Статистика говорит что подход где не плывут против течения более эффективный.
ДЛя кого то может быть иная ситуация. К сожалению на деле хороший рендер можно написать занимаясь им очень долго понимая особенности и работая с конкретными железками. Получая фидбек.
В качестве проблемы технологии или ее реализации. Могу написать о фризе в OpenGL \ DX<12.
Где из за нагрузки ядра 25%(говорю про 4 ядра) у тебя будет фриз игры. Причина может быть даже не в игре.
А просто в том что браузер загрузил тоже ядро или еще какое то приложение.
Этим страдают многие GAPI которые не думают о CPU. На мобилках это еще более большой бич.
Понять это все можно только нагружая ЦП разными фоновыми апами при игре. Музыкой, браузер запущенный в фоне и.т.д.
Это пример, маленький кусочек предметной области. Который актуален в новых инди движках.
Который давно искоренен в юнити и подобных мастодонтах.
Это к вопросу написать хорошо. Говорить можно сколько угодно, приводить хорошие проекты в пример.
Или крайне простые. Да хоть супер сложные.
Реальность как по мне, заключается в том ЧТО НАПИСАННО ХОРОШИЙ РЕНДЕР, КОТОРЫЙ БАЗИРУЕТСЯ НЕ НА ПРОВЕРЕННЫХ ТЕХНОЛОГИЯХ, ПРАКТИЧЕСКИ НЕТ!
Рейлиб невходит в это число, и если кто то напишет по качеству что то близкое к ловке. Я скажу вот это ты молодец! Профи. По факту этого нет.
Это есть частично в Monogame, частично потому что базируется на других технологиях.
FNA\ DXTK\ Godot(с нюансами)\ Unity\ \парочка либ на вгпу\внезапно браузер\ловка и еще некоторые технолологии.Вот из ТЫСЯЧ рендеров разных энтузиастов , попыток написать свое.
+- хорошие решения выше и +-10 еще можно выделить.
Когда говорят написать свой рендер просто. Честно мне смешно, потому что нормальный рендер делается лет 5. Желательно с аудиторией огромной или фермой устройств. Потому что тот же OpenGL.
ДАже в ES2 ведет себя СИЛЬНО по разному от реализации вендора.
ДА можно писать простые игры, да можно сделать свое. Но сделать что то хотя бы близкое к уровня ловки.
Это надо капец как постараться. Даже урвоень рейлиба я бы отметил выше среднего. Так же как Эбитен.
Но для меня это тир A\B потому что финдаментально там есть проблемы которые упираются в слабые CPU.
Переписывать весь спрайт батчинг, то есть всю систему рендеринга спрайтиков. Изучая разные инструкции и команды OpenGL которые по спеке может и можно применить, но на деле лучше заменить аналогами.
Оптимизировать это все с помощью хотя бы автовекторизированного кода достаточно сложно.
Если говорить прямо в рейлибе очень примитивные контейнеры.
И я еще раз скажу. Рейлиб для определенного уровня игр хорош. Для тулз, некоторых апов.
Но есть факты и переписывать всю кор часть, а потоп поверх переписывать всю работу с текстурами и шейдерами.
ТО что мне пытаются тут сказать. Это == написать свой рейлиб.
GLFW \SDL я и так могу взять. RLGL прикольная вещь, но не оптимальная.
И что остается?
Но я это все к чему. рендер это сердце игры которое хочется иметь лучше. на мой вкус и на моих тестах в ловке он очень хорош.
В теории будь рендер написать вменяемо сложно. у нас было бы их много и все были бы такими хорошими. На практике человек должен уметь делать кешфрендли слайсы с нормальными аллокаторами для начала, заканчивая пониманием как работает та или иная команда opengl в конкретной спеке и что многое зависит от устройства \ драйвера\ вендора. Да и в целом предметка достаточно серьезная.
Re
Ты предлагаешь тратить больше времени на инструмент.
Не надо выдумывать мои слова за меня.
Подразумевается, что рассуждения на тему "современности" движков и их пайплайнов — не относятся к играм.
Подразумевается, что рассуждения на тему "производительности" — не относятся к играм.
Подразумевается, что список использованных технологий не относится к "хитовости" игр.
Подразумевается, что прослойки не заменяют разработчика.
Гений напишет три строчки которые будут лагать на китайском квантовом суперкомпутере за 1кккк млрд баксов.
Применяющий мозги на чём угодно напишет принципиально что угодно, и будет работать нормально.
Про пример с crimsonland. Велеколепная игра, но с точки зрения реализации. Надо понимать что в ней есть упрощения. Масштабы карты. Поведение монстров. Когда он явно на тебя не реагирует, а заполянет пространство. Энивей пример хороший, не знаю сколько в студии было разрабов, но игра шикарна.
Вопрос в том, что это скорее исключение из правил.
По этому нормально делай, нормально будет и разработка игр не всегда по пути.
В частности от части из за рендера, в частности потому что OpenGL имеет мгного болезней.
А поддерживать кучу апи было сложно. На этом всем выиграли около коммерческие движки.
Выжили сильнейшие инди движки. Какие то стали популярыными.
Рендер изначально самая большая болячка, которую вулкан частично решает или в перспективе.
А похожие по своей структуре API Metal\ DX12\ Vulkan\WebGPU , ложатся в более оптимальные абстракции.
Старички стараются подтянуться до этого уровня таже команда FNA которая реализовала по сути SDL3 gpu.
Monogame со своей роадмапой. Годот который пытался сам, повезло еще и деняг на команду дали.
Про ААА и Юнити и говbрить нечего. там всегда было лучшее и иногда для совместимости OpenGL.
Да я и сам долгое время был за OpenGL и был бы в ES3 нормальная поддержка компьютов и разных мелочей, оставался бы в этом лагере до последнего, но увы, увы.
Snusmumriken
Про пример с crimsonland. Велеколепная игра, но с точки зрения реализации. Надо понимать что в ней есть упрощения. Масштабы карты. Поведение монстров. Когда он явно на тебя не реагирует, а заполянет пространство. Энивей пример хороший, не знаю сколько в студии было разрабов, но игра шикарна.
Вопрос в том, что это скорее исключение из правил.
По этому нормально делай, нормально будет и разработка игр не всегда по пути.
В частности от части из за рендера, в частности потому что OpenGL имеет мгного болезней.
А поддерживать кучу апи было сложно. На этом всем выиграли около коммерческие движки.
Выжили сильнейшие инди движки. Какие то стали популярыными.
Рендер изначально самая большая болячка, которую вулкан частично решает или в перспективе.
А похожие по своей структуре API Metal\ DX12\ Vulkan\WebGPU , ложатся в более оптимальные абстракции.
Старички стараются подтянуться до этого уровня таже команда FNA которая реализовала по сути SDL3 gpu.
Monogame со своей роадмапой. Годот который пытался сам, повезло еще и деняг на команду дали.
Про ААА и Юнити и говbрить нечего. там всегда было лучшее и иногда для совместимости OpenGL.
Да я и сам долгое время был за OpenGL и был бы в ES3 нормальная поддержка компьютов и разных мелочей, оставался бы в этом лагере до последнего, но увы, увы.
Один
Snusmumriken
Это противоречит законам инфомартики. У каждого пк есть лимиты.
RenPy \ GameMaker\ Godot все еще сильно лагают на многих устройствах.
Видимо разработчики кривые. Хотя там есть хорошие игры и даже хиты.
Никто не спорит что есть талантливые программисты, есть студии которые могут оптимизировать целые игры.
Есть просто студии в которых есть ресурсы.
А есть просто обычные разработчики. Которые думают и выстраивают приоритеты над игрой, а не движком.
Как результат это дает больше плодов, даже если что то лагает и.т.д. и.т.п. Важно что бы было играбельно.
Сделать можно и на голом OpenGL и вообще без GPU. Вопрос времени и ресурсов. С этим тоже спорить не буду.
Делайте. Статистика говорит что подход где не плывут против течения более эффективный.
ДЛя кого то может быть иная ситуация. К сожалению на деле хороший рендер можно написать занимаясь им очень долго понимая особенности и работая с конкретными железками. Получая фидбек.
В качестве проблемы технологии или ее реализации. Могу написать о фризе в OpenGL \ DX<12.
Где из за нагрузки ядра 25%(говорю про 4 ядра) у тебя будет фриз игры. Причина может быть даже не в игре.
А просто в том что браузер загрузил тоже ядро или еще какое то приложение.
Этим страдают многие GAPI которые не думают о CPU. На мобилках это еще более большой бич.
Понять это все можно только нагружая ЦП разными фоновыми апами при игре. Музыкой, браузер запущенный в фоне и.т.д.
Это пример, маленький кусочек предметной области. Который актуален в новых инди движках.
Который давно искоренен в юнити и подобных мастодонтах.
Это к вопросу написать хорошо. Говорить можно сколько угодно, приводить хорошие проекты в пример.
Или крайне простые. Да хоть супер сложные.
Реальность как по мне, заключается в том ЧТО НАПИСАННО ХОРОШИЙ РЕНДЕР, КОТОРЫЙ БАЗИРУЕТСЯ НЕ НА ПРОВЕРЕННЫХ ТЕХНОЛОГИЯХ, ПРАКТИЧЕСКИ НЕТ!
Рейлиб невходит в это число, и если кто то напишет по качеству что то близкое к ловке. Я скажу вот это ты молодец! Профи. По факту этого нет.
Это есть частично в Monogame, частично потому что базируется на других технологиях.
FNA\ DXTK\ Godot(с нюансами)\ Unity\ \парочка либ на вгпу\внезапно браузер\ловка и еще некоторые технолологии.Вот из ТЫСЯЧ рендеров разных энтузиастов , попыток написать свое.
+- хорошие решения выше и +-10 еще можно выделить.
Когда говорят написать свой рендер просто. Честно мне смешно, потому что нормальный рендер делается лет 5. Желательно с аудиторией огромной или фермой устройств. Потому что тот же OpenGL.
ДАже в ES2 ведет себя СИЛЬНО по разному от реализации вендора.
ДА можно писать простые игры, да можно сделать свое. Но сделать что то хотя бы близкое к уровня ловки.
Это надо капец как постараться. Даже урвоень рейлиба я бы отметил выше среднего. Так же как Эбитен.
Но для меня это тир A\B потому что финдаментально там есть проблемы которые упираются в слабые CPU.
Переписывать весь спрайт батчинг, то есть всю систему рендеринга спрайтиков. Изучая разные инструкции и команды OpenGL которые по спеке может и можно применить, но на деле лучше заменить аналогами.
Оптимизировать это все с помощью хотя бы автовекторизированного кода достаточно сложно.
Если говорить прямо в рейлибе очень примитивные контейнеры.
И я еще раз скажу. Рейлиб для определенного уровня игр хорош. Для тулз, некоторых апов.
Но есть факты и переписывать всю кор часть, а потоп поверх переписывать всю работу с текстурами и шейдерами.
ТО что мне пытаются тут сказать. Это == написать свой рейлиб.
GLFW \SDL я и так могу взять. RLGL прикольная вещь, но не оптимальная.
И что остается?
Но я это все к чему. рендер это сердце игры которое хочется иметь лучше. на мой вкус и на моих тестах в ловке он очень хорош.
В теории будь рендер написать вменяемо сложно. у нас было бы их много и все были бы такими хорошими. На практике человек должен уметь делать кешфрендли слайсы с нормальными аллокаторами для начала, заканчивая пониманием как работает та или иная команда opengl в конкретной спеке и что многое зависит от устройства \ драйвера\ вендора. Да и в целом предметка достаточно серьезная.
Расхождений с действительностью настолько много, что уже нет смысла продолжать.
Молодец, закидал буквами.
Snusmumriken
Это конечно пека а не мобилка 🤔
Но тут и не батчинг в единый меш
Snusmumriken
Snusmumriken
Snusmumriken
Если что, изменишь количество спрайтиков
Snusmumriken
Запустишь — перетаскиванием скрипта на raylua_s.exe
Re
Re
В среднем там 30
Snusmumriken
Но полагаю, уже сильно лучше того что было у тебя.
Snusmumriken
Re
Ты конечно молодец. Но тут 30 фпс, и есть нюанс.
Я говорил про 48 пикселей.
Snusmumriken
Snusmumriken
Кстати, ты что-то слышал про куллинг?
Сколько спрайтов единовременно видно на экране?
Cloop210
Снус разносит vi
Re
Snusmumriken
Snusmumriken
х2? х4? х8?
Snusmumriken
Ты пиксельную игру делаешь или нет?
Re
Какое у тебя масштабирование?
Оно работает в обе стороны.
Что то я уменьшаю, что то увеличиваю. Средний спрайт умешается в 48 пикселей.
самый маленький в 8. Есть маленькие в большое. Есть большое в маленькое.
Snusmumriken
Lunatic
opengl говорите
Lunatic
вы вот не знали а slang уже попал в vulkan sdk
Lunatic
Igor
А у меня тут очередная победа над сетевым стеком плойки, смог лан плей завести в некоторых играх
Igor
Сергей
https://github.com/dail8859/NotepadNext
Сергей
ого чо запилили!
Сергей
ну хотя проект уже с 19 года существует, но да не суть
.
Эм
.
notepad ++ что-ли
.
(≧∇≦)
хотя наверное все таки вскод
Сергей
ну буквально ведь написано " A cross-platform, reimplementation of Notepad++"
(≧∇≦)
(≧∇≦)
Lunatic
Скажите как из sdl3 окна получить указатели на окно и дисплей для bgfx
Lunatic
Lunatic
Сделайте мне справку что я псих и выходите за меня замуж
Михаил
Понял
о да, не только я такого мнения..
Михаил
просто куча базы
Lunatic
Xmake вместо cmake вам в руки
Lunatic
Там скрипты сборки на lua
Lunatic
И можно пакеты из Conan брать
Lunatic
Сергей
Lunatic
Xmake лучше
Lunatic
Сначала лошади потом повозки потом Феррари
Михаил
и все равно лошадь иногда бывает лучше ;)
Михаил
если сравнивать эти три штуки с GNU make, cmake, xmake
Михаил
мейкфайлы прямо нормальная система сборки
Михаил
берешь луа и скрипты хуяришь и вызываешь из него, всё, вот тебе и поиск либ удобный, и разрешение зависимостей (правда без хедеров, но то тоже можно прикрутить наверно)
Igor
Единственное, что меня в CMake не устраивает - это неадекватные сторонние разработчики библиотек, которые не умеют нормально подготавливать скрипты. Когда у тебя есть большой проект с, ну скажем, 20+ третьесторонних библиотек, заставить их компилиться вместе в том виде, в котором нужно и нравится тебе, почти нереально
Lunatic
а теперь добавьте кросс-компиляцию
Lunatic
и эти мерзкие пресеты, я прям как дед-пердед не люблю новые фичи cmake
Lunatic
40 зависимостей и у каждой нюхай пресеты
Lunatic
под каждую целевую систему кросс-компиляции
Igor
а теперь добавьте кросс-компиляцию
Тяжёлый кросс компил не проблема, это следствие проблемы криворуких разрабов. Если библиотеки написаны адекватными человеками, которые знают, что они делают, только в таком случее CMake – это дар, в остальных – проклятие
Lunatic
особо одаренные и из спичек дом построят
Igor
Мне вот допустим нихрена не весело было заставлять вот это вот дело всё заработать вместе)))
Lunatic
-- shadercomp.lua
function main(target, o)
import("lib.detect.find_program")
import("core.base.option")
import("core.project.depend")
local pk = target:pkg("vcpkg::shader-slang")
local toolsdir = path.join(path.directory(path.directory(pk:libraryfiles()[1])), "tools")
local slangc = path.join(toolsdir, "shader-slang/slangc")
local spirvcross = path.join(toolsdir, "spirv-cross/spirv-cross")
-- print(o)
o.sourcefiles = o.sourcefiles or {}
o.targets = o.targets or { { target = "spirv", profile = nil } }
-- print(#o.sourcefiles)
for i, sourcefile in ipairs(o.sourcefiles) do
local basename = path.basename(sourcefile)
local outname = path.join(target:targetdir(), basename)
os.mkdir(target:targetdir())
depend.on_changed(function()
local codegen_targets = {}
local function run_slangc(o2)
o2.entry = o2.entry or o.entry or "main"
local argv = { "-target", o2.target, "-o", outname .. "." .. o2.target }
if o2.profile then
table.append(argv, "-profile")
table.append(argv, o2.profile)
end
table.append(argv, "-entry")
table.append(argv, o2.entry)
table.append(argv, sourcefile)
os.vrunv(slangc, argv)
table.append(codegen_targets, o2.target)
end
-- code gen running
for i, target in ipairs(o.targets) do
if target.target == "gles" then
-- add gles
os.vrunv(spirvcross, {
"--es",
"--version",
target.version or "200",
outname .. ".spirv",
"--output",
outname .. ".gles",
})
table.append(codegen_targets, "gles")
else
-- print(o.targets[i])
run_slangc(o.targets[i])
end
end
-- generate header
local header_content = {}
table.insert(header_content, string.format("// Generated from %s\n", basename))
for i, target in ipairs(codegen_targets) do
local array_name = string.format("shader_%s_%s", path.filename(basename), target)
local array_content = io.readfile(outname .. "." .. target, "b")
table.insert(header_content, string.format("static const uint8_t %s[] = {", array_name))
local bytes = {}
for i = 1, #array_content do
table.insert(bytes, string.format("0x%02x", string.byte(array_content, i)))
end
table.insert(header_content, table.concat(bytes, ", "))
table.insert(header_content, "};\n")
end
io.writefile(outname .. ".h", table.concat(header_content, "\n"))
end, { files = table.join2({ "xmake.lua" }, o.sourcefiles) })
end
end
Lunatic
-- xmake.lua
add_repositories("local-repo xmake-repo")
add_rules("mode.debug", "mode.release")
add_requires("vcpkg::shader-slang", {host = true})
add_requires("vcpkg::spirv-cross", {host = true})
--add_requires("conan::sdl/3.2.14")
--add_requires("conan::bgfx/cci.20230216")
add_requires("vcpkg::sdl3")
add_requires("vcpkg::bgfx")
target("shaders")
add_packages("vcpkg::shader-slang", "vcpkg::spirv-cross")
set_kind("phony")
on_load(function(target)
target:add("includedirs", target:targetdir(), { public = true })
end)
on_config(function(target)
import("shadercomp")
shadercomp(target, {
sourcefiles = os.files("shaders/*.slang"),
targets = {
{ target = "spirv" },
{ target = "gles", version = "300" },
{ target = "glsl" },
},
entry = "fragmentMain"
})
end)
target("a")
set_kind("binary")
add_deps("shaders")
add_files("src/*.cpp")
--add_packages("conan::bgfx/cci.20230216")
--add_packages("conan::sdl/3.2.14")
add_packages("vcpkg::bgfx")
add_packages("vcpkg::sdl3")
Lunatic
bgfx, sdl, плюс компиляция шейдеров через slang
Lunatic
но conan пакеты работают лучше, в vcpkg порой прям плохо
Lunatic
мне кажется гораздо лучше чем та cmake-колбаса