frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Open in hackernews

Video Game Blurs (and how the best one works)

https://blog.frost.kiwi/dual-kawase/
260•todsacerdoti•3d ago

Comments

jtxt•21h ago
I like the progressive example toys. Thanks!
mrandish•20h ago
I really like the content but the text blocks being justified makes it more difficult to read than it needs to be.
FrostKiwi•16h ago
First time hearing this! I added a URL parameter `noJustify`, which removes text-justification. Eg. https://blog.frost.kiwi/dual-kawase/?noJustify

I'm not sure either way, would you say this makes it easier to read and I should make it the default?

npteljes•16h ago
Justified, in general, looks neater, is more formal, but is a bit more harder to read as well. I personally have no issue with it either way, but to tell you the truth, from a quick check I could not find any website that uses justified text, not even the ones that I think are formal and professional. Reuters, APNews, Wikipedia, Wordpress, Medium, everything I checked is unjustified. So I think it's a conventional default, if nothing else.
gyomu•15h ago
If you take a typography class, they will drill it into you that unjustified is the norm (and you will spend some time learning how to make pleasant rags), and that you need a VERY GOOD reason to make text justified.

How much of it is convention vs based in measurable outcomes is up for debate (maybe), but at least that’s where most every formally trained designer/visual artist in the west comes from.

cubefox•14h ago
After the printing press, but before the Internet, justified text was actually the norm. Every book, newspaper and magazine had justified text. But after hundreds of years, text justification has finally fallen out of favor. We can only speculate about the reason.
bregma•13h ago
I disagree. Fully justified text was the norm for narrow-column media such as newspapers and some magazines. Ragged-right was the norm for wider media such as printed books because, for physiological reasons discovered over centuries, it's easier to keep your place in long paragraphs. Most web media are narrow-column format, so tend to be fully justified. Whether that's good or not tends to be a matter of how one is consuming the matter: a high-pixel-density phone at 15 cm vs. a 1080p monitor at 45 cm call for different presentation for optimal readability.
FrostKiwi•13h ago
My blog's style has Sakura.css [1] as its base, which keeps the paragraphs narrow on wide displays, limited 684 CSS pixels to aid readability. The justify text-style was a choice by me. Now I really wonder whether that hurt readability.

[1] https://github.com/oxalorg/sakura

cubefox•7h ago
Enabling automatic CSS hyphenation would reduce the often rather wide word gaps in justified text.
Sharlin•12h ago
> Ragged-right was the norm for wider media such as printed books

What? I'm pretty sure that if I pick any book in my shelf, it's going to be justified.

> Most web media are narrow-column format, so tend to be fully justified.

What #2? 99% of web media is ragged-right, the biggest reason being that it's the default, and that browsers have terrible line-wrapping and historically had no support for hyphenation. And justified text gets worse the shorter the lines are, because there are fewer options on where to insert newlines, leading to large spaces between words. Also, good justification requires fine-grained word spacing control, which doesn't work well with traditional low-resolution displays.

My MSc thesis advisor recently told that apparently thesis documents should be submitted with ragged-right lines these days because it makes them easier to read for dyslexics; while it makes sense, it must be a quite new guideline.

misternintendo•12h ago
ragged right became the web norm because browsers lacked good hyphenation, making justified text look gappy. In print it works fine, but online ragged right tends to be easier to read.
cubefox•7h ago
But CSS has hyphenation for quite a while now. It's probably not worse than the hyphenation in Microsoft Word during the 1990s.
npteljes•12h ago
I looked at random, recent printed media around me, and it's all still justified.

On displays, readability works out differently, and that's why I speculate this has changed. For example, printed media uses serif fonts to aid readability, but on displays, sans-serif works better, especially on lower resolutions.

npteljes•12h ago
I have not taken a typography class, but norm seems to be context dependent. On the internet, unjustified seems to be the norm, looking at the random high-traffic websites I visited. Printed media is another beast though. I picked up a random book, justified, random newspaper, justified, random marketing material from my mailbox, justified.

So in this current case, since OP's blog is on the internet and not printed, I would suggest unjustified.

