UnityURP-MobileDrawMeshInstancedIndirectExample
Пример проекта для отрисовки 1 миллиона экземпляров травы на мобильном устройстве
🔗Описание:
Это упрощённый пример репозитория для демонстрации API DrawMeshInstancedIndirect на мобильной платформе.
Данный репозиторий максимально прост и содержит лишь базовые компоненты:
Простой фрустум-каллинг на CPU по ячейкам (без использования даже квадродерева)
Минимальный фрустум-каллинг на GPU через compute-шейдер (без алгоритмов ускорения)
Всего один вызов DrawMeshInstancedIndirect
Код очень короткий и лаконичный.
Освещение и анимация не были главными целями проекта, однако ~40% времени ушло на написание шейдера травы (InstancedIndirectGrass.shader), включающего освещение и анимацию. С этим шейдером можно ознакомиться для ознакомления с реализацией.
Также репозиторий включает RendererFeature (GrassBendingRTPrePass.cs), который рендерит во внеэкранный RenderTarget (R8) вид сверху для области приминания травы (с помощью Trail Renderer, следующего за движущимися объектами). Это очень простой метод, но его результат достаточно хорош для данной демонстрации.
🔗Description:
This is a simplified example repository to demonstrate DrawMeshInstancedIndirect API on mobile platform.
This repository is as simple as possible, only contains a simple CPU cell frustum culling(not even a quadtree) -> minimum compute GPU frustum culling (no Acceleration Algorithms), then just 1 DrawMeshInstancedIndirect call, nothing else, code is very short.
Lighting and animation is not the main focus of this project, but ~40% of the time was spent on writing grass shader's lighting & animation, you can have a look at InstancedIndirectGrass.shader if you are interested.
This repository also contains a RendererFeature(GrassBendingRTPrePass.cs) to render an offscreen RT(R8), which renders top down view grass bending area (by trail renderer following moving objects), it is a very simple method but the result is good enough for this demo.
📘Лицензия:
MIT LicenseDownload link:
https://t.me/arhivunitymaker/127