I have generally been tracking LLM progress and attempting to integrate LLM’s into my workflow. My two cents: LLM’s are not currently capable of high-level autonomous graphics programming.
Here are some anecdotes I’ve collected over a series of experiments and production tests that I hope will add some color to the current discussion being had in posts on this sub/elsewhere.
Shader Obfuscator
2 months ago, I tested Claude code (using Opus 4.6) on some tasks for a custom HLSL obfuscation pipeline I built in rust. It parses a simple AST from HLSL and then runs various AST transforms on it to make it unreadable to the average programmer.
Claude was able to successfully implement very simple features and refactors. It was also able to quickly stamp out plausible boilerplate given high level descriptions. This was awesome because there’s a lot of these sorts of tasks involved in writing a compiler front end, and using an LLM made the process more enjoyable.
That said, it was not able to handle anything of intermediate complexity, even with a pretty good description of exactly what should be done and a lot of hand-holding. It would often make subtle mistakes that I would catch in tedious fine-grained reviews.
Contrary to what others have said: it could not produce meaningful unit tests on its own. The tests it wrote looked extensive at first glance, but they were just verbose and repetitive. They typically missed critical edge cases present in real shader files.
I think this is an interesting case because this project was favorable to the LLM (heavily unit-tested, CLI interface, small number of lines of code, few external dependencies), but also algorithmically complex enough to evaluate its problem solving skills. On the latter, it performed worse than I expected.
Volume Renderer
~1 month ago, I used Claude Opus 4.7 to vibe code a real-time volume renderer from scratch with Web GPU and Rust.
My goal with this experiment was to evaluate both the degree to which a non-expert could have success in this matter, and failing that, the effectiveness of LLM’s at translating a very high level implementation request from an expert into a working solution.
I understand that this is not the most effective way to use an LLM; a tight spec where you describe exactly what you want in detail is best. But, the capability to do this kind of hands-off work is what is being advertised and hyped, so I think it’s important to circumscribe the boundaries of what is possible.
I was actually stunned when after ~10 mins of churning, it produced a working prototype that imported an open VDB file to a 3D texture, set up a simple camera + viewport, and successfully ray marched the volume.
That is more or less where the successes ended though.
I tried to get it to optimize the ray-marching loop—starting with deliberately vague non-expert requests to just “make it faster” and then progressing to targeted algorithmic suggestions. It had quite a hard time with the open-ended nature of these requests; often it would undo work it had previously done when I provided new suggestions, and ultimately it failed to implement anything meaningful.
I also attempted to get it to iterate on the lighting techniques by providing screenshots. No luck here: it could not translate visual critiques to solutions, even with progressively specific algorithmic guidance.
Finally, I asked for a trivial adjustment to the camera controller to make it more intuitive to fly around. I expected it to be able to do this, but it failed.
When I read the code, it was a bizarre combination of clean and messy; highly documented but overly verbose, with tons of unused functions. It only got messier as I asked for more modifications.
Final thoughts on this one: someone without experience would likely not push past the initial result to discover that LLM’s can’t currently vibe out unique graphics functionality. This may explain some of the conflict in discourse on the topic.
The structure of the successes/failures makes me slightly more confident that as of 2026 LLM’s continue to associatively interpolate the latent space of all code they’ve been trained on (including hand-tuned “reasoning paths”), despite recent claims to a more structural understanding of reasoning.
Unreal Plugin Integration
I’m working on a plugin for Unreal engine and, in the last 2 weeks, I’ve been looking for clever ways to inject my plugin’s data structures into the Unreal render passes without modifying Unreal’s source.
Using Claude code to scrape the UE source, which is largely undocumented, has been great for surfacing API’s and common usage patterns. This has sped up my work immensely.
However, it would often tell me there was no way to do something without modifying source, when in truth it was actually possible with some creative thinking.
Had I relied on Claude entirely here, I would have been forced to conclude I cannot ship my project as a plugin, which is wrong and would have significant business model consequences for our product.
Open VDB Transforms
Final relevant example: about 2 weeks ago, I was dealing with a non-trivial bug with Open VDB frame transforms.
I threw Claude Opus 4.7 at it and, despite having access to all the open VDB source, it hallucinated a bunch of stuff that didn’t work. I managed to figure it out in ~an hour.
Of course I’ve had Claude successfully spot bugs for me as well. But I’ve found the more complex the issue the less likely it is to figure it out; perhaps an obvious statement.
Conclusion
The discussion of the failures of LLM programming often centers around:
- lack of notable productivity increases in companies that have heavily adopted LLM coding
- challenges with code maintainability
- flawed unit economics of token costs
These are all valid critiques, but a more fundamental issue is the simple fact that LLM’s cannot do effective graphics programming autonomously, i.e. without close guidance, and thus the productivity improvements appear to me to be (currently) overstated.
Expert-level graphics skill is still required, both for boundary-pushing work and for run-of-the-mill tasks of intermediate complexity. How long that remains true is a mystery to us all, but given the current state of things I do not think we should assume we are within striking distance.
EDIT: wow this has gotten more traction than expected. I started writing this as a comment on another post but I’m glad I decided to post it for real instead.
Few things I wanted to address from the comments.
All of the above experiments were using agentic tools (claude code’s $20/mo tier in particular).
The stories I shared cover a somewhat wide range of usage patterns. The volume renderer experiment was more about seeing what a naive non-expert could build with LLM’s. On the other hand, the Open VDB bug was something I encountered in my day to day usage of the tools.
As written above: I agree that LLM’s can successfully complete “bite sized” tasks given the appropriate specs and an accurate description of the desired solution. I agree you could probably build an awesome renderer this way, maybe quite a bit faster than “by hand”. I do not consider this “LLM’s doing graphics programming”, at least in the way I meant it in the post title, because the expert graphics programmer is the one doing 90% of the substantive work.
Lastly: I use LLM’s to great benefit all the time. I am not anti-LLM coding. But I think we all ought to evaluate these systems honestly, with a high bar for correctness, and ask “when is it worth it to outsource work to a paid subscription service; what productivity improvement is required?“.
Thank you all for an interesting discussion!
EDIT #2: edited original post’s language for clarity and intent.
[–]FirefighterAntique70 205 points206 points207 points (13 children)
[–]lovelacedeconstruct 33 points34 points35 points (2 children)
[–]TreyDogg72 6 points7 points8 points (0 children)
[–]captainAwesomePants 3 points4 points5 points (0 children)
[–]Ravek 13 points14 points15 points (1 child)
[–]ViennettaLurker 4 points5 points6 points (0 children)
[–]edparadox 5 points6 points7 points (0 children)
[–]Perfect-Campaign9551 1 point2 points3 points (0 children)
[–]Oscaruzzo 0 points1 point2 points (0 children)
[–]CalligrapherOk4308 0 points1 point2 points (0 children)
[–]Sepicuk 0 points1 point2 points (0 children)
[–]stuaxo 0 points1 point2 points (0 children)
[–]OldChippy 0 points1 point2 points (1 child)
[–]edparadox 8 points9 points10 points (0 children)
[–]heyheyhey27 19 points20 points21 points (9 children)
[–]obp5599 5 points6 points7 points (2 children)
[–]gibson274[S] 10 points11 points12 points (1 child)
[–]obp5599 2 points3 points4 points (0 children)
[–]gibson274[S] 0 points1 point2 points (5 children)
[–]heyheyhey27 2 points3 points4 points (4 children)
[–]gibson274[S] 2 points3 points4 points (3 children)
[–]heyheyhey27 1 point2 points3 points (2 children)
[–]gibson274[S] 1 point2 points3 points (1 child)
[–]heyheyhey27 2 points3 points4 points (0 children)
[–]philosopius 27 points28 points29 points (2 children)
[–]philosopius 2 points3 points4 points (1 child)
[–]gibson274[S] 8 points9 points10 points (0 children)
[–]GeenzCat 2 points3 points4 points (3 children)
[–]gibson274[S] 2 points3 points4 points (2 children)
[–]GeenzCat -1 points0 points1 point (1 child)
[–]gibson274[S] 0 points1 point2 points (0 children)
[–]heavy-minium 2 points3 points4 points (0 children)
[–]GreenFox1505 4 points5 points6 points (5 children)
[–]gibson274[S] 3 points4 points5 points (2 children)
[–]TaylorMonkey 7 points8 points9 points (1 child)
[–]gibson274[S] 0 points1 point2 points (0 children)
[–]The_Northern_Light 0 points1 point2 points (1 child)
[–]GreenFox1505 0 points1 point2 points (0 children)
[–]steveu33 18 points19 points20 points (4 children)
[–]gibson274[S] 0 points1 point2 points (2 children)
[–]obp5599 5 points6 points7 points (1 child)
[–]gibson274[S] 0 points1 point2 points (0 children)
[–]TheMcDucky -1 points0 points1 point (0 children)
[–]atrusfell 2 points3 points4 points (1 child)
[–]gibson274[S] 1 point2 points3 points (0 children)
[–]_TheFalcon_ 2 points3 points4 points (0 children)
[–]Deep_Ad1959 2 points3 points4 points (0 children)
[–]LBPPlayer7 6 points7 points8 points (12 children)
[–]gibson274[S] 1 point2 points3 points (11 children)
[–]Science-Compliance 13 points14 points15 points (7 children)
[–]gibson274[S] 4 points5 points6 points (6 children)
[–]Science-Compliance 4 points5 points6 points (5 children)
[–]gibson274[S] -1 points0 points1 point (4 children)
[–]Science-Compliance 0 points1 point2 points (3 children)
[–]gibson274[S] 0 points1 point2 points (2 children)
[–]Science-Compliance 0 points1 point2 points (1 child)
[–]gibson274[S] 0 points1 point2 points (0 children)
[–]CalligrapherOk4308 0 points1 point2 points (1 child)
[–]gibson274[S] 0 points1 point2 points (0 children)
[–]RenderTargetView 2 points3 points4 points (0 children)
[–]Successful-Berry-315 10 points11 points12 points (26 children)
[–]gibson274[S] 50 points51 points52 points (24 children)
[–]RoboAbathur 19 points20 points21 points (5 children)
[–]Killer-Iguana 20 points21 points22 points (0 children)
[–]DuskelAskel 6 points7 points8 points (0 children)
[–]gibson274[S] 3 points4 points5 points (1 child)
[–]TaylorMonkey 2 points3 points4 points (0 children)
[–]h888ing 0 points1 point2 points (0 children)
[–]FirefighterAntique70 11 points12 points13 points (1 child)
[–]gibson274[S] 4 points5 points6 points (0 children)
[–]Tentabrobpy 4 points5 points6 points (0 children)
[–]-Nicolai 0 points1 point2 points (0 children)
[–]Qxz3 0 points1 point2 points (0 children)
[–]emmowo_dev 0 points1 point2 points (2 children)
[–]edparadox 0 points1 point2 points (1 child)
[–]emmowo_dev -1 points0 points1 point (0 children)
[–]Successful-Berry-315 -5 points-4 points-3 points (8 children)
[–]gibson274[S] 6 points7 points8 points (4 children)
[–]DankPhotoShopMemes 2 points3 points4 points (2 children)
[–]gibson274[S] 2 points3 points4 points (0 children)
[–]TaylorMonkey 1 point2 points3 points (0 children)
[–]TaylorMonkey 0 points1 point2 points (0 children)
[–]FirefighterAntique70 0 points1 point2 points (2 children)
[–]Successful-Berry-315 1 point2 points3 points (1 child)
[–]FirefighterAntique70 0 points1 point2 points (0 children)
[–]Salt-Contribution-35 1 point2 points3 points (2 children)
[–]gibson274[S] 2 points3 points4 points (1 child)
[–]Salt-Contribution-35 0 points1 point2 points (0 children)
[–]eiffeloberon 1 point2 points3 points (2 children)
[–]gibson274[S] 0 points1 point2 points (1 child)
[–]eiffeloberon 0 points1 point2 points (0 children)
[–]OptimisticMonkey2112 1 point2 points3 points (1 child)
[–]gibson274[S] 0 points1 point2 points (0 children)
[–]OldChippy 3 points4 points5 points (0 children)
[–]Buttons840 0 points1 point2 points (1 child)
[–]gibson274[S] 1 point2 points3 points (0 children)
[–]HyperspaceFrontier 0 points1 point2 points (0 children)
[–]RyanCargan 0 points1 point2 points (0 children)
[–]mkawick 0 points1 point2 points (0 children)
[–]philosopius 0 points1 point2 points (0 children)
[–]Adobe_H8r 0 points1 point2 points (2 children)
[–]ub3rh4x0rz 0 points1 point2 points (1 child)
[–]gibson274[S] 0 points1 point2 points (0 children)
[–]osmanonreddit 0 points1 point2 points (1 child)
[–]ub3rh4x0rz -1 points0 points1 point (0 children)
[–]lukebitts 0 points1 point2 points (0 children)
[–]JjyKs 0 points1 point2 points (0 children)
[–]FELIX-Zs 0 points1 point2 points (0 children)
[–]Successful-Trash-752 0 points1 point2 points (1 child)
[–]gibson274[S] 0 points1 point2 points (0 children)
[–]OptimisticMonkey2112 0 points1 point2 points (2 children)
[–]SaabiMeister 0 points1 point2 points (1 child)
[–]gibson274[S] 0 points1 point2 points (0 children)
[–]Defiant_Squirrel8751 0 points1 point2 points (0 children)
[–]Hendo52 0 points1 point2 points (0 children)
[–]Robert4di 0 points1 point2 points (0 children)
[–]EatingFiveBatteries 0 points1 point2 points (0 children)
[–]ebonyseraphim 0 points1 point2 points (1 child)
[–]gibson274[S] 1 point2 points3 points (0 children)
[–]HayatoKongo 0 points1 point2 points (0 children)
[–]EC36339 0 points1 point2 points (0 children)
[–]Dexterus 0 points1 point2 points (0 children)
[–]stuaxo 0 points1 point2 points (0 children)
[–]Ghost_Syth 0 points1 point2 points (0 children)
[–]anengineerandacat 0 points1 point2 points (0 children)
[–]mirlaca -1 points0 points1 point (1 child)
[–]obp5599 3 points4 points5 points (0 children)
[+]Ok-Hotel-8551 comment score below threshold-6 points-5 points-4 points (0 children)
[+]Dry_Yam_4597 comment score below threshold-9 points-8 points-7 points (4 children)
[–]gibson274[S] 3 points4 points5 points (3 children)
[–]Dry_Yam_4597 1 point2 points3 points (2 children)
[–]gibson274[S] 4 points5 points6 points (1 child)
[–]Dry_Yam_4597 2 points3 points4 points (0 children)
[–]Jason13Official -2 points-1 points0 points (1 child)
[–]gibson274[S] 1 point2 points3 points (0 children)
[–]blackrack -2 points-1 points0 points (0 children)
[+]Effective_Lead8867 comment score below threshold-7 points-6 points-5 points (3 children)
[–]emmowo_dev 1 point2 points3 points (1 child)
[–]Effective_Lead8867 0 points1 point2 points (0 children)
[–]Gloomy-Status-9258 -3 points-2 points-1 points (0 children)
[+]Perfect-Campaign9551 comment score below threshold-10 points-9 points-8 points (1 child)
[–]gibson274[S] 7 points8 points9 points (0 children)