Home

Awesome

1msRenderVegetation

基于Unity,在1ms内渲染大规模植被

辅助课程的Unity插件获取方式

https://cloud.189.cn/t/bei6JbqQ7zYz (访问码:3vvv)

https://pan.baidu.com/s/18CAa6Di16U9_LwPZZL6LIA (提取码:qoba)

https://115.com/s/sw6porx3wfq (访问码:c523)

整体课程安排

技术验证Demo

  1. 基于Job System实现GPU Instancing
  2. 基于ComputeShader 实现GPU Instancing

基础渲染框架

  1. 管理模型原型
  2. 植被预处理
    • 数据存储结构、序列化以及反序列化
    • 植被数据解析
    • 空间分割
  3. 实时剔除
    • 快速计算区块可见性
    • 合并可见区块
    • 视锥剔除和植被LOD计算
  4. GPU 实例渲染
    • 复杂模型处理与渲染

渲染技术进阶

  1. 修正LOD计算
  2. 阴影优化
  3. 遮挡剔除
  4. 植被碰撞检测
  5. 运行时植被增删改查
  6. 世界迁移
  7. 数据存储和压缩
  8. 渲染大规模草地

技术讨论群

QQ群:263192020

QQ群:263192020

获得最新内容

微信公众号

关注微信公众号:铁树站

及时获得最新内容

扫码_关注微信公众号_铁树站

哔哩哔哩

该课程的图文文章和视频同步更新,视频观看地址可在 https://space.bilibili.com/409009139

Youtube

https://www.youtube.com/playlist?list=PLA5WGod9c3SrYzhOECmZatFYSqAEbIVY1

Unity中文课堂

目前课程已在Unity中文课堂上上架,可以在 https://learn.u3d.cn/tutorial/1ms-render-vegetation 购买学习。

联系我

irontree2022@163.com

疑难杂症汇总

HDRP 复刻时 shader 修改后报错

HDRP 复刻时 shader修改后报错.png

我查了这个问题是因为HDRP在 Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariables.hlsl 中 将 unity_ObjectToWorld 和 unity_WorldToObject 重定义为:

// To get instancing working, we must use UNITY_MATRIX_M / UNITY_MATRIX_I_M as UnityInstancing.hlsl redefine them #define unity_ObjectToWorld Use_Macro_UNITY_MATRIX_M_instead_of_unity_ObjectToWorld #define unity_WorldToObject Use_Macro_UNITY_MATRIX_I_M_instead_of_unity_WorldToObject

你可以在GPUInstancing_indirect.cginc中的setup()上面添加两行:

//...//

#define unity_ObjectToWorld unity_ObjectToWorld

#define unity_WorldToObject unity_WorldToObject

// setup函数作用是给每个实例数据在渲染前得到实际矩阵和逆矩阵,相当于每个实例数据的初始化操作。

void setup()

// ... //

这两行:

#define unity_ObjectToWorld unity_ObjectToWorld

#define unity_WorldToObject unity_WorldToObject

是将那两个变量用宏重新定义回来

我通过 https://forum.unity.com/threads/problem-with-drawmeshinstance-with-hdrp-or-lwrp.646723/ 这里面找的解决办法。

刚才试了ok,运行能够正常渲染出来。你可以试试看

Linux Vulkan ComputeShader报错

Linux Vulkan ComputeShader报错.png 你说得:Shader error in 'FrustumCulling': glslang: 'input' : Reserved word. at kernel FrustumCulling at line 31 (on vulkan) 你看,它提示说input是保留字,你把这个input属性名改成inputDatas 之类得名称,然后在C#代码里面原来给 input 赋值的地方改成给 inputDatas赋值,我想这样就可以解决了.

找不到float3的定义

找不到float3的定义.png C# 中使用的 float3 不是Unity 常见的结构体,是项目添加的包:Mathematics,使用这个包里面的数学相关的结构体。