WorldGrow: Generating Infinite 3D World
Проект WorldGrow представляет собой инструмент для генерации бесконечных 3D миров, размещенный на GitHub в репозитории world-grow/WorldGrow. Несмотря на ограниченное описание, проект обещает создавать масштабируемые виртуальные среды без границ, что может быть интересно для разработчиков игр, симуляторов или исследователей в области компьютерной графики. Открытый исходный код позволяет сообществу вносить вклад в развитие технологии и адаптировать ее под различные задачи.
Хотя подробная документация отсутствует, сам факт существования такого проекта указывает на растущий интерес к процедурной генерации контента в 3D-пространстве. Подобные технологии могут революционизировать создание виртуальных миров, позволяя генерировать практически неограниченные объемы контента с минимальными затратами ресурсов.
Комментарии (49)
- Метод принципиально отличается от Wave Function Collapse (WFC), хотя некоторые видят сходства в подходе.
- Главная проблема — не генерация миров как таковых, а создание интересных и структурно целостных миров на больших масштабах.
- Технические вопросы включают ограниченность памяти, отсутствие уникальных семян для удаленных тайлов и возможную неэффективность по сравнению с традиционной PCG.
- Потенциальные нишевые применения включают хоррор-среды (Backrooms, SCP-3008) и симуляторы, но практическая ценность и новизна метода ставятся под сомнение.
- Критики отмечают нереалистичность, структурную бессмысленность сгенерированных объектов и отсутствие явных преимуществ над существующими технологиями.
rlsw – Raylib software OpenGL renderer in less than 5k LOC
В файле rlsw.h представлен упрощённый API SimpleWindow для raylib, созданный для быстрой разработки оконных приложений с минимальным кодом. Основная структура SimpleWindow инкапсулирует параметры окна (ширина, высота, заголовок), а SimpleWindowEvent обрабатывает базовые события (закрытие, перемещение, изменение размера). API содержит всего 12 функций, включая swCreateWindow для инициализации, swBeginDrawing/swEndDrawing для рендеринга, и swPollEvents для обработки ввода.
Ключевое преимущество — лаконичность: весь функционал сводится к нескольким вызовам, что идеально подходит для прототипов и небольших проектов. Поддерживаются все основные платформы (Windows, Linux, macOS), а зависимость сводится к одному заголовочному файлу без необходимости линковки. Разработчики отмечают, что это решение особенно полезно для образовательных целей или когда требуется минимальная сложность без избыточных возможностей полного raylib.
Комментарии (87)
- Raylib теперь компилируется без внешних зависимостей, что делает его идеальным для встраиваемых систем и ретро-харда.
- Сообщество вспомнило, что ПО-рендеринг всегда был возможен, и теперь можно делать 2D/3D игры даже на 20-летнем железе.
- Появился спор о том, насколько полезен этот факт для разработки игр на микроконтроллерах и эмуляторах старого железа.
- Некоторые участники обсуждения отметили, что это также открывает путь к созданию игр для таких систем, как Nintendo 3DS и других портативных устройств.
- Были упомянуты проекты TinyGL и PortableGL как альтернативы, а также отмечено, что OpenGL 1.1-совместимое ПО-рендеринг всегда было возможно, но теперь это стало еще более доступным.
Matrices can be your friends (2002)
Матрицы — это мощный инструмент, а не просто набор чисел. Первые девять элементов матрицы представляют поворот объекта. Например, первые три элемента первой колонки (m[0], m[1], m[2]) — это направление оси X после преобразования. Аналогично, следующие три (m[4], m[5], m[6]) — это новая ось Y, и так далее.
Вместо того чтобы выполнять множество отдельных операций (вращение, масштабирование, перемещение), можно просто применить одну матрицу, которая объединяет все эти преобразования. Это эффективно: один вызов к glMultMatrixf() заменяет множество вызовов других функций.
Например, чтобы повернуть объект на 45 градусов вокруг оси Z и переместить его на 10 единиц по X и Y, можно использовать матрицу, где первые три элемента первых двух столбцов — это косинусы и синусы угла, а последние элементы первого и второго столбца — это координаты перемещения. Это не только проще мысленно, но и эффективнее для процессора.
Таким образом, матрицы — это не просто математическая абстракция, а практический инструмент для эффективного и интуитивного управления преобразованиями в 3D-графике.
Комментарии (87)
- Обсуждение развернулось вокруг того, как именно представлять и обсуждать матрицы: какие обозначения и соглашения используются, как они влияют на понимание и как они связаны с тем, как мы привыкли думать о линейных преобразованиях.
- Участники обсуждали, что в разных областях (математика, компьютерная графика, машинное обучение) используются разные соглашения, что может вызывать путаницу.
- Обсуждались различия между подходами "row-major" и "column-major", а также то, как разные ПО и языки программирования (например, C vs. FORTRAN) влияют на то, как мы представляем и обсуждаем матрицы.
- Также обсудили, что важно различать матрицы как сетку чисел и как линейное преобразование, и как это влияет на то, как мы думаем о таких понятиях как повороты и масштабирование.
Developing a Space Flight Simulator in Clojure
Космический симулятор на Clojure
Автор: Jan Wedekind
В 2017 г. увидев проприетарный Orbiter 2016, решил написать свой симулятор. Первые прототипы — на C и GNU Guile, потом перешёл на Clojure: immutable-данные, быстрые коллекции, многопоточность через atoms/agents/refs.
Сразу взялся за сложное: 3D-планета, атмосфера, тени, объёмные облака. Открыл «OpenGL Superbible», изучил исходники Orbiter (90 % кода — графика) и понял, что выбор верный.
**Зависимости**
- Clojure
- LWJGL: OpenGL, GLFW, Nuklear, STB, Assimp
- Jolt Physics — коллизии и машины
- Fastmath — матрицы/сплайны
- Instaparse + Gloss — парсинг NASA PCK/DAF
- Coffi — FFI
- Malli — схемы, Progrock — прогресс, Claypoole — параллельные циклы и др.
deps.edn для Linux:
```clojure
org.lwjgl/lwjgl {:mvn/version "3.3.6"}
org.lwjgl/lwjgl$natives-linux {:mvn/version "3.3.6"}
;; аналогично для opengl, glfw, nuklear, stb, assimp
Для Windows — отдельная ветка.
Атмосфера
Реализован precomputed scattering Брунетона: 2D-трансмиттанс, 2D-поверхностное рассеяние, 4D-Релея и Ми. Таблицы строятся численным интегрированием; высшие функции на Clojure интегрируют по сфере и отрезку. Пример интеграла по лучу:
(defn integral-ray
"Интеграл функции f вдоль луча"
[{::keys [origin direction]} steps distance f]
(let [step (/ distance steps)
pts (mapv #(%2 %1) (range steps) (repeat step))]
;; …
))
Проект живёт 5 лет, код открыт (CC BY-SA).
Комментарии (62)
- Пользователи восторженно встретили проект Jank, особенно его визуалы и использование Clojure без Unity/Unreal.
- Критики отметили: 90% кода — C++ (OpenGL, физика, коллизии), Clojure лишь «высокоуровневый» слой.
- Спор: «функциональный» ли код, если рендер и физика императивны; сторонники отвечают — важна логика приложения, а не движок.
- Сомнения, что indie-разработчики массово перейдут на Clojure/Jank: язык нишевой, производительность и JVM пугают.
- Практический совет: попробовать библиотеки ham-fisted, neanderthal для ускорения.
Geotoy – Shadertoy for 3D Geometry
- 3d hilbert curve
- shingles
- temple
- rusty maze
- spring
- fbm terrain
- torus knot
- dandelion
- power line
- woven WIP
- roots
- bumpy sphere
- abstract hourglass
- birdbath
- concrete tetrapod
- terraced floating island
- extruded clay bowl
- fancy shader props
- superellipse dominos
- dark souls tree
Автор всех работ: ameo
Geoscript и Geotoy — Casey Primozic, открытый код.
Комментарии (22)
- GeoToy — это «Shadertoy для геометрии»: вместо цвета пикселя функция возвращает вершины, поэтому куб рисуется 36 вызовами, а не 921 600.
- Похож на DSL для 3D-моделей; пример «temple» помогает быстрее понять синтаксис.
- Материалы задаются не кодом, а через UI (три пиктограммы → «materials») и используют трипланарное отображение без UV.
- Анимации пока нет, но пользователи просят добавить переменную вроде
iTimeиз Shadertoy. - Проект вызывает ассоциации с Structure Synth и geometry-шейдерами, но последние считаются трудными для оптимизации.