因为项目中有换装系统,换装系统中有大量的可替换的脸部数据,比如眉毛,睫毛,腮红,眼影,口红等,需要十多个贴图通道。所以我们的shader中需要有十多张贴图通道

跑再android机器上时,一切都正常显示。但跑再iphone8时,就会发现材质丢失了

然后查到的报错信息是采样次数过多,机器不支持这个采样次数。iphone8是9个

基于这个问题,有两种解决方案

第一种:

把多个贴图合并,也就是再到gpu之前先把所有贴图合并成一个贴图,然后给gpu渲染一次。

var pixels = tex.GetPixels32();for (int j = 0; j < pixels.Length; j++){if (pixels[j].a != 0){if (j < colors.Length){var realJ = j;var newPixel = pixels[realJ] * (color * 255);var curColors = colors[realJ];var dstColors = Color32.Lerp(curColors, newPixel, (float)newPixel.a / 255.0f);colors[realJ] = new Color32((byte)(curColors.r > 0 ? (dstColors.r) : newPixel.r),(byte)(curColors.g > 0 ? (dstColors.g) : newPixel.g),(byte)(curColors.b > 0 ? (dstColors.b) : newPixel.b),(byte)(curColors.a > 0 ? (dstColors.a) : newPixel.a));}}}

写入shader:

var faceOtherShader = Shader.PropertyToID("_FaceOtherMap");bodymat.SetTexture(faceOtherShader, texture2d);

优点:这样减少了贴图数量,消耗也更少了,带宽消耗自然也更小了。

缺点:但这样做的问题是每次换装时都需要合并一次贴图,会有明显的卡顿,效果也并不是很好。

第二种

分两个材质放贴图

也就是第一个做光照模型的渲染,第二个做贴图渲染

尽量让两个材质的贴图采样个数都小于9个。让光照模型材质(AvatarMat)先渲染,贴图渲染(AvatarFaceTexture)后渲染。

然后跑到iphone8上,确实不会出现材质丢失的紫色了。

但是出现了一个问题:

就是腮红,嘴唇等都会闪烁。

然后看了下这张rt的alpha通道

越白说明alpha越高,可以看到眼睛旁边和嘴巴旁边都有半透明的效果。

查找原因:

看了下shader发现

Blend SrcAlpha OneMinusSrcAlpha

混合模式只用了这个。因为这个blend方式是也会把alpha通道做混合的。

然后我们进行分析

先渲染的avatarmat中是不透明的

但后面处理的avatarfacetexture里是有透明

然后混合用Blend SrcAlpha OneMinusSrcAlpha混合公式后得到的是一个带透明的效果,因为后面在处理的face时,因为alpha是不为1的,所以frontcolor*alpha+backcolor*(1-alpha)肯定得到的是一个半透明的值。

比如:

facetexture当前像素是(0.8,0.8,0.8,0.8)avatarmat的像素是(1,1,1,1)

计算过程:(0.8,0.8,0.8,0.8)*0.8+(1,1,1,1)(1-0.8)=(0.84,0.84,0.84,0.84)

也就是最后的alpha值是0.84,所以是透明的,所以会显示背景而导致半透明区域是闪烁的。

那么解决办法也很简单,就是区分color的混合和alpha的混合。

因为blend有一种模式可以区分color和alpha的混合。

Blend SrcFactor DstFactor, SrcFactorA DstFactorA

也就是前面两个是颜色混合,后面两个是颜色混合。正是我们想要的。所以最后的混合方式是

Blend SrcAlpha OneMinusSrcAlpha,One One

问题就解决了

当然这里还要注意FaceTextureshader要做小量的深度偏移,不然会跟身体重叠比较严重,导致闪烁发生

优点:切换贴图不会卡顿,顺畅过度

缺点:贴图采样数量还是一样多,所以会产生带宽过高的问题

以后的优化点可以考虑部分贴图合并减少贴图数量。

