更多名人名博

上市公司专栏

实时股价每分更新

纳斯达克(美元)(市值:亿美元)
综指: 涨跌幅:
公司 股价 涨幅度 市值
盛大
网易
九城
畅游
完美
巨人
新浪
百度
恒生指数(港币)(市值:亿港币)
综指: 涨跌幅:
公司 股价 涨幅度 市值
腾讯
金山
网龙
创业板
综指: 涨跌幅:
公司 股价 涨幅度 市值
宝网
d
您现在的位置:首页> 开发|游戏程序|专业工具| > 如何在渲染到反射贴图时避免改变CullMode

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

来源:IIEEG04-12-2011

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

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

  设Mcam为相机的世界空间姿态变换,Mrefl为反射矩阵,Mflip为Y轴翻转矩阵,皆为行矩阵:

  则反射贴图用相机的世界变换为 Mcamrefl = Mflip * Mcam * Mrefl

  反射贴图用视矩阵为Mviewrefl = invert(Mcamrefl)

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