不能直接获取?聊聊如何在Shader Graph中获取深度图
0x00 前言
在这篇文章中,我们选择了过去几周Unity官方社区交流群以及UUG社区群中比较有代表性的几个问题,总结在这里和大家进行分享。主要涵盖了** StreamingAssets、Profiler、Playable、Particle、Spine、Launcher、Scripting 、Shader、 Shader Graph**等领域,其中会着重介绍一下是用一个workaround的方式在ShaderGraph中获取_CameraDepthTexture。
同时,也欢迎大家加入我们这个讨论干货的官方技术群,交流看法分享经验。
Unity官方社区交流群:629212643
0x01 StreamingAssets
Q:请问一下,在Unity2018.2版本里,Unity会将放在StreamingAssets文件夹下的js文件当作Unity的UnityScript进行编译,但是我的资源里面有html页面,需要用到这个js文件。
A:我们分别在2018.2和2018.1上进行了测试。在Unity2018.2中,的确会将StreamingAssets文件夹下的js文件当作UnityScript进行编译,这应该是2018.2之后出现的一个Bug。
这个Bug已经提交,相关链接可以查看这里:
https://issuetracker.unity3d.com/issues/non-unity-javascript-files-inside-the-streamingassets-folder-are-being-compiled-as-unityscript-files。
0x02 Profiler
Q:请问使用Profiler.BeginSample去标识代码块或者方法以便在Profiler性能分析工具中查看对应代码块的资源消耗,在unity2017.4.5版本将标识写在脚本的start无法成功标识,然而一样的代码在unity5.4版本却可以标识出来,但在标识写在unity2017.4.5的Update方法貌似也可以标识代码块。这个问题是版本问题吗?在2017.4.5的版本在某些初始化时应该怎样成功呢?
A:嗯。查了一下2017.3之后的版本修改了profiler数据的发送方式,从以前的frame base变成了stream base,在第一帧engine向editor发送的profiler数据丢掉了很多sampler,所以导致没有显示出来。
但是beginsample并不是不会在start方法中生效,游戏启动之后开启脚本的话还是可以看到的。启动时sampler不全的问题应该在2018上进行了修改。
所以,简单的说,没有显示BeginSample去标识代码块的原因是在2017.3-2017.4时有的sampler被丢弃了。并不是针对某个特定的方法。
0x03 Playable
Q:在使用Playable的api时遇到了一些问题,下面第一张图是正常的情况。第二张图是调用:
mixerPlayable.SetInputWeight(0, 1.5f);
将input0的权重设置为1.5之后的情况。整个模型被不正确的拉伸,并且动作表现错误。
A: playerable mixer的混合是这样的机制:Weight1 * animation1 + Weight2 * animation2+Weight3 * animation3。因此在权重总和大于1的时候会出现问题。建议对传入的权重进行归一化。
0x04 Particle
Q: 我有这样一个结构,刚刚创建是正常的。
现在把它Disable掉后调转180度。
再激活,黄色部分的发射器是正常的,红色是子粒子,发射错误。
A: 经过测试,这是一个Bug,即在play mode的情况下,disable掉parent对象并修改其transform数据后,subemitter并没有正确继承其parent的transform数据。
该问题已经向开发人员提交了Bug,可以在此查看:
https://issuetracker.unity3d.com/issues/particle-subemitters-dont-inherit-parents-rotation-correctly-while-the-parent-object-is-disabled-in-play-mode
0x05 Spine
Q:请问大家,当spine导出图片是两张时,unity编辑器里播放的动画就是乱的。有什么解决办法吗?
A: 导出设置里的“缩放”选项的scale缩小一下,比如改成0.8,导成一张。(成都-树林)
Q:还是不够放到一张,可以再缩小吗?
A:去掉空白处,图集小很多。(成都-树林)
0x06 Launcher
Q:我遇到了启动界面白屏的问题,5.6.0和2018最新版本都有,而且网上讲的办法都试过了,都不行,试了一整天了。
A:白屏的问题解决了,怀疑是双显卡导致的,Unity的快捷方式右键可以选择运行的显卡,我来回切了两次就可以了。(深圳~刘彦)
A:这种并非卡在loading页面的白屏,很多时候是DX的驱动不兼容造成的,可以尝试切换运行的显卡,也可以尝试一下在命令行强制使用GL启动。相关命令行参数可以参考这个文档:https://docs.unity3d.com/Manual/CommandLineArguments.html
Q:无限卡Loading…有人遇到过么?
A:卡Loading的问题,很多时候可以看看editor.log里面的相关输出。
例如下面这样的log:
No sufficient permissions while processing request "https://core.cloud.unity3d.com/api/login", HTTP error code 401
一般卡loading基本都是网络原因的多。可以试试断网,进入离线模式。有vpn的话也可以先去掉vpn这些,有的时候是因为vpn的各种奇葩的配置导致的,当然还可以查看一下防火墙的设置。
还有另外一种情况,例如下面这样的Log:
COMMAND LINE ARGUMENTS:
D:\u2017.1\Editor\Unity.exe [CEF] undefined in file:///C%3A%2FUsers%2Falex%2FAppData%2FRoaming%2FUnity%2FPackages%2Fnode_modules%2Funity-editor-home%2Fdist/assets/unity-editor-home.js at line 39 Error loading https://api.unity.com/v1/oauth2/authorize?client_id=launcher&display=launcher&locale=en_US&response_type=code&redirect_uri=launcher://unity/C%3A%2FUsers%2Falex%2FAppData%2FRoaming%2FUnity%2FPackages%2Fnode_modules%2Funity-editor-home%2Fdist/index.html#/login
此时可以考虑移除"C:\Users\XXXXXX\AppData\LocalLow\Unity"文件夹,因为该文件夹会缓存一些登陆信息,移除之后再尝试启动Editor。
0x07 Scripting
Q:刚学u3d不久,想问几个问题:
1.公司里是怎么生成json文件的
2.数据库的增删改,是直接在数据库文件里修改,还是写代码修改,如果公司有自己的服务器,
怎么拿到服务器里的数据.
求经验大佬来指教.
A:绝大多数编程语言都有生成json的方法,直接调用即可,比如java可以使用gson包。
数据库操作可以使用第三方框架,java的后台可以考虑hibernate或者mybatis。安卓端本地的sqlite可以使用content provider来调用数据库。Unity也有自己的使用sqlite的方法,不过我没用过。(南京-科穆宁)
Q:话说开发手机ARCore要测试好不方便,每次都要打包出来.....请问大家有碰到过这个问题吗?有好的测试方法吗?谢谢~
A:Unity有提供一个叫做EditorConnection的类,可以用来满足类似的需求。相关文档可以查阅:
https://docs.unity3d.com/ScriptReference/Networking.PlayerConnection.EditorConnection.html
0x08 Shader Shader Graph
Q:怎样让着色器弄成这样,我翻了文档,没查到。。。
A:这个是因为Shader文件中没有标示出ShaderSnippets,比如你创建一个surface shader,然后把CGPROGRAM去掉,也会是这个效果。
Q:请问如何在ShaderGraph中获取深度图,例如_CameraDepthTexture?Unity版本2018.2。
A: 默认情况下,ShaderGraph没有提供接口直接获取_CameraDepthTexture的。
但是有一个workaround的方式可以来获取_CameraDepthTexture。即创建一个新的property,该property的name和reference都叫_CameraDepthTexture,与此同时不勾选exposed。
同时,打开LightWeightRenderPipeline Asset中的深度图选项。
场景中的Camera要添加一个LightweightAdditionalCameraData组建,并且也打开深度图的选项。
之后,我们就可以正常的获取深度图_CameraDepthTexture了。
0x09 后记
好了,以上就是想和大家分享的几个在群里讨论的小问题。
再次,欢迎大家加入我们这个讨论干货的官方技术群,交流分享呀。
Unity官方社区交流群:629212643
不能直接获取?聊聊如何在Shader Graph中获取深度图的更多相关文章
- nginx的rewrite ,如何在flask项目中获取重写前的url
1. 在flask配一个重写到哪的路由,假设是/rewite/,然后到nginx的配置文件写重写规则,我这里重写全部的请求,接着测试能否重写成功 1. 添加一个路由 配置重写规则 测试成功 2.接下来 ...
- 如何在onCreate方法中获取视图的宽度和高度
你可以通过视图的getWidth()和getHeight()来获取视图的宽度和高度. 但是,可能会让你失望的是,如果你直接在onCreate方法内调用这两个函数,你会的到0. 为什么呢? 这是因为,当 ...
- AM使用指南:如何在Managed Bean中获取AM实例?
AM是放置服务方法的地方,有时我们需要在Managed Bean中调用这些方法.要调用这些方法,首先要在Managed Bean中获取AM实例.这里要用到<ADF工具类:ADFUtil.java ...
- 如何在 vuex action 中获取到 vue 实例
问题:在做运营开发工具的时候 我想要请求后台服务器保存成功后 弹出一个弹框(饿了吗 的 message 弹框), 由于$message 是挂在 Vue原型链上的方法 (Vue.prototype.$m ...
- PHP获取http头信息和CI中获取HTTP头信息的方法
CI中获取HTTP头信息的方法: $this->input->request_headers() 在不支持apache_request_headers()的非Apache环境非常有用.返回 ...
- 如何在asp.net中获取GridView隐藏列的值?
在阅读本文之前,我获取gridview某行某列的值一般做法是这样的:row.Cells[3].Text.ToString().有点傻瓜呵呵 在Asp.net 2.0中增加了一个新的数据绑定控件:Gri ...
- Nginx 反向代理 如何在web应用中获取用户ip
转载:http://blog.csdn.net/bao19901210/article/details/52537279 问题背景: 在实际应用中,我们可能需要获取用户的ip地址,比如做异地登陆的判断 ...
- 使用Nginx后如何在web应用中获取用户ip及原理解释
当nginx作为反向代理功能时,转发请求到后端服务器 通常需要使用如下命令为转发的请求增加请求头 X-Forwarded-For proxy_set_header X-Forwarded-For &q ...
- 微软BI 之SSRS 系列 - 如何在 MDX 查询中获取有效的 MEMBER 成员属性作为参数传递
这篇小文章的来源是 天善问答,比如在报表中要根据点击某一个成员名称然后作为参数传递给自身报表或者下一张报表,这个在普通的 SQL 查询中没有任何问题.但是在 MDX 中查询是有区别的,比如在 MDX ...
随机推荐
- Socket Connect问题
一.非阻塞Connect对于Select时应注意的问题二.linux客户端socket非阻塞connect编程 一.非阻塞Connect对于Select时应注意的问题 对于面向连接的socket(SO ...
- 了解mysqlpump工具
Ⅰ.功能分析 1.1 多线程介绍 mysqlpump是MySQL5.7的官方工具,用于取代mysqldump,其参数与mysqldump基本一样 mysqlpump是多线程备份,但只能到表级别,单表备 ...
- Java 学习笔记 (五) Java Compile\Build\Make的区别
以下内容引自: http://blog.51cto.com/lavasoft/436216 Compile.Make和Build的区别 原创leizhimin2010-11-30 11:30:20评论 ...
- 6种基础排序算法java源码+图文解析[面试宝典]
一.概述 作为一个合格的程序员,算法是必备技能,特此总结6大基础算法.java版强烈推荐<算法第四版>非常适合入手,所有算法网上可以找到源码下载. PS:本文讲解算法分三步:1.思想2.图 ...
- ArcGIS API for JavaScript 入门教程[3] 你看得到:数据与视图分离
这篇开始正式讲API. 数据和视图分离不是什么奇怪的事情了,这是一个著名的设计--数据与视图分开. 转载注明出处,博客园/CSDN/B站:秋意正寒. 目录:https://www.cnblogs.co ...
- Pandas 错误笔记(持续更新)
更新至2018.5.1 字典生成DataFrame 今天一个字典生成一个DataFrame,采用了以下形式,每一个value都是一个数(不是vector) df = pd.DataFrame({ 'i ...
- 前端基础-CSS的各种选择器的特点以及CSS的三大特性
一. 基本选择器 二. 后代选择器.子元素选择器 三. 兄弟选择器 四. 交集选择器与并集选择器 五. 序列选择器 六. 属性选择器 七. 伪类选择器 八. 伪元素选择器 九. CSS三大特性 一. ...
- Map集合中,关于取值和遍历的相关操作
这是自己的关于map集合的相关操作的小研究,分享给大家. 主要代码内容包含以下: 1,map集合的遍历 2,根据key值获取value值 3,根据value值获取key值 4,返回最大value值对应 ...
- python 小练习题做起来
1# 有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并# (按字母顺序排列), 输出到一个新文件C中.with open('a') as f1: a=f1.read()with op ...
- Spark学习之RDD编程总结
Spark 对数据的核心抽象——弹性分布式数据集(Resilient Distributed Dataset,简称 RDD).RDD 其实就是分布式的元素集合.在 Spark 中,对数据的所有操作不外 ...