black_knight•15h ago
I for one love justified text. Even on websites. For a book, it almost decides whether I will read it. I can’t with the ragged edges on non-justified text.
mrandish•5h ago
Thanks! I think it makes it easier to read. Personally, I would make it the default as it is more the norm on today's web but, of course, myriad counter examples exist and opinions will vary.
djmips•1h ago
I guess my eyes are geared to noJustify - I was wondering what was up but didn't realize it was the justification. Much better with /?noJustify
etrvic•20h ago
A great video on a similar subject: https://m.youtube.com/watch?v=v9x_50czf-4
Joel_Mckay•20h ago
Acerola does some fun projects, but his optimized grass rant was the funniest thing I saw in years. =3
apbytes•17h ago
This is a really well written blog, great work!
FrostKiwi•17h ago
Author here, Thank you very much for linking! Masaki Kawase is a bit of a graphics programming idol of mine. Living in Japan, I got to interview him on a zoom call about what it was like being a graphics programmer in those adventurous times 1999~2005 of the Japanese video game scene.

This kick-started by desire to write about the Dual-Kawase Blur, a technique I stumbled upon when ricing my linux distro.

dejobaan•6h ago
Fantastic piece. I love stuff with interactivity; and the comparison between blur types is great, as your eye can evaluate them side-by-side. Thanks for putting it together!
Const-me•4h ago
Good article, but it uses less than ideal formula for weights of the gaussian blur kernel.

Gaussian function for coefficients is fine for large sigmas, but for small blur radius you better integrate properly. Luckily, C++ standard library has std::erf function you gonna need for the proper formula. Here’s more info: https://bartwronski.com/2021/10/31/practical-gaussian-filter...

exDM69•16h ago
Has anyone got suggestions for blur algorithms suitable for compute shaders? The usual Kawase blur (described in the article) uses bilinear sampling of textures.

You can, of course, implement the algorithm as is on a compute shader with texture sampling.

But I have a situation where the inputs and outputs should be in shared memory. I'm trying to avoid writing the results out to off-chip DRAM, which would be necessary to be able to use texture sampling.

I spent some time looking into a way of doing an efficient compute shader blur using warp/wave/subgroup intrinsics to downsample the image and then do some kind of gaussian-esque weighted average. The hard part here is that the Kawase blur samples the input at "odd" locations but warp intrinsics are limited to "even" locations if that makes sense.

I would appreciate if anyone knows any prior art in this department.

stevage•16h ago
Pretty amazing writeup.

I didn't really understand why every image is slowly moving around. It says:

> Above the box you have an Animate button, which will move the scene around to tease out problems of upcoming algorithms. Movement happens before our blur will be applied, akin to the player character moving.

I don't really understand the explanation - the movement just seemed a bit annoying.

FrostKiwi•16h ago
Once Multi-Step Downsampling comes into the mix, the image starts to "boil" as it moves. This is especially bad with very strong lights that are small, as the lights seem to appear and disappear with long downsample chains. Most of the recent blur technique evolution centered on fixing this issue, as shown in "Next Generation Post Processing in Call of Duty: Advanced Warfare" at the end of the article.

This is not the first time [1] I hear this critique of movement by default being annoying. Should I just turn it off by default?

[1] https://news.ycombinator.com/item?id=42191709

nopassrecover•14h ago
Personally it was why I noticed the interactivity of the post, and I thought it was really cool.
efilife•7h ago
I object. Keep it the default, if only for the first interactive part. Don't cater to a minority that can't understand plain english

I don't understand its explanation therefore it's annoying

npteljes•16h ago
Do you know what aliasing is in a game? When the edges are too sharp? They can look okay in a still image, but they are really noticeable when things are in motion. Another such example is the moire effect. Moire is very noticeable in still images too, but when moving, it's really noticeable.

These blur effects, like any other graphical thing, can have a similar effect when combined with motion. The animate function is to bring these issues out, if there is any.

DrNosferatu•16h ago
How does this compare to Spherical Harmonic Lighting?
FrostKiwi•16h ago
These are unrelated techniques.

Spherical Harmonic Lighting is an alternative or used to supplement the generation of HDR cube maps for the purpose of global illumination. For the very diffuse aspect of this global illumination, Spherical Harmonics are used (Often called light probes), as a very cheap approximation of the environment, that is easy to get in and out of shaders and interpolate between them. They are just a bunch of RGB floats, so you can place a ton of them in the environment to capture a scene's direct or indirect lighting. For specular reflections you still have to use HDR cube maps, as the light probes don't hold enough information for that task.

