[sig19]寒霜引擎中strand-based(基于线)的头发渲染

在这里插入图片描述
siggraph19上面,frostbite发布的新的头发渲染技术,搬运如下:
https://www.bilibili.com/video/av73692434/

这篇是我个人对siggraph19 两个最喜欢的文章之一,把hair render往前推进了一步,主要亮点:

  • 开始使用线来做头发渲染(strand based),这个也构成了头发品质飞跃的一个好的基础
  • 进一步处理头发中multiple scattering的问题

头发在游戏中渲染的简要历史

在这里插入图片描述
89, kajiya-kay的头发光照模型
相当长时间中在用,也应属于刚好适合当前(2019)手游的光照模型,现在逐渐退出历史舞台。

siggraph03,年marschner的头发光照模型,是我们现在认为比较physically based的头发光照模型
在这里插入图片描述
这个后来在cg中被disney和weta digital进一步改进。

siggraph16,
在这里插入图片描述
unreal基于LUT的方式把marschner的头发模型,做了一些近似逼近,能realtime展现的比较好,但是没有覆盖到头发之间的散射(multiple scattering)以及在single scatter方面还有一些提升空间。
在这里插入图片描述
同年naughtydog的volume material render中也覆盖了头发(https://blog.csdn.net/toughbro/article/details/84206686),以volume技术,使用了一些偏artist的方式以及离线预先cook的方式,带上了一些volume的概念(由于naughtydog的模型直接用于console上的游戏中的,而非demo,所以naughtydog最后选择不使用marschner的模型)
截止到现在,头发建模也是基于card的。
sig19
也就是当前,frostbite提出的基于strand的方式以及进一步处理single/multiple scattering,就是一个扎扎实实的推进了。

Strand-based Hair Rendering in Frostbite

stand based

虽然这篇文章号称是strand based,实际上主要集中在渲染,而strand最牛的地方是在simulation。
这里frostbite简单带过,可能还没有做完等等原因。
在这里插入图片描述
一图看好整体的制作流程,从点的建模,然后realtime simulation,然后point list生成头发的triangle strip。
所以这里的simulation部分就是一个对于points的simulation,这也是一个常用的方法(比如fluid simulation)。

render

在这里插入图片描述
渲染部分就分了3块,是

  • single scattering
  • multiple scattering
  • 发丝的“透明渲染”
single scattering

这里要回到marschner模型,一般我们使用的光照模型,光照的建模包括三个部分:
在这里插入图片描述

  • R Reflective paths
  • TT Transmissive paths
  • TRT Transmissive with single internal reflection
    这样三个路径,也就是光线在头发中传播并最终贡献光照效果的主要路径,
    在这里插入图片描述
    落到具体的视觉上,看起来这样的。
    中间epic在16年siggraph上面就是对这几项做了approximation,frostbite在这里把这个approximation提到更好的水平:
    在这里插入图片描述
    在这里插入图片描述
    (图中karis16,就是指unreal 16年的paper的效果)
    frostbite在approximation这里做了更多的工作,来把头发的拟真度进一步提升。
    就大的属性模型这里列下:
    在这里插入图片描述
    类似PBR的macrofacet模型,这里有两大项比较重要:
  • attenuation
  • distribution
    然后具体的数学选择,frostbite主要是给出了最后结论,中间有推导成分,也有硬做拟合逼近(使用一些scale来修正)的成分。
    反正最后就是达到了一个比unreal更好的拟真效果。
multiple scattering

在这里插入图片描述
multiple scattering这里分为

  • local scattering–近距离的头发之间的反射
  • global scattering–远距离的光线散射
    两块,分别使用了现有的技术整合
    按照ppt里的说法似乎是local scattering使用了Dual Scattering Approximation。
    然后global scattering使用了4层deep opacity map来做这个事情。
    在这里插入图片描述

Rendering – Strand rendering

在这里插入图片描述
这里做的事情就是让头发的轻薄的透明感出来。
如果不做,就会像左边,一堆干草的感觉。
在这里插入图片描述
这里是msaa+visibility buffer。
效率方面:并且如果是相近的部分,就只shading一遍(有点类似VariableRateShading的概念)这个会带来很好的效率提升。
在这里插入图片描述
pipeline。
最终效率对比:
在这里插入图片描述
依旧还是蛮费的,不过用在主角一个人身上,应该还可以。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值