您的位置:首页 > 移动开发 > Unity3D

在Unity 3D中,shader是何时编译的,在何时加载入显存中的?

2015-11-10 18:20 603 查看


在Unity 3D中,shader是何时编译的,在何时加载入显存中的?

是某一对象在实例化时,加载其相关的material与shader还是游戏开始时?

添加评论 

分享

按时间排序按投票排序


4 个回答

赞同9
反对,不会显示你的姓名



侯帅英,一个想站着把钱给挣了的游戏人

李委函邓方郝鹏程 等人赞同

Editor中:修改shader并保存时立即编译。

Runtime下,无论哪个平台,都是在进入场景时加载shader object内容到内存,但是首次实际调用渲染时才编译,编译完成之后会cache下来。

有两种优化方法:

1. 调用Shader.WarmupAllShaders(),自动编译该场景中用到的所有shader。该方法在Unity5中已经废弃。

2. 在项目设置的GraphicsSettings中,可以导出ShaderVariantCollection,并在Preloaded Shader中导入,这样的话就可以在载入场景时一并编译需要预加载的shader,这样的优化在移动平台上用得比较多。

具体见:
Unity - Manual: Optimizing Shader Load Time

发布于 2015-05-08 3
条评论 感谢 

分享

 收藏 • 没有帮助 • 

举报

 • 作者保留权利

赞同1
反对,不会显示你的姓名



钱康来,会写点shader的小弱鸡

知乎用户 赞同

你在编辑器里,每次修改、保存的时候就会自动编译(unity是监视Asset文件改动的)

移动平台的话,感觉是载入场景的时候,按需编译、加载的,不过不是十分确定

Unity - Scripting API: 这个文档里有一些说明:Usually
graphics drivers do not actually prepare shaders until they are first needed. However when some object is first rendered with a previously unused shader, there can be a hiccup because the driver is compiling/optimizing the shader. This can be quite noticeable,
especially on mobile platforms.

编辑于 2015-05-08 添加评论 感谢 

分享

 收藏 • 没有帮助 • 

举报

 • 作者保留权利

赞同1
反对,不会显示你的姓名



十字傷,游戏程序员

A希亿 赞同

是在加载材质时後编译的

发布于 2015-05-07 添加评论 感谢 

分享

 收藏 • 没有帮助 • 

举报

 • 作者保留权利

赞同0
反对,不会显示你的姓名


知乎用户,核桃他爹/发现再不逗逼也就老了

编译时间不知道。

用于渲染的话私以为不存在【载入】这个词,在GPU开始做渲染的计算时,shader就是一段代码而已。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: