Made sure NEON builds for arm64 work as expected. Tested the biggest 12x12 block size with the least accurate compression: 2MB vs 68KB. Video of the final version on iPad vs the initial version on Mac, where I had messed up the color channels on image import:
armβs astc-encoder is one of the best documented and most straightforward libraries Iβve used. Took me a while to figure out how to build them for all Apple platforms and Android, but it was definitely worth it. It even has a progress reporting callback π
FreeType has low level access to font information and is cross platform, perfect for games. The framework will support other platforms like Windows as soon as including non-Apple binaries in Swift Packages will be possible. CoreText already uses FreeType afaik but is less low level and Apple only
I created a Swift Package that wraps the FreeType library as an Xcode framework - compatible with iOS, macOS, visionOS, tvOS and even watchOS, available via SPM. You can use it in both Swift and C. The package is battle tested, I use it in my upcoming game. Repo:
github.com/EvgenijLutz/...
My first server on raw kevent and socket api π₯Ή
Making an interactive animation timeline editor with BΓ©zier curves for UIKit and AppKit + SwiftUI bridge for a little hobby project, soon to be released
Throwing shards on hit. I feel the urge to model the full version of the enemy on the right side, it looks kind of ugly right now ngl
#gamedev
I also pack assets in a file that is optimised for fast loading now, as I planned earlier, and the results are insane - loading time is now 13-18 times faster! It takes only a fraction of a second, and itβs in debug mode, the game launching is almost instant
In January I made a lot of sketches for some game objects in @procreate.com and @nomadsculpt.com and quickly made two of them out of primitives in @blender.org to see how they look in-game. They are of course by no means final versions, but Iβm already content with their dimensions
It was surprisingly easy and straightforward to port the FreeType library to all Apple platforms. It compiles even for WatchOS! I use it to generate bitmaps for every glyph and render text in the 3D scene
Another sketch in Procreate, always loved this kind of ships because they look badass. I think Iβm going to increase the distance between the core and the first inner ring and add more details to them. Canβt wait to model it in Blender and test it in the game π
#gamedev #indiedev
First sketch made with Nomad Sculpt, it was a delightful experience. Iβm going to model it again from scratch in Blender to fine-tune it, adapt it to the gameβs requirements and draw the textures in Procreate. How much models will I create to the end of the month? Diving deeper into #Gamedev
Now we are talking π
Wanted to render explosion sprites using raster order groups and tile shading instead of built-in blending, got gpu hallucinations
#MetalAPI #gamedev
This way, Iβd only need to load all buffers and textures using Metal Fast Resource Loading. I started working on this yesterday and Iβm already halfway there πͺ
I import meshes from OBJ files, which donβt include tangents, so I generate them every time. Importing the whole scene takes less than two seconds, which is great, but I can make it much more performant by storing all mesh resources and generated data in a single file with an efficient layout.
I also accidentally fixed the tangent/bitangent space generation. It was previously calculated slightly incorrectly for some models, but now it works as it should. Look at the gladiatorβs collarbones - they had a seam that wasnβt supposed to be there, and the normal map itself looked totally wrong.
I didnβt think I could easily interpolate back and forth between perspective and orthogonal projections just by interpolating every component of the projection matrices. I donβt need it, but hey, it looks pretty dang good.
The most low-level logic is wrapped in a convenient Swift interface and it works β¨fabulousβ¨
I've learned so much and made huge improvements in the past six months and itβs definitely the most complex thing Iβve ever developed. Now Iβm bringing the game to live. Fingers crossed
There is a custom task manager to parallelize tasks and the main engine logic is isolated to custom Swift global actor with an executor that schedules work on task managers primary queue. The entry point is available from both SwiftUI, UIKit and AppKit.
The engine is written for iOS and macOS in C++ 20, Objective-C and Swift 6 including interoperability with C++; it uses Metal API to render graphics and soon the PHASE framework for audio backend.
The vast majority of features are implemented, now I render skybox and instantiate meshes, use PBR without limitations to the number of lights, have a basic ECS system, process user input, cast rays from the camera, perform ray-box and box-box intersection tests and much more.
Never been as proud of myself as I am right now. Looks like I'm finally ready to move on from this test scene and start creating the actual game content.
#Gamedev #MetalAPI
Eight fallen yellow and orange leaves aligned in two rows and placed each on the center of their tile on a sidewalk
Feeling like a monk today
I've released a TagView for SwiftUI and UIKit, available for iOS 13 and newer on GitHub: github.com/EvgenijLutz/...
Implementing a tag view in pure SwiftUI never gave me good results, and existing solutions also were not good enough for me. So I made my own implementation, give it a try π