当前位置: 首页 > news >正文

360网站卖东西怎么做新洲城乡建设局网站

360网站卖东西怎么做,新洲城乡建设局网站,保山网站建设,wordpress 公众号主题Shader中的if分支 我们在shader中写if语句#xff0c;例如#xff1a; if(a0){//do some cool thing }else{//do other cool thing }实际上#xff0c;编译器会进行优化#xff0c;以及处理成多种不同的情况。比如编译器会将if和else展开#xff0c;分别执行其中的代…Shader中的if分支 我们在shader中写if语句例如 if(a0){//do some cool thing }else{//do other cool thing }实际上编译器会进行优化以及处理成多种不同的情况。比如编译器会将if和else展开分别执行其中的代码然后根据测试条件选择一个结果这被称为Flatten。或者编译器会真的编译出if指令真正的动态分支。这取决于平台是否支持。比如在老的OpenGL ES 2.0平台编译器总是进行Flatten所以if分支才被视作性能杀手。当然即便是没有Flatten真正的动态分支由于会让同一个Warp中的线程不能同步执行而互相等待也会造成性能问题。在DX11中编译器支持[branch]和[flatten]指令这样就可以主动选择是flatten还是真动态分支了: [branch] if(x) {x sqrt(x); }[flatten] if(x) { x sqrt(x); }具体参考https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-if 另外如果if中的测试条件是uniform这样编译器也是可以安全的优化为只执行一个分支的代码的效率和没有分支一样。 关于shader分支优化还有很多的说法比如使用lerp以及使用一些特殊的函数计算来代替分支还有三元运算符等等但是随着硬件平台和编译器的发展一些方法已经不能优化甚至反而是负优化了这儿就不展开了其实是我也没完全弄明白。本文只想说一下Unity shader中对于flatten和branch的处理。 UNITY_BRANCH和UNITY_FLATTEN 由于Unity Shader是跨平台的不仅仅是DX系列的HLSL还支持OpenGL, Metal, Vulkan等平台的Shader因此对branch和flatten进行了包装也就是UNITY_BRANCH和UNITY_FLATTEN。例如 UNITY_BRANCH if (screenPos.x 0.5) { // run expensive code A } else { // run expensive code B }UNITY_FLATTEN if (screenPos.x 0.5) { // run expensive code A } else { // run expensive code B }使用UNITY_BRANCH时if分支只会执行满足条件的那个分支而使用UNITY_FLATTEN两种情况都需要执行。看起来我们应该总使用branch但是branch指令本身也是有消耗的如果if两边的操作都比较简单使用branch反而可能得不偿失。 在OpenGL中其实是没有branch指令的编译器会自己选择是否flatten。以及上面说过的GLES 2.0直接就只有flatten。所以这个指令只是一个hint具体还是要看平台。 branch不能使用的一种情况 fixed4 color fixed4(0,0,0,0); UNITY_BRANCH if (screenPos.x 0.5) {float2 uv screenPos * 2.0;color tex2D(_MyTex, uv); }这儿调用tex2D会产生错误因为 tex2D 会使用uv的导数(即一个像素到另一个像素的变化值去决定mip map的级别但是由于这儿的 uv 只在if分支中计算这不能保证可以计算出导数因为导数需要邻近像素的数据。修改方法如下 fixed4 color fixed4(0,0,0,0); float2 uv screenPos * 2.0; if (screenPos.x 0.5) {color tex2D(_MyTex, uv); }URP中使用UNITY_BRANCH的地方 color grading UNITY_BRANCHif (userLutContrib 0.0){input.rgb LinearToSRGB(input.rgb); // In LDR do the lookup in sRGB for the user LUThalf3 outLut ApplyLut2D(TEXTURE2D_ARGS(userLutTex, userLutSampler), input, userLutParams);input lerp(input, outLut, userLutContrib);input.rgb SRGBToLinear(input.rgb);}因为if中需要采样LUT贴图如果不是动态分支不使用 userLut的情况下也会执行这个代码代价就太大了。 附加光realtime阴影 // We have to branch here as otherwise we would sample buffer with lightIndex -1.// However this should be ok for platforms that store light in SSBO.UNITY_BRANCHif (lightIndex 0)return 1.0;float4 shadowCoord mul(_AdditionalShadowsBuffer[lightIndex].worldToShadowMatrix, float4(positionWS, 1.0)); #elsefloat4 shadowCoord mul(_AdditionalLightsWorldToShadow[lightIndex], float4(positionWS, 1.0)); #endifhalf4 shadowParams GetAdditionalLightShadowParams(lightIndex);return SampleShadowmap(TEXTURE2D_ARGS(_AdditionalLightsShadowmapTexture, sampler_AdditionalLightsShadowmapTexture), shadowCoord, shadowSamplingData, shadowParams, true); 这个代码注释也说了必须branch否则就会多采样shadow map。 参考资料 https://forum.unity.com/threads/correct-use-of-unity_branch.476804/https://zhuanlan.zhihu.com/p/122467342https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-ifhttps://zhuanlan.zhihu.com/p/525931936
http://www.hkea.cn/news/14327272/

相关文章:

  • 成都房地产网站建设怎样做微信网站
  • 珠宝商城网站模板怎么注册logo商标
  • 快站微信网站制作国外优秀app设计网站有哪些
  • 江西做网站公司郑州网站建设丶汉狮网络
  • dede 网站根目录动漫制作专业需要艺考吗
  • 网站建设 金手指排名霸屏网站优化怎么做ppt
  • 厦门网站建设优化企业高端网站建设电话
  • 做安防在哪个网站做广告呢网站制作综述
  • 漯河优惠网站建设价格洛阳网站建设汉狮怎么样
  • 帮别人设计网站重庆网站推广
  • 响应式网站应用网站建设400电话
  • 做汽配找哪个网站好菜鸟教程wordpress模板
  • 手机网站制作移动高端网站建设wordpress 学校模板
  • 游戏网站建设杭州信誉好的合肥网站建设
  • 电商平台网站建设功能介绍有必要买优化大师会员吗
  • 腾讯广告卖东西怎么建设网站0453牡丹江信息网二手房买卖
  • 校园网站建设重要性网站模板图
  • 国外营销企业网站苏州网站提升排名
  • 男人女人晚上做那事网站公司业务推广
  • WordPress不通角色权限刷排名seo
  • 好看的知名企业网站好看欧美视频网站模板下载 迅雷下载 迅雷下载地址
  • 网站开发培训多少钱自己弄个网站要多少钱
  • 做企业网站报价永久免费做网站
  • 山西临汾建设局网站ui培训班出来能找到工作吗
  • 做网站都能用什么做小型电商网站模板
  • 婚纱网站建设阿里 网站备案核验单
  • 网站做目录中国内最近重大新闻2024
  • 佳木斯做网站的公司世界上第二大互联网公司是
  • 网站是否备案怎么查询手机网站用模版
  • 软件开发兼职平台有哪些sem优化