[sig17]《使命召唤:无限战争》的多层材质技术

》

《使命召唤:无限战争》的多层材质技术,siggraph17,activision.infinity ward带来。

PBR的发展趋势
从activision在cod上面做的一些工作上看,可以明显的看到PBR的发展趋势,从最开始的把基于物理模型,追求数学正确到现在的引入更多的材质属性,更多的光照模型以及他们之间的更加复杂的组合,从表达能力上更加接近真实世界,业内视角就是更加接近电影的渲染。
在这里插入图片描述
unified shader/parameter
activision这里的做法形式上是支持多种材质属性并且支持多层:
多属性
在这里插入图片描述
首先是将材质分成了三大类:

  • surface: normal/roughness
  • macro:density/thickness
  • micro:材质的介质属性
    实际光照模型对于这些属性进行一个完整支持,并且支持多层:
    多层
    在这里插入图片描述
    像上图中下面一列的部分都是多层材质的结果(涂油漆的木头等等)
    activision做法是,就是一层层的计算,计算包括:
  • 光的absorption,scattering
  • 积累光照的结果
    forward lighting+
    这些放在一起,deferred shading就不给力了,forward lighting来处理这些复杂的材质计算。
    deferred shading从07年killzone2的paper开始正式流行,到现在的PBR的阶段,预计是要逐渐退出历史舞台了。

material compiler
形式上更加趋近于电影的方式。

具体的技术细节

在这里插入图片描述
opacity计算
这里就是考虑到alpha和thickness
直接代码吧:

float PhysicallyBased_GeometricOpacity( float NdotV, float alpha, float t ) // t - thickness
{
  float x = NdotV;
  float g = 1.0f - ( x / ( x * ( 1.0 - t ) + t ) ); // Smith-Schlick G
  return lerp( alpha, 1.0f, g ); // base opacity lerp to ‘shadowed’. Counteracts opacity change due to mips
}

在这里插入图片描述
thin fim layer
thin film这里讲得是材质表面上盖得另外一层比较薄的一层,但是会影响光的wavelength的这种材质。
这种材质的表达,会很大的影响材质的表达能力
在这里插入图片描述
hmm推理过程套路就还是那些,要点是我们要知道有这么个东西,而从早期pbr过来的时候,这些概念还比较缺乏,而直接上movie industry的一套,取舍的研究要做很久,知道那个在实际游戏中用那个不用即可,细节直接看论文吧,贴下代码:

float3 ApplyThinFilm( float3 fresnel, float NdotL, float2 thicknessAndIntensity, float3 specSample ){	
        float3 lutSample = thinFilmLUT.SampleLevel( linear, float2( thicknessAndIntensity.x, NdotL ), 0 ).rgb - 0.5f;
        float3 intensity = thicknessAndIntensity.y * 4.0f * ( specSample * ( 1.0f - specSample ) );
        return saturate( lutSample * intensity + fresnel );}

    float3 PhysicallyBased_GetPrimaryFresnelWithSpecColor( SurfaceAttributes surfaceAttributes, float dotH ){	
        float3 primaryFresnel = SchlickPrimaryFresnel( abs( dotH ), surfaceAttributes.specColor );
        return = ApplyThinFilm( primaryFresnel, abs( dotH ), surfaceAttributes.thinFilmThicknessAndIntensity, 								     surfaceAttributes.specColor ); }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值