Blurs are a basic building block of image processing and used in a ton of effects. In a way, there are related topics, as the cube maps generated to cover different roughness factors for PBR rendering are, in-fact blurs! https://threejs.org/docs/#api/en/extras/PMREMGenerator But that's not the topic of the article, but instead of how to do blurs efficiently in real time, in the first place.

01HNNWZ0MV43FF•11h ago
You can also use SH to bake directional shadows into meshes, though I'm not sure if I've seen it in a game, just in tech demos
ad-astra•16h ago
Thank you so much! Love the interactive examples.
alexanderameye•13h ago
Very nice post! Thanks for writing, I love how detailed it goes.

I use box/gaussian blurs often, but for rendering outlines/highlights of objects.

https://ameye.dev/notes/rendering-outlines/#blurred-buffer

codeflo•12h ago
The Kawase approach is from 2005, and GPU performance has improved a ton since then. Some of the newer games do use Bokeh blurs with multiple depths of field. The result can look much more natural than the Gaussian stuff. BTW, it's not just a cinematic effect -- the fact that our pupils are round means that like cameras, they act as a disk-shaped filter for things that are out of focus.

Here's a breakdown of how Doom (2016) does it: https://www.adriancourreges.com/blog/2016/09/09/doom-2016-gr...

FrostKiwi•11h ago
I'm a huge Adrian fan boy <3

Yes, bokeh blur is way more pleasing. In my article the gaussian likes are the focus for their use as a basic building block for other effects, like frosted glass, heat distortions, bloom and the like.

Specifically the 2015 Dual Kawase was created in the context of mobile graphics, with weak memory throughput. But even on my RTX 4090, near the fastest consumer hardware available, those unoptimized unseparable, naive gaussian implementations bring it to a crawl and `samplePosMultiplier` has a non insignificant performance hit, so texture caches still play a role.

At today's high resolutions and especially on mobile, we still need smart and optimized algorithms like the dual kawase.

hulium•10h ago
The part about low-pass filtering using FFT ends with the conclusion that it is fundamentally a different thing from a gaussian blur ("Low Pass Filter ≠ Low Pass Filter"). However: A convolution in image space is just a multiplication in fourier space. If you multiplied with a gaussian in fourier space you should get a gaussian blur. It's just not necessarily the fastest option.
Leszek•6h ago
The Dual-Kawase blur sounds like a texture-sampling-efficient variant of building a Gaussian pyramid (https://en.wikipedia.org/wiki/Pyramid_(image_processing))?
NeotokyoFan•3h ago
I'd like to give a shout out to Neotokyo, one of the best HL2 mods still regularly played. The soundtrack is amazing too. Sadly it's not maintained anymore and playing tends to be done in the weekends and friday nights.

If you've ever seen Ghost in the Shell or like cyberpunk stuff and don't mind a first person shooter in a universe like that? Prepare to have a lot of fun getting your butt kicked in by veterans.

The community deserves a remake. ;-)

gorfian_robot•2h ago
hmm. I always turn this off whenever possible.

Utah's hottest new power source is 15k feet below the ground

https://www.gatesnotes.com/utahs-hottest-new-power-source-is-below-the-ground
124•mooreds•3h ago•74 comments

How the "Kim" dump exposed North Korea's credential theft playbook

https://dti.domaintools.com/inside-the-kimsuky-leak-how-the-kim-dump-exposed-north-koreas-credent...
153•notmine1337•4h ago•20 comments

A Navajo weaving of an integrated circuit: the 555 timer

https://www.righto.com/2025/09/marilou-schultz-navajo-555-weaving.html
60•defrost•3h ago•9 comments

Shipping textures as PNGs is suboptimal

https://gamesbymason.com/blog/2025/stop-shipping-pngs/
41•ibobev•3h ago•15 comments

I'm Making a Beautiful, Aesthetic and Open-Source Platform for Learning Japanese

https://kanadojo.com
37•tentoumushi•2h ago•11 comments

C++26: Erroneous Behaviour

