arctic-engineers-club

Open full view…

Блог проекта Cruel Truck

f1af
Tue, 07 May 2019 08:02:30 GMT

Вчерашние беседы натолкнули меня на мысль тряхнуть стариной и возобновить разработку своего проекта. Мне пришла очень интересная идея, которую хочется опробовать. Вчера я был в строй-магазине и обратил внимание на то, как подрагивает мини-погрузчик во время движения. Это даёт ощущение его массы. Сразу понятно что колёса у него жёсткие и весит он тонны две. Но от куда берутся эти подрагивания? - в соответствии с микрорельефом пола в гипермаркете. И тут меня осенило! Микрорельеф! Это же как specular map, только не для лучей света, а для расчёта внешних сил, приложенных к колесам! Берём rbg с текстуры пола в магазине (отдельным слоем специально кладём "невидимую текстуру" с микрорельефом), используем rgb как xyz - вектор силы, умножаем его на скорость, массу и мягкость колёс и получаем значение внешней силы, которую нужно приложить к колесу в данной точке покрытия! Так же сюда можно прикрутить и скользоту, ещё на одной дополнительной невидимой текстуре покрытия. Но высший пилотаж будет если получится рисовать по этим невидимым текстурам след от колёс там где проехалось а вто. К примеру чтобы там где ты проехался - оставалась колея, очень скользкая, и с такими векторами силы, чтобы попав в эту колею было очень трудно из неё выехать. Физика будет реализована как 2d. За основу будет взят старый проект "LessMess" (https://github.com/f1af/LessMess). Язык программирования: AngelScript. Движок: Urho3D. Буду писать сюда о том как движется прогресс.

Huldra
Thu, 09 May 2019 07:21:34 GMT

Тем что это не параметр а константа теперь и будет несколько разных инстансов функции для каждого значения свой, оптимизатор это увидит

f1af
Thu, 09 May 2019 08:14:23 GMT

Это типа того? class Aaa { const DrawBlendingMode kBlendingMode_; Aaa(DrawBlendingMode kBlendingMode) : kBlendingMode(kBlendingMode_) {} void DrawTrianglePart(Rgba *dst, Si32 stride ...) { if (kBlendingMode_ == blending) { ... } } };

f1af
Thu, 09 May 2019 08:16:40 GMT

и всё равно не понятно в чём профит. оптимизатор это увидит и что? у нас так была одна функция в памяти: void DrawTrianglePart(DrawBlendingMode kBlendingMode ...) со всеми ифами внутри А так у нас теперь куча таких функций в памяти, где лишние if-ы урезаны, зато общие куски кода раскопированы. В чём же тут оптимизация?

Huldra
Thu, 09 May 2019 10:05:31 GMT

Ты все в кучу свалил: память, ифы, оптимизацию. Причём тут память? У меня ее 16 гигабайт.

f1af
Thu, 09 May 2019 12:47:32 GMT

Ты так и не ответила: - где ты такой трюк подсмотрела? - в чём профит? Читая твой код, я думаю: это ж как надо нелюбить, ненавидеть Майерса, Шилдта и всех своих преподавателей в университете, чтобы после выпуска "сделать всё по-своему", всем на перекор. Это как говорится "на зло бабушке отморожу уши".

Huldra
Thu, 09 May 2019 15:12:11 GMT

А у меня, кстати, даже фотка где-то была на которой мы с Майерсом обсуждаем С++ после его выступления ~:Р Очень крутой дядя!

Huldra
Thu, 09 May 2019 15:14:19 GMT

Не знаю я где какой трюк впервые встретила, сами трюки бы не забыть! Профит в том, что для каждого пикселя будет выполняться меньше инструкций

f1af
Thu, 09 May 2019 16:37:03 GMT

Даёшь фотку на f1ufx0000@gmail.com? )

f1af
Thu, 09 May 2019 16:40:32 GMT

Эээ вообще то jump в асемблере отличается от call как раз тем, что call, т.е. вызов метода, создаёт новый локальный стек, и на это идут расходы. jump, т.е. if на Си, не вызывает никаких расходов. Так что инструкций будет ровно на одну ассемблерную команду меньше. Это ни что по сравнению с тем, на сколько сильно усложнился твой код, и на сколько больше он теперь будет сьедать оперативки, раскопировав общие куски кода в методе DrawTriangle

f1af
Thu, 09 May 2019 16:47:58 GMT

У тебя кстати inline-ы работают? Сколько дают производительность в плюс по сравнению если бы inline-ов не было?

f1af
Thu, 09 May 2019 16:48:37 GMT

Просто с компилятором обычно приходиться повозиться ещё чтобы он инлайны не игнорировал..

f1af
Thu, 09 May 2019 16:49:11 GMT

Поэтому эту тему всегда нужно тестировать.. реально ли инлайны работают.

Huldra
Thu, 09 May 2019 18:14:17 GMT

> @f1af > Так что инструкций будет ровно на одну ассемблерную команду меньше. Это ни что по сравнению с тем, на сколько сильно усложнился твой код, и на сколько больше он теперь будет сьедать оперативки Да при чем тут оперативка? Напоминаю, у меня ее 16 гигабайт, на Raspberry Pi ее 1 гигабайт. Почему на одну инструкцию? как ты так посчитал? Сравнить переменную с false и сделать условный переход - это как минимум 2 инструкции, а может быть и больше, если переменная не в регистре. Если условный переход будет неправильно предсказан процессором, весь конвеер процессора будет опустошен, это еще несколько инструкций. И так на каждый пиксель.

Huldra
Thu, 09 May 2019 18:15:17 GMT

> @f1af > У тебя кстати inline-ы работают? Сколько дают производительность в плюс по сравнению если бы inline-ов не было? Это же почти бесполезная инструкция, оптимизатор сам делает inlining когда считает нужным, даже если не писать inline.

f1af
Fri, 10 May 2019 13:34:31 GMT

Я не буду судить, права ты или нет. Слишком геморно долго и без профита разбираться в твоих заблуждениях. Тут главное - профит. Если ты напишешь то, что даёт реально ценное для людей на выходе - значит весь мир ошибался а ты была права. Ставь себе цели и сроки их выполнения. Мне кажется, что ты ставишь себе ну слишком маленькие цели. Типа "сделать текстурированный прямоугольник который на wasd передвигается по монитору". Это черезвычайно мелко. Одна из харастиристик движка - это скорость его работы. Ведь красота картинки может сильно варьироваться от таланта художника, а не крутизны движка. Тебе нужено встроить в движок профайлер а так же валидаторы расхода памяти. И задачи ставить себе соответствующие: одновременно отрисовать столько то так то двигающихся человечков. Ты сможешь больше если будешь правильно выбирать себе цели. Слишком большие - плохо, но и слишком маленькие - тоже плохо.

Huldra
Fri, 10 May 2019 13:58:34 GMT

Мои цели измеряются в играх, сделанных на Arctic Engine и в разработчиках, его использующих.

f1af
Fri, 10 May 2019 15:34:59 GMT

В таком случае что можно считать законченной игрой?

f1af
Fri, 10 May 2019 15:36:58 GMT

И входит ли в число разработчиков, ну например, художник, бухгалтер и шофёр (что возит молоко и печеньки в офис) фирмы, которая будет использовать AE?

f1af
Fri, 10 May 2019 15:37:53 GMT

Или ты думаешь, что разработчикам, пишущим на AE, не нужны молоко и печеньки?

Huldra
Fri, 10 May 2019 16:04:22 GMT

законченной? А это тут при чем? Читай внимательно: использующих Arctic Engine разработчиках. Водитель это другая область деятельности. Можно быть и днём водителем, ночью разработчиком, но это другое. Почему то тебе в голову не приходит называть водителя президента тоже президентом, вот и тут так.

next
last page