为什么只给GPU传“点”就能长出百万棵草?Realistic-Real-Time-Grass-Rendering-With-Unity的内存节省原理 📅 发布时间:2026/8/27 17:23:41 👁 浏览次数: 为什么只给GPU传“点”就能长出百万棵草Realistic-Real-Time-Grass-Rendering-With-Unity的内存节省原理【免费下载链接】Realistic-Real-Time-Grass-Rendering-With-UnityRealistic Real Time Grass Rendering With Unity. Using the Geometry Shader to generate millions of grass on GPU. refEdward Lee项目地址: https://gitcode.com/gh_mirrors/re/Realistic-Real-Time-Grass-Rendering-With-UnityRealistic-Real-Time-Grass-Rendering-With-Unity 是一个 Unity 实时草地渲染项目它只向 GPU 传送每棵草一个点再由几何着色器Geometry Shader在 GPU 上把每个点“长成”一棵完整的草从而用极小的显存开销生成数百万棵随风摇曳的草。本文带你搞懂这套 GPU 草地生成方案的内存节省原理。传统做法每棵草都是一坨顶点先看看“老实”的渲染方式有多费内存。如果你想渲染 100 万棵草传统思路是给每棵草建一个完整网格至少一个四边形4 个顶点然后把全部顶点数据塞进顶点缓冲数据项每棵草占用顶点位置4 个 × 3 个 float48 字节法线4 个 × 3 个 float48 字节纹理坐标4 个 × 2 个 float32 字节索引2 个三角形 × 312 字节合计≈ 140 字节100 万棵草 ≈140MB纯几何数据还没算动画更新时 CPU 每帧搬运数据的开销。显存吃紧不说顶点吞吐也会成为帧率瓶颈。核心原理点图元 几何着色器这个项目的思路非常巧妙——把“几何数据”和“几何生成”拆开CPU 只发点GrassSpanner.cs 读取高度贴图Heightmap按30×30的草斑patch划分地块在每个草斑里随机撒 30 个坐标点总计约 2.7 万个点。每个点只有位置数据且按 65000 点一块切分成多个 Mesh受 16 位索引上限限制。GPU 现场长草GrassGeometryShader.shader 中的几何着色器声明为geom(point v2g points[1], ...)——输入图元是点。每收到 1 个点就在 GPU 上展开成 12 个顶点、拼成 10 个三角形的完整草叶直接交给三角形流水。也就是说存的是 1 个点画的是 1 棵草中间 11 倍膨胀的顶点全部由 GPU 临时计算出来从不落地、不占显存。项目自带的高度贴图Assets/Texture/Heightmap.pngCPU 用它采样灰度值决定每棵草的落点高度内存账本140MB 降到 14MB对比一下两种方案在 100 万棵草规模下的显存占用方案每棵草数据100 万棵总占用传统完整网格≈ 140 字节≈140MB本项目的点图元≈ 14 字节12B 位置 2B 索引≈14MB显存直接省了约 10 倍而且省得越多越香——草的规模越大传统方案的顶点缓冲膨胀得越快点图元方案始终只有“每个点 14 字节”的线性开销。这就是“百万棵草”在普通显卡上也跑得动的底气。免费附赠动画也在 GPU 上传统方案还有一个隐藏成本草要随风摆动CPU 每帧得更新顶点缓冲、来回搬数据。而在这个项目里风是几何着色器里几行正弦函数的活儿根据点坐标算出一个确定性随机数让每棵草的高度和宽度各不相同_Height、_Width在着色器里动态扰动用_Time驱动风力向量草叶越高摆幅越大形成自然的“根部固定、梢部摇摆”效果。动画、随机化全部发生在 GPU 的几何着色阶段CPU 端每帧零更新——内存省了带宽也省了。项目附带的草地与落叶混合材质预览Assets/Grass dead leafs 01/几何着色器生成的草叶同样能配合这类高质量纹理快速体验三步跑通 Demo克隆仓库git clone https://gitcode.com/gh_mirrors/re/Realistic-Real-Time-Grass-Rendering-With-Unity用 Unity 2017.1 打开项目README 标注 Unity 5.6 即可运行Unity 2017.3 起支持 32 位索引缓冲单 Mesh 可放下更多点。打开Assets/Scene/demo.unity场景等待GrassSpanner在地形上撒完点即可看到整片草地随风摆动。 注意几何着色器要求#pragma target 4.0即显卡需支持 DirectX 11 / Shader Model 4.0现代独立显卡基本都满足。关键文件速查文件作用Assets/Shader/GrassGeometryShader.shader核心点 → 草叶的几何着色器含随机化与风力计算Assets/Script/GrassSpanner.cs读取高度图生成地形并在草地上撒点65000 点分块Assets/Mat/GrassMat.mat草地渲染材质Assets/Texture/Heightmap.png高度贴图决定地形起伏与草的落点Assets/Texture/grassBlade.png草叶 Albedo 贴图Assets/Texture/grassBladeAlpha.png草叶 Alpha 贴图一句话总结把每棵草的顶点数从 GPU 视角压缩到 1 个点让几何着色器在流水线上现算现用——这是 Realistic-Real-Time-Grass-Rendering-With-Unity 能用极小内存渲染百万棵草的全部秘密。【免费下载链接】Realistic-Real-Time-Grass-Rendering-With-UnityRealistic Real Time Grass Rendering With Unity. Using the Geometry Shader to generate millions of grass on GPU. refEdward Lee项目地址: https://gitcode.com/gh_mirrors/re/Realistic-Real-Time-Grass-Rendering-With-Unity创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考