GPUPro360 Grass Rendering and simulation with LOD

# introduction
- 这伙人以前做了TressFX
- 本来是想做个extension,用来搞草,渲染invididual grass blade,用rigid bodies和wind来搞interaction

# 26.2 Render Grass Blades
- 前人“Rendering  Grass  in  Real  Time  with  Dynamic  Light  Sources.”的方法是用抛物线(parabolic)来procedure生成草的形状,但是也有问题那就是太单一
- 这里的办法:用instancing,5个type,每个type的草16个knot
- 产生variance的办法:
    - length按照normal distribution分布
    - 不同的草出现频率不同
- 从stem到blade。stem只是line segment,要把line segment变成quad
    - expansion direction follows binormal of grass blade
    - width chosen by user,这样又不同宽度的草
    - 本来想的是用geometry shader从真line segment生成2个triangle,结果发现性能不行,改成输入就是2个degraded triangle,VS里把他们改成需要的样子。用vertexid来mod2,让重合的2个点往不同方向expand
- shading model
    - cheap的phong,但是ambient用hemispherical ambient light(大概就是说有个sky向量,根据normal和这个的dot来决定这个表面多么对这天,然后天和地各有一个ambient light)
    - 试过了screen-space translucency,但是效果没多大提升还多了50个指令,所以没用
    - 双面的问题:这里为了能正反面用不同的texture还需要用SV_IsFrontFace 

# 26.3 Simulation
- 感觉好像默认大家都知道TressFX所以说得很简单
- 3 constraits,integrating gravity
    - edge length
    - global shape
    - local shape
- 比起TressFX的一些简化
    - head transform不用
    - global shape constraint不用
    - 就只要length constraint和local shape constraint就好
- 防止草入地,就是让所有vertex都比blade root vertex高就行

## 26.3.1 master slave
- 就是有些草是master,有些草是slave。master是自己动的,slave跟着master动,但是会加个perturbation

## 26.3.2 distance sort
- 使用compute shader做sort,用radix sort在gpu上做,而且距离是quantized.如果quant成8bit就只需1pass,32bit要4pass
- 还需要获得近于一个distance的草总共有多少这样的数据。用来控制simulation

## 26.3.3 Wind
- TressFX里,vertex收到wind和edge vector的影响。草简化,只是让vertex沿着wind vector的方向移动
- global tidal:附近的草move together,sweep the grass field with large cylindrical bar(这个是直接用了collision system)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值