如何在渲染到反射贴图时避免改变CullMode

    通常在渲染到反射贴图时需要翻转CullMode,因为视矩阵被镜像了。但我们知道,减少状态切换是提高3D管线效率的重要优化。更重要的是,渲染到反射贴图涉及到引擎中会用到的大部分Effect,因为他们都需要被用来渲染到反射贴图,这意味着要在较大的范围内考虑和支持翻转CullMode,将一个效果的复杂度扩散到引擎层面,增加了引擎的复杂度。

    如果能避免翻转CullMode,则一来简化架构二来提高效率。那么如何做到呢?其实也简单,之所以镜像视矩阵会导致需要翻转CullMode,是因为镜像时手系被调换了,右手系变成了左手系,或者左手系变成了右手系。那么只要把反射贴图再上下(左右也行)颠倒一下,那么就又恢复成原来的手系,也就不需要翻转CullMode了。

    设Mcam为相机的世界空间姿态变换,Mrefl为反射矩阵,Mflip为Y轴翻转矩阵,皆为行矩阵:
则反射贴图用相机的世界变换为 Mcamrefl = Mflip * Mcam * Mrefl
反射贴图用视矩阵为Mviewrefl = invert(Mcamrefl)

    这时渲染出的反射贴图也是上下颠倒的,采样时uv坐标也需要把v翻转一下变成(1-v)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值