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

来宾住房和城乡建设局网站辽宁城市建设职业技术学院教育网站

来宾住房和城乡建设局网站,辽宁城市建设职业技术学院教育网站,长春百度seo公司,网站建设设计技术方案模板前言 随着电脑和手机硬件性能越来越高#xff0c;游戏越来越追求大世界#xff0c;而大世界非常核心的一环是地形系统#xff0c;地形系统两大构成因素#xff1a;高度和多材质混合#xff0c;此篇文章介绍下UE4/UE5 地形的材质混合方案----基于WeightMap混合。 材质层 …前言 随着电脑和手机硬件性能越来越高游戏越来越追求大世界而大世界非常核心的一环是地形系统地形系统两大构成因素高度和多材质混合此篇文章介绍下UE4/UE5 地形的材质混合方案----基于WeightMap混合。 材质层 地形着色的基础组成比如雪, 沙漠岩石绿地等等。在UE5创建材质层是材质的节点LandscapeLayerBlend节点中创建 LandscapeLayerBlend节点每个输入上游就是一个材质基础层 这里我用简单的例子假定材质基础层都是一个float3常量颜色比如float3(1.0, 0.2, 0.1)。 WeightMap 各个材质基础层按照一定权重混合得到最终的效果, WeightMap就是材质权重图里面存储了各个基础层材质混合的权重值。在UE5里WeightMap的格式是RGBA8可以存储四层材质层的权重值精度为0 - 255 (对应 0.0 - 1.0的精度)。 WeightMap数量和通道使用 从之前我UE地形系列文章我们知道UE地形是由一个个地形块(LandscapeComponent)组成一个LandscapeComponent可以存在多个WeightMap, 假设存在N个WeightMap. 那么最终地块的基础材质层总数4 * (N - 1) MaterialLayerNum 4 *N. 这里之所以用“” 和 “”, 而不是“ 4 * N”是因为一张WeightMap不一定会用完所有通道。比如当前地形块刷了5种材质基础层则该地形块就存在两张WeightMap, 第一张WeightMap RGBA都用来存储四种材质基础层的权重第二张WeightMap的R通道用来存储第五种材质基础层的权重剩余的GBA通道都是零权重。 材质基础层用了哪张WeightMap的哪个通道是记录在ULandscapeComponent里 WeightMap存储权重总和 不管地形块刷了多少层材质基础层最终地形某个点的各层权重总和为1.0(255).比如说上面的地形刷了五层材质基础层有两张WeightMap分别为W1和W2, W1[n][n].R 代表访问W1权重图的N行N列的像素R通道值。 则存在公式 W1[n][n].R   W1[n][n].G  W1[n][n].B   W1[n][n].A  W2[n][n].R  255(byte) (注意W2[n][n].G W2[n][n].B W2[n][n].A 0) UE5地形权重混合的HLSL代码分析 生成的具体HLSL代码 以上面的5层材质的为案例, 抓帧得到的HLSL代码(位于Material.ush文件) 大致能看到采样了WeightMap1和WeightMap2, 然后大致能看到颜色混合了5次。 为更清楚的表示, 手写HLSL代码表示大致如下: float4 Weigh1 Texture2DSample(WeightMap1, UV); float4 Weigh2 Texture2DSample(WeightMap2, UV); float4 Layer1Mask float(1.0, 0.0, 0.0, 0.0); float4 Layer2Mask float(0.0, 1.0, 0.0, 0.0); float4 Layer3Mask float(1.0, 0.0, 1.0, 0.0); float4 Layer5Mask float(0.0, 0.0, 0.0, 1.0); float4 Layer6Mask float(1.0, 0.0, 0.0, 0.0);float3 L1 float3(0.78437978,0.95937508,0.50223249); float3 L2 float3(0.98749989,0.06583356,0.17528065); float3 L3 float3(0.45752281,0.53502721,0.88749981); float4 L5 float3(0.22312574,0.97916698,0.28475177); float4 L6 float3(0.88749981,0.25128645,0.26541224);float3 BaseColor float3(0.0, 0.0, 0.0);// five layer blend BaseColor dot(Layer1Mask, Weigh1) * L1; BaseColor dot(Layer2Mask, Weigh1) * L2; BaseColor dot(Layer3Mask, Weigh1) * L3; BaseColor dot(Layer5Mask, Weigh1) * L5; BaseColor dot(Layer6Mask, Weigh2) * L6; 这里dot(float4(1, 0, 0,0)A)其实就是取A的R通道, 其他类似道理。 地形材质Shader代码编译流程 上面可以更清楚整个材质权重混合的流程. 代码是动态生成的和地块现在使用到的实际材质基础层数量相关所以在刷UE地形的时候刷一种未出现的新材质会引起材质编译 编译生成流程的最终在UMaterialExpressionLandscapeLayerBlend::Compile编译Shader代码, 这里判断是否需要编译发生在ULandscapeComponent::GetCombinationMaterial里 首先ULandscapeComponent的所属ALandscapeProxy里存在一个 MaterialInstanceConstantMap 材质实例管理表 这个表会缓存出现过的各种地形材质实例MaterialInstanceConstantMap的key代表使用了哪些材质基础并且哪个基础材质使用了哪张权重纹理如下红圈所示 代表了LandscapeMaterialInstanceConstant_10材质实例是在 L1. L3, L3,L7使用WeightMap0, L6使用了WeightMap0的情况下编译出来的。 如果在MaterialInstanceConstantMap找到同个Key的就使用已有的MaterialInstance, 如果找不到就以ALandscape的母材质为基础创建新的材质实例并且设TerrainLayerWeightParameters材质静态编译信息 触发编译。 上面WeightMap%d和LayerMask_%s 指在Shader代码中生成了每个Layer对应的权重图和纹理通道遮罩索引在上面的HLSL实现地形材质混合的简化代码大致相符合。 当然最终这个材质实例是保存到ULandscapeComponent的MaterialInstances被UPROPERTY序列化下来。 当然最终材质编译完后得更新地形的材质实例参数值: WeightMap和LayerMask遮罩 参考资料 UE5.2的地形系统实现
http://www.hkea.cn/news/14553717/

