Style books

Real-time grass techniques: sub-agent research (fetched 2026-10-01)

Nothing needed from you. One correction to the brief first: the iPad (A16) has a 4-core GPU, not 5-core; the 5-core A16 GPU is in the iPhone 14 Pro and 15 [source: https://en.wikipedia.org/wiki/IPad_(A16), https://www.notebookcheck.com/Apple-A16-GPU-5-Core-Grafikkarte-Benchmarks-und-Spezifikationen.652743.0.html].

All pages were read through WebFetch, which summarises with a small model, so treat quoted text as close paraphrase. The Wohllaib talk, the Horizon slides and the CEDEC graphics talk could not be opened; those topics rest on secondary sources (section C).

A. Findings per topic

1. Ghost of Tsushima and reimplementations

2. Breath of the Wild / Tears of the Kingdom

3. Genshin and the "Ghibli" recipe

4. Horizon Zero Dawn

  • Alpha-tested vegetation is drawn twice: "First as early occluders; after that, we render them normally. In this initial depth-only pass, we do our alpha test." The main pass then uses a plain depth compare. [source: https://80.lv/articles/horizon-zero-dawn-interview-with-the-team]
  • Placement is procedural from "a couple of texture lookups". [source: same]
  • Normals, vertex budget, LODs, grass colour and wind spring settings are [unconfirmed]; the slide PDF exceeds the 10 MB fetch limit.

5. Other stylised games

  • Sable (GDC 2022, Kythreotis): flat shading, then layers of light, fog and lines. Fog "had the biggest impact overall"; outline opacity fades with distance to hide pop-in. [source: https://www.gamedeveloper.com/marketing/how-shedworks-refined-the-art-of-sable-in-pursuit-of-readability]
  • The Witness (Casey Muratori): grass patches placed with blue noise of varying radius, a sphere test against geometry, and distance grids for edges. Placement only, no shading detail. [source: https://caseymuratori.com/blog_0013]
  • Sea of Thieves (crossed planes, clover under-layer, flowers painted into the grass texture), Alba (grass spawned from the terrain splat) and Firewatch (23 tree models, distance-simplifying shader) appeared in search snippets only. [unconfirmed]
  • Ori, Kena, Tunic, Eastshade and A Short Hike: no technical source found.

6. Wind

7. Interaction

8. Alpha

9. Distance

  • Godot series: blades fade out over 10–20 units while an impostor plane fades in over 5–10. The high LOD is about 10,000 blades (90,000 triangles) per 5×5 m chunk, the low LOD one triangle per blade, the impostor 4 triangles. Whole effect "just under 2 ms" on the author's desktop. From above, the real meadow looks darker because the ground shows through, so the impostor adds angle-dependent noise spots. [source: https://hexaquo.at/pages/grass-rendering-series-part-4-level-of-detail-tricks-for-infinite-plains-of-grass-in-godot/]
  • 3DWorld: six LODs of 1500, 800, 450, 250, 150 and 100 blades per patch, where a merged blade takes the summed width. Distant tiles use the green terrain texture; blades sink under the mesh to hide the switch. [source: http://3dworldgen.blogspot.com/2015/05/infinite-fields-of-grass.html]
  • Doubling the tile at constant blade count (GoT) and BotW's ground-matched colour both let the terrain carry the far field. [inference from topics 1 and 2]

10. Budgets, three.js, A16

11. Flowers and air

B. Sources (all fetched 2026-10-01)

  1. https://gdcvault.com/play/1027033/Advanced-Graphics-Summit-Procedural-Grass — GDC Vault, Wohllaib — abstract
  2. https://tigerabrodi.blog/what-we-can-learn-from-grass-in-ghost-of-tsushima-renders — Tiger Abrodi — GoT numbers
  3. https://tigerabrodi.blog/grass-in-ghost-of-tsushima — Tiger Abrodi — vertex counts, culling
  4. https://github.com/cainrademan/Unity-Grass — Cain Rademan — clumps, wind, normals
  5. https://github.com/2Retr0/GodotGrass — 2Retr0 — wind, clumps, normals
  6. https://github.com/harlan0103/Grass-Rendering-in-Modern-Game-Engine — features only
  7. https://haoranliang.com/grass-rendering — no numbers
  8. https://github.com/simondevyoutube/Quick_Grass — SimonDev — README
  9. https://raw.githubusercontent.com/simondevyoutube/Quick_Grass/main/src/base/render/grass-component.js — constants
  10. https://raw.githubusercontent.com/simondevyoutube/Quick_Grass/main/public/shaders/grass-lighting-model-vsh.glsl — wind, normals, push
  11. https://raw.githubusercontent.com/simondevyoutube/Quick_Grass/main/public/shaders/grass-lighting-model-fsh.glsl — shading
  12. https://www.gamedeveloper.com/design/using-vorticles-to-simulate-wind-in-i-ghost-of-tsushima-i- — Rockenbeck quotes
  13. https://advances.realtimerendering.com/s2021/jpatry_advances2021/index.html — Patry — nothing on grass
  14. https://zeldamods.org/wiki/Grass.extm — grass data format
  15. https://zeldamods.org/wiki/Terrain — terrain data
  16. https://gist.github.com/idbrii/e39fe96279aa1670319bfa521d907399 — CEDEC 2017 translation — no grass
  17. https://gigazine.net/gsc_news/en/20171004-breath-of-the-wild-design-secret/ — CEDEC report — no grass
  18. https://www.resetera.com/threads/zelda-breath-of-the-wild-the-technical-analysis.8197/page-4 — community LOD claim
  19. https://forums.unrealengine.com/t/botw-grass-style/437647 — community observations
  20. https://smythdesign.com/blog/stylized-grass-webgl/ — James Smyth — three.js BotW grass
  21. https://danielilett.com/2021-08-24-tut5-17-stylised-grass/ — Daniel Ilett
  22. https://roystan.net/articles/grass-shader/ — Roystan
  23. https://www.cyanilux.com/tutorials/gpu-instanced-grass-breakdown/ — Cyanilux
  24. https://github.com/GarrettGunnell/Grass — Acerola
  25. https://halisavakis.com/my-take-on-shaders-grass-shader-part-i/ — gradient map, displacement wind (background, not cited)
  26. https://trungduyng.substack.com/p/anime-grass-tutorial-blender — anime grass
  27. https://80.lv/articles/meadows-creating-stylized-nature-in-ue4 — David Holland
  28. https://www.gdcvault.com/play/1027538/-Genshin-Impact-Crafting-an — miHoYo talk metadata
  29. https://parsers.vc/news/250124-the-art-of-game-rendering--a-deep-dive-into/ — unattributed Genshin numbers
  30. https://nugglet.github.io/posts/2022/12/console_graphics_rendering_pipeline_genshin_impact — Genshin console notes
  31. https://discussions.unity.com/threads/genshin-impact-grass-rendering-how.984026/ — speculation only
  32. https://80.lv/articles/horizon-zero-dawn-interview-with-the-team — Horizon two-pass alpha test
  33. https://www.gamedeveloper.com/art/video-how-guerrilla-crafted-the-lush-vegetation-of-i-horizon-zero-dawn-i- — abstract
  34. https://www.gamedeveloper.com/marketing/how-shedworks-refined-the-art-of-sable-in-pursuit-of-readability — Sable
  35. https://caseymuratori.com/blog_0013 — The Witness placement
  36. https://gdcvault.com/play/1026404/Wind-Simulation-in-God-of — abstract
  37. https://gdcvault.com/play/1026036/Interactive-Wind-and-Vegetation-in — abstract
  38. https://gamedev.center/tutorial-how-to-make-an-interactive-grass-shader-in-unity/ — trample uniform
  39. https://godotshaders.com/shader/stylized-grass-with-wind-and-deformation/ — wind texture, push
  40. https://www.karthikchandran.com/project/grass-project/ — shells, render-target interaction
  41. https://developer.apple.com/videos/play/wwdc2020/10602/ — Apple — HSR, draw order, MSAA
  42. https://developer.apple.com/videos/play/wwdc2020/10603/ — Apple — overdraw
  43. https://developer.apple.com/forums/thread/85318 — Apple engineer on discard
  44. https://docs.imgtec.com/starter-guides/powervr-architecture/html/topics/rules/do-not-use-discard.html — Imagination
  45. Golus via translate.goog (URL in topic 8) — formulas
  46. https://hexaquo.at/pages/grass-rendering-series-part-4-level-of-detail-tricks-for-infinite-plains-of-grass-in-godot/ — impostor LOD
  47. http://3dworldgen.blogspot.com/2015/05/infinite-fields-of-grass.html — LOD merging
  48. https://aleksandargjoreski.dev/blog/growing-my-grass-shader/ — TSL grass numbers
  49. https://github.com/hieudeptrai196/grass — TSL tile and LOD design
  50. https://github.com/CK42BB/procedural-grass-threejs — mobile blade claims
  51. https://al-ro.github.io/projects/grass/ — al-ro
  52. https://github.com/Nitash-Biswas/grass-shader-glsl — Nitash Biswas
  53. https://discourse.threejs.org/t/performance-optimizing-3m-instanced-grass-in-three-js/81286 — budgets
  54. https://discourse.threejs.org/t/real-time-grass-simulation-in-the-browser-over-1-million-blades-at-60-fps/82808 — 1M merged blades, M1 (background, not cited)
  55. https://www.utsubo.com/blog/threejs-best-practices-100-tips — mobile guidance
  56. https://github.com/mrdoob/three.js/wiki/Three.js-Shading-Language — TSL
  57. https://threejs.org/docs/pages/TSL.html — TSL signatures
  58. https://www.notebookcheck.com/Apple-A16-GPU-5-Core-Grafikkarte-Benchmarks-und-Spezifikationen.652743.0.html — A16 benchmarks
  59. https://en.wikipedia.org/wiki/IPad_(A16) — iPad specs
  60. https://below-the-grassland.ameen-abdullah.dev/ — r185 WebGPU meadow
  61. https://github.com/tougenrip/thirdfold/issues/308 — a project's opaque-blade policy (background, not cited)

C. Not found or not opened

  • Wohllaib talk: the Vault page is members-only, YouTube returned only a footer, and I found no slide PDF. The Vault's PDF link for sid 1027545 is the streaming talk.
  • Horizon slides and Rockenbeck slides: both PDFs exceed the 10 MB fetch limit (media.gdcvault.com).
  • CEDEC 2017 "layered world" graphics talk: no readable report; the Medium translation returned 403.
  • Medium (Golus original, Alba environment art): 403. Golus was read through the translation proxy.
  • God of War slides: sms.playstation.com returned an empty page, jianshu.com 403.
  • Arm early-Z and alpha-test docs: empty body on support.arm.com.
  • Other blocked pages: Codrops "False Earth" (403), Class Central Genshin summary (403), Unreal's Kena interview (403), cohost Sea of Thieves post (web.archive.org blocked), PC Gamer Firewatch (body missing), Minions Art site and Patreon (empty or 403), confreaksandgeeks and quicks.ai (403, 404).
  • Not searched: Ned Makes Games, MangoButtermilch, Brackeys, thebenezer's "fluffy grass".
  • Searched without result: Ori, Tunic, Eastshade, A Short Hike, Hades-style grass; a published grass budget measured on an Apple mobile GPU or in Safari WebGPU; a desktop GPU equivalent for the A16.