ATI的财宝箱

ATI的财宝箱

V0.1

Liker

 

      这是ati的一个开源demo,展示了一些d3d8.1的特性。这篇文章主要是我读代码时候作的笔记,由于我还是个初学者,所以如果有什么理解错误的地方还要请各位老大帮忙提出来。Demo和源码可以在http://www.ati.com/developer/Treasurechest.html找到。

 

流程框架

       是我们都很熟悉的d3d81Framework

While(1)

{

       Render3DEnvironment()

       {

              FrameMove()

              {

                     RenderSceneIntoCubeMap()

                     {

                            For(6)

                            {

                                   RenderScene(ReflectionCubeMap)

                                   RenderScene(DiffuseCubeMap)

                            }

                     }

              }

              Render()

              {

                     RenderScene( NORMAL )

              }

       }

}

 

 

场景组织

       Object主要分为两大类,一类是静止的相当于环境,包括墙地板门窗和箱子;另一类是活动的装在箱子里的(财宝^_^)。其中箱子由好几部分组成,金属部分可以反光,木头部分不行。需要说一下ButtonModeObjectManagement.cpp_15)这个结构:

typedef struct _ButtonMode

{

    int   x;

    int   y;

    DWORD object;

    DWORD objectEffect;

    char* objectTechnique;

    DWORD WoodEffect;

    char* WoodTechnique;

    DWORD MetalEffect;

    char* MetalTechnique;

    DWORD KeepEffect;

    char* KeepTechnique;

} ButtonMode;

 

       前两个是button坐标,之后分别是活动物体,木箱上的木头,金属,以及周围环境所用的effect filetechnique name。有些演示当中没有活动物体。这四项中每一项都可能有多个effect file,每个effect file中有多个technique

关于Cubemap

       将环境rendercubemap时需要把camera放在需要做环境影射物体的重心上。代码如下,当场景中只有chest的时候,它的重心是0, 2.5f , 0;其他情况时需要找活动物体的重心,这个时候的cubemap是围绕着活动物体的,所以在chest上会看到错误的反射。


ShaderDemo.cpp_323

if (m_pDisplayObject[0])

cameraPos = m_pDisplayObject[0]->GetWorldCenterOfGravity();

else

cameraPos = D3DXVECTOR3(0, 2.5f ,0);

matViewDir._41 = -cameraPos.x; matViewDir._42 = -cameraPos.y; matViewDir._43 =-cameraPos.z;

 

Pofmesh.cpp_407

m_centroid = (m_maxPos+m_minPos)*.5;

 

 

 

 

Normalizer

       Normalizer是一个cubemap,把需要normalize的向量用vsTexCoord的形式传到ps(或者是普通的pixel管道),sample出来的颜色值就是Normalize的结果,而且是Clamp0~1的,可以直接做dot3了。当然事先要做恐怖的precompute

 

 

 

节省带宽 or 节省指令

       TreasureChest里边使用了COMPACT_BUFFER顶点格式。为了节省带宽,把法线存成4byte的压缩格式(注意倒装……),同时仅仅保存了切线空间3basis的两条。然后在vs中解压缩,同时cross另一条basis。两者到底应该节省哪一个取决于不同的硬件。

PerVertex & PerPixel Cubemap

       我们很熟悉PerVertexcubemap,也很熟悉Perpixel的光照。跟光照很类似,perpixelcubemap也是用很少的顶点实现凹凸不平的效果,这次是反射。


(很光滑的金属)


(有花纹的金属)

 

其实已经有很多地方介绍过perpixel cubemap,不像perpixel lighting,这次好像只能在ps里做。

       Ps1.1~1.3中用texm3x3vspec这个凶猛的指令来计算反射光线。说它凶猛是因为它实在做了太多的计算。在1.4中又回到了dp3muladd的套路。大体上,我们需要在vs中把世界空间的basis变换到切线坐标[1],所以他们组成了从切线空间变换到世界空间的矩阵。之后我们把世界空间的vertex to eye向量保存在3basisw分量中(texm3x3vspec必需),然后在ps中,把从normal map取出来的法线变换到世界坐标,再与视线向量一起计算反射向量。这样就会有从凹凸不平的表面上反射的效果了。

      关于Perpixel cubemap,推荐参考NVEffectsBrowser中的Bump refraction