https://www.sandordargo.com/blog/2025/02/05/cpp26-erroneous-behaviour
12•todsacerdoti•1h ago•8 comments

Troubleshooting ZFS – Common Issues and How to Fix Them

https://klarasystems.com/articles/troubleshooting-zfs-common-issues-how-to-fix-them/
14•zdw•3d ago•0 comments

A history of metaphorical brain talk in psychiatry

https://www.nature.com/articles/s41380-025-03053-6
10•fremden•1h ago•2 comments

Qwen3 30B A3B Hits 13 token/s on 4xRaspberry Pi 5

https://github.com/b4rtaz/distributed-llama/discussions/255
277•b4rtazz•13h ago•115 comments

Over 80% of Sunscreen Performed Below Their Labelled Efficacy (2020)

https://www.consumer.org.hk/en/press-release/528-sunscreen-test
87•mgh2•4h ago•79 comments

We hacked Burger King: How auth bypass led to drive-thru audio surveillance

https://bobdahacker.com/blog/rbi-hacked-drive-thrus/
272•BobDaHacker•10h ago•148 comments

The maths you need to start understanding LLMs

https://www.gilesthomas.com/2025/09/maths-for-llms
454•gpjt•4d ago•99 comments

Oldest recorded transaction

https://avi.im/blag/2025/oldest-txn/
135•avinassh•9h ago•59 comments

What to Do with an Old iPad

http://odb.ar/blog/2025/09/05/hosting-my-blog-on-an-iPad-2.html
40•owenmakes•1d ago•27 comments

Anonymous recursive functions in Racket

https://github.com/shriram/anonymous-recursive-function
46•azhenley•2d ago•12 comments

Stop writing CLI validation. Parse it right the first time

https://hackers.pub/@hongminhee/2025/stop-writing-cli-validation-parse-it-right-the-first-time
56•dahlia•5h ago•20 comments

Using Claude Code SDK to reduce E2E test time

https://jampauchoa.substack.com/p/best-of-both-worlds-using-claude
96•jampa•6h ago•66 comments

Matmul on Blackwell: Part 2 – Using Hardware Features to Optimize Matmul

https://www.modular.com/blog/matrix-multiplication-on-nvidias-blackwell-part-2-using-hardware-fea...
7•robertvc•1d ago•0 comments

GigaByte CXL memory expansion card with up to 512GB DRAM

https://www.gigabyte.com/PC-Accessory/AI-TOP-CXL-R5X4
41•tanelpoder•5h ago•38 comments

Microsoft Azure: "Multiple international subsea cables were cut in the Red Sea"

https://azure.status.microsoft/en-gb/status
100•djfobbz•3h ago•13 comments

Why language models hallucinate

https://openai.com/index/why-language-models-hallucinate/
133•simianwords•16h ago•147 comments

Processing Piano Tutorial Videos in the Browser

https://www.heyraviteja.com/post/portfolio/piano-reader/
25•catchmeifyoucan•2d ago•6 comments

Gloria funicular derailment initial findings report (EN) [pdf]

https://www.gpiaaf.gov.pt/upload/processos/d054239.pdf
9•vascocosta•2h ago•6 comments

AI surveillance should be banned while there is still time

https://gabrielweinberg.com/p/ai-surveillance-should-be-banned
461•mustaphah•10h ago•169 comments

Baby's first type checker

https://austinhenley.com/blog/babytypechecker.html
58•alexmolas•3d ago•15 comments

Qantas is cutting executive bonuses after data breach

https://www.flightglobal.com/airlines/qantas-slashes-executive-pay-by-15-after-data-breach/164398...
39•campuscodi•2h ago•9 comments

William James at CERN (1995)

http://bactra.org/wm-james-at-cern/
13•benbreen•1d ago•0 comments

Rug pulls, forks, and open-source feudalism

https://lwn.net/SubscriberLink/1036465/e80ebbc4cee39bfb/
242•pabs3•18h ago•118 comments

Rust tool for generating random fractals

https://github.com/benjaminrall/chaos-game
4•gidellav•2h ago•0 comments

Europe enters the exascale supercomputing league with Jupiter

https://ec.europa.eu/commission/presscorner/detail/en/ip_25_2029
50•Sami_Lehtinen•4h ago•34 comments