大量贴图采样限制下的渲染处理方法相关推荐

  1. 图形学中的贴图采样、走样与反走样等

    图形学中的贴图采样.走样与反走样等 https://blog.csdn.net/bugrunner/article/details/8829438 计算机图形学中不可避免的会涉及到图像分析与处理的相关 ...

  2. RF信号下采样/矩阵下采样(附python实现代码)

    之前对于RF信号下采样这个问题特别的懵,上采样我是知道的,其中一种方法就是对于矩阵插值,使得它具有更多的信息. 但是下采样,我查了很多资料,在知网上看到一篇论文(好像不是计算机领域的),他对于矩阵下采 ...

  3. maya阿诺德渲染失败_maya云渲染出图异常,Maya云渲染出图错误原因及解决方案

    maya出图异常处理插件配置错误 现象: 1.本地文件使用的arnold渲染器,平台上配置的是vray,类似于这种平台配置与本地使用不一致的情况 2.本地文件中用到的插件,在平台上没有配置 3.本地文 ...

  4. 华为手表哪款搭载鸿蒙系统,[图]华为Watch GT 2渲染图曝光:首款搭载鸿蒙系统的智能手表...

    原标题:[图]华为Watch GT 2渲染图曝光:首款搭载鸿蒙系统的智能手表 近日华为官宣将于9月19日在德国慕尼黑召开新品发布会,正式推出备受关注的新款旗舰Mate 30系列.与此同时华为还将会推出 ...

  5. 上采样、下采样、过采样、欠采样

    1. 过采样和欠采样 这是两种解决分类训练过程中数据量不平衡的采样方法 拿二分类举例,期望阳性样本数量:阴性样本数量 = 1:1,但实际上阳性样本数量:阴性样本数量 = 1000:100 过采样 将1 ...

  6. python使用imbalanced-learn的SMOTEENN方法同时进行上采样和下采样处理数据不平衡问题

    python使用imbalanced-learn的SMOTEENN方法同时进行上采样和下采样处理数据不平衡问题 机器学习中常常会遇到数据的类别不平衡(class imbalance),也叫数据偏斜(c ...

  7. python使用imbalanced-learn的SMOTETomek方法同时进行上采样和下采样处理数据不平衡问题

    python使用imbalanced-learn的SMOTETomek方法同时进行上采样和下采样处理数据不平衡问题 机器学习中常常会遇到数据的类别不平衡(class imbalance),也叫数据偏斜 ...

  8. 数据不平衡(class_weight、评估方法、上采样、下采样)、详解及实战

    数据不平衡(class_weight.评估方法.上采样.下采样).详解及实战 核心学习函数方法: np.random.choice() np.where() np.concatenate() np.v ...

  9. OpenCv 金字塔之上采样与下采样

    常见两类图像金字塔 高斯金字塔 ( Gaussian pyramid): 用来向下/降采样,主要的图像金字塔 拉普拉斯金字塔(Laplacian pyramid): 用来从金字塔低层图像重建上层未采样 ...

最新文章

  1. 写出一个超强的lighttpd模块
  2. 安防AI芯片“战国时代” 谁能稳坐钓鱼台?
  3. 使用CSS sprites减少HTTP请求
  4. 阿里Python后端1w+薪资面试真题!(附带准答案)offer轻松拿到手
  5. 4.14Python数据处理篇之Matplotlib系列(十四)---动态图的绘制
  6. FPGA FIFO深度计算
  7. java 集合读写同步_JAVA多线程学习十六 - 同步集合类的应用
  8. 输出螺旋数字正方形java_Java实现顺时针输出螺旋二维数组的方法示例
  9. protues软件仿真-LCD1602
  10. 华为MAGICBOOK安装win10专业版,华为MAGICBOOK win10专业版X64下载
  11. ps4 6.72破解测试版+6.72固件下载+可玩游戏汇总+6.72破解教程
  12. python三个单引号成对用于什么_python中三个单引号是什么意思
  13. H5外部浏览器唤起微信分享
  14. SpringMVC基础二
  15. python批量打印网页_web 批量打印
  16. 2018中国区块链百强企业第二弹 | 链塔智库
  17. 专题2:弹性力学中平面问题的基本理论(2-4 几何方程及刚体位移 2-5 斜方向的应变及位移)...
  18. 质量管理体系之编码质量
  19. Mac Sourcetree fatal: unable to access ‘http:.........‘
  20. iOS设备一键越狱(PP助手、盘古越狱)

热门文章

  1. 网络安全先驱传奇大佬自杀了,他的一生足够拍成一部电影
  2. 家谱树 (并查集拓扑排序)
  3. cmd介绍及常用命令
  4. 2015年7月深圳社保缴费基数费率表
  5. mac注销快捷键_mac关机的快捷键,不要强制关机。
  6. Oracle中文排序 NLSSORT
  7. SQL 中文首字母提取与自定义排序
  8. 数据库上机实验一、二
  9. matplotlib画图教程,设置坐标轴标签和间距
  10. 计算机硬件与软件教学反思,计算机硬件教学反思.doc