更精确的cube寻址

       Cube是靠一个世界空间的方向向量来寻址的,但是我们计算出来的反射向量都是从vertex出发,指向我们所希望采样的地方。采样的时候它被平移到cube的中心,很可能会指向不同的采样点。

       所以我们让反射向量加上一个从cube中心指向vertex方向的向量来计算精确的方向。这个方向向量要scale到某个特定的长度才能达到要求。

       Perpixel的时候把顶点的世界坐标传到ps,插值以后就可以跟vs一样了。

       ShaderX里边有详细介绍。这本书的电子版网上到处都是,真后悔买了纸版,555555555

Diffuse Cube Map

       CubeMap上保存的是多个光的叠加,它的好处是无论有多少个光源,只要一个pass,而且可以动态修改光源的个数。叠加的时候需要这样:

ZEnable = False;

AlphaBlendEnable = True;

SrcBlend = One;

DestBlend = One;

Bump Specular

       base*(ambient+N.L)) + (Gloss*Highlight)

       gloss保存在base texturealpha中,与N.H64次方相乘得到真正的specular

 

待续…



[1] 我们经常使用的将顶点从object space变换到world space的矩阵,其实就是世界坐标系的3basis在那个object space中的值,竖着排列为[x,y,z]

以下是对提供的参考资料的总结,按照要求结构化多个要点分条输出: 4G/5G无线网络优化与网规案例分析: NSA站点下终端掉4G问题:部分用户反馈NSA终端频繁掉4G,主要因终端主动发起SCGfail导致。分析显示,在信号较好的环境下,终端可能因节能、过热保护等原因主动释放连接。解决方案建议终端侧进行分析处理,尝试关闭节电开关等。 RSSI算法识别天馈遮挡:通过计算RSSI平均值及差值识别天馈遮挡,差值大于3dB则认定有遮挡。不同设备分组规则不同,如64T和32T。此方法可有效帮助现场人员识别因环境变化引起的网络问题。 5G 160M组网小区CA不生效:某5G站点开启100M+60M CA功能后,测试发现UE无法正常使用CA功能。问题原因在于CA频点集标识配置错误,修正后测试正常。 5G网络优化与策略: CCE映射方式优化:针对诺基亚站点覆盖农村区域,通过优化CCE资源映射方式(交织、非交织),提升RRC连接建立成功率和无线接通率。非交织方式相比交织方式有显著提升。 5G AAU两扇区组网:与三扇区组网相比,AAU两扇区组网在RSRP、SINR、下载速率和上传速率上表现不同,需根据具体场景选择适合的组网方式。 5G语音解决方案:包括沿用4G语音解决方案、EPS Fallback方案和VoNR方案。不同方案适用于不同的5G组网策略,如NSA和SA,并影响语音连续性和网络覆盖。 4G网络优化与资源利用: 4G室分设备利旧:面对4G网络投资压减与资源需求矛盾,提出利旧多维度调优策略,包括资源整合、统筹调配既有资源,以满足新增需求和提质增效。 宏站RRU设备1托N射灯:针对5G深度覆盖需求,研究使用宏站AAU结合1托N射灯方案,快速便捷地开通5G站点,提升深度覆盖能力。 基站与流程管理: 爱立信LTE基站邻区添加流程:未提供具体内容,但通常涉及邻区规划、参数配置、测试验证等步骤,以确保基站间顺畅切换和覆盖连续性。 网络规划与策略: 新高铁跨海大桥覆盖方案试点:虽未提供详细内容,但可推测涉及高铁跨海大桥区域的4G/5G网络覆盖规划,需考虑信号穿透、移动性管理、网络容量等因素。 总结: 提供的参考资料涵盖了4G/5G无线网络优化、网规案例分析、网络优化策略、资源利用、基站管理等多个方面。 通过具体案例分析,展示了无线网络优化中的常见问题及解决方案,如NSA终端掉4G、RSSI识别天馈遮挡、CA不生效等。 强调了5G网络优化与策略的重要性,包括CCE映射方式优化、5G语音解决方案、AAU扇区组网选择等。 提出了4G网络优化与资源利用的策略,如室分设备利旧、宏站RRU设备1托N射灯等。 基站与流程管理方面,提到了爱立信LTE基站邻区添加流程,但未给出具体细节。 新高铁跨海大桥覆盖方案试点展示了特殊场景下的网络规划需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值