模型中多个材质的渲染顺序

栏目: 后端 · 发布时间: 5年前

内容简介:这是第157篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。UWA 问答社区:answer.uwa4d.comUWA QQ群2:793972859(原群已满员)

这是第157篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。

UWA 问答社区:answer.uwa4d.com

UWA QQ群2:793972859(原群已满员)

本期目录:

  • 模型中多个材质的渲染顺序
  • SpriteRenderer的屏幕填充实现
  • iOS如何导出Log
  • Shader加载异常
  • Unity 2018.3.7版本开发中,模型在部分设备上无法显示

模型

在一个模型中,有两个默认材质。这个时候,如果用代码,强行增加一个材质,Unity会采用复制原材质中上一个材质的Mesh作为新材质的Mesh。所以有两个问题:

1)有没有可能为材质球指定Mesh;
2)如何才能让原材质的位置调换但是效果还是显示正确。

也就是让下图中两个材质球调换位置,并且效果显示正确;

模型中多个材质的渲染顺序

第一个材质是颜色贴图材质,第二个材质是特效波动材质。

A:如果你的Mesh没有Submesh,多个材质球就是会渲染多遍,使用的对象就是当前的这个Mesh。如果有Submesh,我在编辑器模式下默认是不让增加材质球数量的,我不知道通过代码是否可行,但是如果可以通过代码添加但不能指认Mesh,是挺奇怪的。

关于顺序,RenderQueue相同的情况下,不透明和透明的排列顺序不同(不透明由近到远,因此可能认为数组顺序应该反着来做,透明的由远及近,按照数组顺序来),对于多材质的Mesh的材质渲染顺序似乎也不同。(注意,这里虽然RenderQueue设置到了半透明队列里,依然开启了ZTest和ZWrite)

模型中多个材质的渲染顺序

所以,如果你想控制两个材质球的渲染顺序,就调整材质球的RenderQueue就好了,谁大谁就在后面。

模型中多个材质的渲染顺序
模型中多个材质的渲染顺序

最后,注意Unity给的Warning:

模型中多个材质的渲染顺序

可以用多Pass来优化,甚至在一个Pass里通过宏来开关来控制(当然又要注意宏开关过多导致变体数量的问题……)

感谢贾伟昊@UWA问答社区提供了回答,欢迎大家转至社区交流: https://answer.uwa4d.com/question/5cc6e87c5dad710abee804fc

渲染

Q:3D场景里的SpriteRenderer能否填充整个屏幕?我用一个正交摄像机专门照这个背景图,这个背景图是放在场景中的,能否让这个背景图自适应填充整个屏幕?

功能有点类似,简单改造一下这个脚本就行。

自适应分两种,一种是拉伸的(图片会变形),另一种是不拉伸(图片会被裁切掉)。

模型中多个材质的渲染顺序
模型中多个材质的渲染顺序
感谢雨松MOMO@UWA问答社区提供了回答,欢迎大家转至社区交流: https://answer.uwa4d.com/question/5cc2d7b7e08a260abaf021c7

编译

Q:iOS下怎么导出Log呢?我们Log文件写在Application.persistentDataPath下,iPhone上怎么找到这个文件呢?

我们在用这个工具,可以在Windows上看iOS日志很方便。

感谢雨松MOMO@UWA问答社区提供了回答,欢迎大家转至社区交流: https://answer.uwa4d.com/question/5c5422c32b3589332f1a4946

Shader

Q:我使用了LowPolyWaterv2这个插件,里面的一个Shader在场景中做了一个水面效果,遇到如下问题:

1)当这个Shader不打包成单独的AssetBundle包时,加载场景后水面显示正常;
2)当这个Shader打包成单独AssetBundle包,加载场景后显示的水效果异常,而且并不是Shader丢失。

请问Shader打包和不打包单独AssetBundle包会有什么不同逻辑吗?

A:主要区别在于对Shader变体的收集,单独打包Shader,需要手动选择变体,使用Unity自动收集会有丢失的现象。

感谢郑骁@UWA问答社区提供了回答,欢迎大家转至社区交流: https://answer.uwa4d.com/question/5cbd6aafe08a260abaf02119

模型

Q:我在项目中使用的一个模型,版本为Unity 2018.3.7,发布以后在华为P30、mate10等机器上无法正常显示,再后续的测试中尝试修改模型法线、重新绑定等都未能解决,目前已经尝试过的很多方案,发现以下规律:

使用的材质为Standard(Specular setup)

1)模型在绑定的情况下单独导入,能正常显示;
2)模型添加绑定以后,无法正常显示;
3)绑定模型在导入Unity以后,在Inspector界面中的Model页面将Normals选择为none,能显示模型整体轮廓;
4)绑定模型在导入Unity以后,在Inspector界面中的model页面将Normals选择为import,或者Calculate,都无法正常显示;
5)将Unity导出设置是进行如下设置Player Settings -> Resolution and Presentation 中的Use 32-bit Display buffer* 以及 Disble Depth and Stencil* 全勾选或者全不勾选,均无法正常显示;
6)更换材质也无法正常显示;
7)降低版本,在Unity 5.2.3中尝试过,显示出来的模型是全黑色,没有贴图效果,材质自身给定的颜色也不显示(最好的情况,显示依旧不正常)。

请UWA社区的各位大神多多指点,先在此谢过!

A:暂时解决了这个问题,具体原因尚不是特别明确。

关于模型:

1)出问题的模型,在蒙皮前对模型的旋转上设置了一个关键帧;

2)出问题的模型,在蒙皮前模型的旋转存在非零数据;

关于设置:

Unity2018.3.7f1,在默认打包的时候勾选了GPU Skinning。

暂时的解决方法:

在Unity中反选GPU Skinning。

目前猜想:

感觉上是华为使用的Mali-G7X 的GPU在对这种模型进行计算的时候,在最开始计算初始bound pose的时候出现了错误,少计算了模型蒙皮的旋转信息。

尚存疑问:

在三维软件中对模型进行解除蒙皮,清空模型的所有信息,然后再进行绑定动画,仍然存在问题,这个暂时就不太清楚问题在什么地方,后续查找到以后再更新吧。

感谢题主席郭亮@UWA问答社区分享了该问答,欢迎大家转至社区交流: https://answer.uwa4d.com/question/5cb87b8b5dad710abee80348

今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com

官方技术博客:blog.uwa4d.com

官方问答社区:answer.uwa4d.com

官方技术QQ群:793972859(原群已满员)


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

程序设计语言理论基础

程序设计语言理论基础

米切尔 / 电子工业出版社 / 2006-11 / 68.00元

本书提出了一个框架,用于分析程序设计语言的语法、操作和语义性质,该框架基于称为类型化λ演算的数学系统。λ演算的主要特色是对于函数和其他可计算的值的一种记法,以及一个等式逻辑和用于表达式求值的一组规则。本书中最简单的系统是称为泛代数的一个等式系统,它可以用来公理化和分析通常用于程序设计的许多数据类型。可作为理论计算机科学、软件系统和数学专业的大学本科高年级或者研究生初始学习阶段的教材,同时也适合用于......一起来看看 《程序设计语言理论基础》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具