魔兽世界的Screen Space Local Reflection

        魔兽世界虽然是一个老游戏了,但是它在图形渲染上还在不断地更新,虽然跟现在的很多引擎相比有些方面不是同一时代的,但是不得不说魔兽世界有些地方做的很到位,他的反射就用了一个很讨巧的方法就是前面一直提到的Screen Space Local Reflection(SSLR),这方面魔兽世界应该说是做的最好的,只用了一次检测就可以模拟反射,应该和MotorGP类似,但是魔兽世界的过渡过的很长出色,让你很难觉察到瑕疵。


        对于中低端显卡来说水的反射是一个很费的操作,我尝试了Screen Space Local Reflection(SSLR),一提到SSLR可能大家会想到Crysis的Presentation,实际上这并不是一个新技术,在魔兽世界TBC之后的资料片里魔兽世界的水的反射就是用的这个技术,而且魔兽世界的方法比Crysis更加简单。当时的魔兽世界还能通过nvPerfHud来Cpature,抓到了水的ps的asm,经过分析发现魔兽的方法非常简单,只是沿着反射的方向cast了一根射线,然后把这个射线投影到当前摄像机的屏幕空间,如果接近当前屏幕空间就fadeout掉。下面给出了我从魔兽世界的asm中整理出来的Local Reflection的shader代码,可能和魔兽世界的有些不同,毕竟是将asm理解后自己写出来的。出于公司保密,还是把给出的Shader删掉了,不好意思。

float4 CalcLocalReflection(float3 viewDir, float3 normal,float3 reflectDir, float3 waterPos, float factor, float depthSoft,float2 screenUv);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值