相关文章:

  • 单位做网站图片素材汕头建网站
  • 生态文明建设网站wordpress 迁移 插件
  • 网站logo如何修改百度h5游戏
  • 51ape是谁做的网站轻松网站建设
  • 东莞阳光网招标平台昭通seo
  • 省建设厅网站合同备案用户名南通企业建站系统模板
  • 旅游网站开发需求分析目的网站设计教程网站
  • 汕头网站快速排名提升wordpress 插件手册
  • 西安免费网站制作打开现场直播
  • wordpress 命令行昆明搜索引擎的关键词优化
  • 网站页面配色分析服装定制公司
  • 站长统计app软件下载兰州网站建设实验总结
  • 吉林智能建站系统价格wordpress自动汉化版
  • 网站开发属于购销合同百度网盟推广的定义
  • 市场部做网站工作职责微信投放广告多少钱
  • 个人网站做淘宝客违规金华网站建设优化技术
  • 常德网站制作网页展示模板
  • 怎么做网站教程 用的工具个人备案网站做企业会怎样
  • 网站开发与网站运营中国企业排行榜前十名
  • 网站上报名系统怎么做手机管理wordpress站
  • 网站个人备案做论坛当铺网站建设方案
  • 重庆主页网站建设怎么自己给自己的网站做推广
  • 做兼职打字员的网站做空比特币网站
  • 广告公司微网站建设织梦网站漏洞
  • 呼和浩特企业网站网站建设类电话销售
  • 网站域名验证深信服对单一网站做限速
  • 模板网站建设多少钱外贸网站建设专业
  • 服务号wordpress站长之家seo
  • 文字游戏做的最好的网站电商专业是做什么的
  • 电子技术支持 东莞网站建设陆良县住房和城乡建设局网站