Q&A——图形渲染(二)

UnityMultiplayerSample:使用新的Unity Transport的示例ServerClient Unity项目 UnityMultiplayerSample 使用新的Unity Transport的示例服务器/客户端Unity项目 立即下载

图形渲染

Q1:以前端游时代,材质根据Pass不同、光照环境不同可以离线预编译成ShaderCache,运行时并不需要拼材质再实时编译,只要加载二进制代码就好了。那Unity有没有做这件事呢?我们是根据平台和环境预编译的Shader。

对于支持 Binary Shader 加载的设备,在首次编译某个 Shader 的时候是会生成其对应的 Binary Shader Cache ,生成的 Binary 文件位于和 Application.persistantPath 并列的Cache 目录下。


图形渲染

Q2:相同效果前提下,就性能而言,Shader 是用 V&F 还是Surface好?

Surface生成的V&F比较庞杂,分支较多,如果不注意 #pragma surface 参数的选择,容易出现不必要的开销。举例来说,如果直接用 Unity 5.x 中默认创建的 Surface Shader (默认参数为 #pragma surface surf Standard fullforwardshadows),那么 Shader 是会做 Physically based Standard Lighting 的,而这在移动端开销非常大,且并非必要。


图形渲染

Q3:Lightmap在Baked GI的等待时间比较长(Realtime GI已关闭),想请教有没有什么建议的参数或是方式,可以缩短等待的时间?

目前就我们的了解,在Unity 5.x比较影响烘焙时间的主要是大面积的面片导致Light Transport 过程过久(Enlighten 的机制所限)。可以尝试拆分面积较大的面片,来提高烘焙的速度(通常,拆分大面积的面片对渲染性能也会有所提升)。

主要原因可参考如下的帖子: http://forum.unity3d.com/threads/light-transport-problem-with-large-objects.310405


图形渲染

Q4:我看到Unity 5.3.5版本中恢复了对粒子系统的合批功能,但是我尝试下来并没有达到这个效果。是粒子系统合批有什么要求吗,实例化会不会对粒子系统的合批造成影响呢?
1.png

经过我们验证,Unity 5.3.5 版本中确实恢复了对粒子系统的动态合批功能(可尝试添加多个默认的粒子系统,观察Batches的数量变化)。同时我们并未发现实例化会对粒子系统的合批产生影响。

需要注意的是,粒子系统合批的前提是渲染顺序上相邻,且材质相同。默认情况下,粒子系统的渲染与一般的半透明渲染一样,必须从后向前渲染。通常一个特效可能由多个不同材质的粒子系统组成,因此在大多数情况下,当屏幕上出现多个相同的特效时,由于粒子系统的排序问题并不会生成合批。所以,目前只能通过人为指定粒子系统的渲染顺序来绕过该问题,具体做法可见该博客地址:
http://blog.youkuaiyun.com/github_32062421/article/details/49203501
但该做法的缺点也显而易见,当两个特效部分重叠时,粒子系统的排序是不正确的(会出现后方的粒子系统遮挡前方的粒子系统的现象),因此也只能酌情采用。

图形渲染

Q5:某个Shader里设置了Culling Off,会影响到后面所有Shader的渲染状态么(假设后面不再设置Culling)?
UWA Tech Doc

一次 Draw Call 提交所相关的 Render State 是不会影响到下一次的渲染状态的。如果不在 Shader 中显示指定 Cull 模式,则会使用默认的 Cull Back。

图形渲染

Q6:项目在发布时,Player Setting中勾选的这个选项,UWA Tech Doc对于已经打包并且放到了Streaming Assets中的AssetBundle文件有效果吗?模型资源里有个UWA Tech Doc选项,是否能达到同样的效果?

理论上 Optimize Mesh Data 是 Build Player 或者 Bundle 时才生效的,所以之前打好的 Bundle 就没效果了。另外,两个选项的效果是不同的,后者是调整面片排序的。

图形渲染

Q7:MeshBaker 烘焙的Mesh可以保存到Prefab中,但是不能像FBX一样,设置Model导入设置中的Generate Lightmap UVs 等信息,请问有没有大招可以处理此情况?

首先从理论上说,一个 Mesh 只能有一个 LightmapIndex 和 LightmapOffset 属性,这就决定了 Mesh 的合并必须在 Lightmap 的烘焙之前。

而在做Mesh合并时,需要注意到UV2对于一个Mesh而言,其所有三角面的UV区域都必须是互不重叠的,所以不能简单直接地合并。

考虑到合并前每一个Mesh的UV2区域都应该是在[0,1]x[0,1]的区间中,在合并时可以给每一个UV2区域做一个缩小和平移,从而可以把每个区间在互不重叠的情况下,放到同一个[0,1]x[0,1]的区间中。

在UV2也正确拼合后,重新进行Lightmap的烘焙即可得到正确的效果。

图形渲染

Q8:我们现在采取了2种资源管理方式, 我想了解下内存占用问题。 方式A:AssetBundle加载好以后在内存中保留, 如果需要创建对象就通过Instantiate来创建。方式B:AssetBundle加载好以后立刻通过Instantiate实例化一个对象, 然后Unload(false)这个AssetBundle,如果需要,创建对象通过clone来完成。对于方式A,在Profiler中发现 WebStream中有相关AssetBundle文件存在, 我们认为这份内存是多余的, 所以就采取了方式B, 方式B又面临资源卸载不干净的情况。想确认一个问题, 如果采取方式A: 一个 xxx.assetBundle原始文件大小是 1MB, 解压到Webstream内存中是2MB, 最终实际内存占用是2MB 还是3MB 呢?

如果采取方式A:最终实际内存占用是2MB,而不是3MB,WebStream中已经包含原始AssetBundle的数据。对于没有依赖关系的AssetBundle文件,我们推荐方式B的形式对AssetBundle进行卸载,这样可以免除不必要的内存占用,对于这种方式加载出来的资源,可以通过Resources.UnloadAsset和Resources.UnloadUnusedAssets来进行卸载,如果无法卸载,则该资源一定被缓存了,研发团队可通过检测自己的缓存池/Constainer来进行检测。同时,如果是Unity 5.3以后版本,可尝试通过Memory Profiler来进一步查看。

图形渲染

Q9: 我用内建的Shader渲染场景,深度图里有内容。而用自己的Shader,取到的深度图什么都没有,都是1,什么原因导致的呢?我已经打开ZWrite了。

在Unity4.x中,Unity的_CameraDepthTexture 的生成,会根据Rendering Path的选择和设备的不同使用不同的方法实现,一种是直接从depth buffer获取,另一种是添加额外的Pass来渲染到纹理。目前在移动设备上主要是通过后者实现,而后者的实现借助了Shader Replacement的机制(批量替换为简单的Shader,并将深度渲染到纹理中)。

因此,在使用自定义的Shader时,就需要正确地设置RenderType的Tag(所有内置Shader都是设置好的),从而使得Shader Replacement正确地执行。具体可见文档:
http://docs.unity3d.com/Manual/SL-ShaderReplacement.html

而在Unity5.x中,则不再通过Shader Replacement来实现了,因此需要添加一个包含了"LightMode"="ShadowCaster"的Tags的额外Pass,用来写入深度值。

图形渲染

Q10:同一个场景,烘了两套 Lightmap,切换的时候有没有办法在这两套Lightmap之间实现平滑过渡?

可以尝试重写渲染Lightmap的相关Shader,Unity提供了DecodeLightmap函数,因此在Shader中同时Decode需要过渡的两张Lightmap,然后针对相同的采样点进行加权平均(具体的过渡方式可自行控制),从而得到Lightmap平滑过渡的效果。


上机笔试题目:取出指定条件二维数组的子数组 取出指定条件二维数组的子数组: 1)传入参数为: 参数一:String[][]sArray2字符串二维数组 参数二:Stringkey字符串 参数三:StringkeyFormat含匹配符的字符串,如下:%0-%1,其中%x含义如为:一维数据列序号为x的值。 keyFormat 可以为 %0-%1-%2,%0-%3-%8-%x...... 例子如下... 阅读详情

相关推荐

HCIP-Cloud Service DevOps Engineer V2.0 华为认证云服务 DevOps高级工程师 章节测试题+结课测试题(模拟考试题)汇总

本文为HCIP-Cloud Service DevOps Engineer V2.0 华为认证云服务DevOps高级工程师 在线课程中所有章节测试以及结课测试(HCIP-Cloud Service DevOps Engineer模拟考试)习题和答案

gaogao0305的博客 2269

Unity3D教程之Light光源

Unity3D项目中,灯光摄像机都是一个游戏中十分重要的组件,下面我们就来谈谈Unity3D教程中的Light光源。如果大家对Unity3D感兴趣,就来菜鸟在线观看我们的Unity3D教程。   在Unity项目中,灯光和摄像机是非常重要的游戏组件。灯光可以提升游戏的画面质感,摄像机可以捕捉游戏的场景,并将其输出到屏幕上。如果大家对Unity3D感兴趣,就来菜鸟在线观看Unity3D

ax1274669874的博客 2万+

迈创cameralink采集卡安装操作说明

迈创cameralink采集卡安装操作说明MIL软件安装MIL软件下载获取MIL软件安装MIL软件安装常见问题 MIL软件安装 MIL软件下载获取 MIL软件安装 解压MIL安装包,点击MilSetup.exe开始安装,如下图所示; 备注:64位系统MIL软件可以同时安装32位和64位客户端,本文档默认安装64位客户端,64位系统安装32位MIL方法后续再展开讲(不建议这样用,很麻烦) 点击Launch Installation开始安装,64位系统,默认只安装64位MIL客户端 根据采集卡驱动,选择M

qq_23107577的博客 9356

UnityShader实例07:在shader调用unity内置lightmap和light Probes

在shader调用unity内置lightmap和Light Probe 在编写unity shader的时候,有时候会有需求,希望写的shader能支持unity内置lightmap或者light probe (灯光探测器)。如果是用surface 编写的话,这些自然不用考虑,unity会自动编译支持,但如果是用vert&frag编写shader,这些需要自己添加相关代码调用了 。

lupeng的博客 1万+

LAMMPS in文件详解:从零开始手把手教你配置金属分子动力学模拟

本文详细解析了LAMMPS in文件的配置方法,手把手教你完成金属分子动力学模拟的全流程。从软件环境准备、势函数选择,到使用Materials Studio构建模型、编写in文件进行能量最小化与系统弛豫,再到实施单轴拉伸生产模拟并提取应力应变数据,最后通过Python和OVITO进行结果分析与可视化,提供了完整的实战指南和常见问题排查技巧。

weixin_28475533的博客 530

STM32+W5500实战:5分钟搞定FreeModbus TCP移植(附完整代码)

本文详细介绍了如何在STM32微控制器上,结合W5500以太网芯片,快速完成FreeModbus TCP协议栈的移植,构建稳定可靠的工业级Modbus TCP服务器。内容涵盖硬件连接、软件架构、驱动适配、核心移植代码实现及调试优化技巧,旨在提供可直接应用于实际项目的完整解决方案。

life6的博客 879

新版unity2019.3 全局光照GI 系统以及反射探针的详细说明教程

unity放话在2021年以前全面放弃emssion。 使用最新的支持光线追踪的prissive cpu。虽然目前新版光照系统还有很多不足,但是相比较之前的光照系统还是有很大的效果提升(降噪除外) ...

失业求捞! 1万+

【MMDetection3.0实战】从零构建自定义数据集训练流程

本文详细介绍了使用MMDetection3.0框架从零开始构建自定义目标检测数据集的完整训练流程。内容涵盖环境配置、COCO格式数据准备、核心代码改造、模型配置与训练策略调优,以及最终的模型测试与验证,帮助开发者快速上手并训练自己的检测模型。

l6m7n8的博客 315

unity3d meshBaker教程(一) 基本的使用

http://blog.youkuaiyun.com/qq617119142/article/details/43835747 meshBaker版本:3.31   ps:(原本使用的3.6,结果发现那个版本貌似有些问题) unity3d版本:4.61 作用:本人项目中,从drawCall 60左右 降到了 十几个,优化利器。。 最基本的使用 一.搭建场景

chenluwolf的专栏 8049

【异常】插入Milvus时出现无法插入的情况提示io.milvus.exception.ParamException: The field: meta is not provided.

在使用 Milvus 进行向量搜索时遇到 io.milvus.exception.ParamException: The field: meta is not provided 错误通常意味着在创建集合(Collection)或者插入数据(Insert)时,某些必需的元数据字段没有被正确提供。检查集合创建,确保在创建集合时,你已经定义了所有必需的字段,并且正确地使用了 SchemaField 来定义这些字段。例如,如果你在创建集合时没有正确设置元数据字段,就会出现这个错误。请严格按照这个表结构创建。

奶爸的编程之路,也就一周冷个三天 927

Xilinx系ZYNQ学习笔记(一)Vivado使用说明

vivado使用学习

贾saisai的博客 1876

Q&A——图形渲染(一)

图形渲染 Q1:当关闭预渲染GI时会出现IndirectResolution,这个参数有什么用,为什么调大了以后会大大增加渲染时间,但是烘培出来却没有什么效果。 该值主要控制的是GI的烘焙密度,数值越大,表示每个单位距离内的Texel越多,即烘焙得越精致,自然烘焙的时间也越长。 该值并非越大越好,场景越小建议该值越低。该值为1时,对于多数场景,其烘焙效果已经足够了,升高该值,其效

起个名字好难啊 747

NX二次开发PK获取对象类型

PK_ENTITY_ask_class(),获取对象类型建议用这个函数,比较通用,包含所有对象类型,可以替代UF_MODL_ask_edge_type(),UF_MODL_ask_body_type(),UF_MODL_ask_face_type()等函数。

qq_39541524的博客 828

Q&A——图形渲染(三)

图形渲染 Q1:我们的游戏中有一些静止的建筑,会和整个场景一起烘焙(包括了每个建筑在地表的阴影)。现在希望这些建筑是逐步开放的,比如玩家1级的时候只有建筑A开放,2级的时候建筑B开放,现在的问题是当建筑未开放时(SetActive(false))地表的相关阴影还在。这种问题一般是怎么处理的? 这种问题是因为研发团队将整个场景烘焙成一张Lightmap所致。如果地图中的建筑是固定

起个名字好难啊 840

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【Q&A】装饰模式在Qt中有哪些运用?

Qt在IO模块和图形模块中广泛使用装饰模式,既保证了底层设备的通用性,又通过灵活的装饰器实现了功能扩展。这种设计符合开闭原则,是学习结构型设计模式的经典案例。

Antonio915的博客 1410

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【Q&A】cocos2dx中如何使用plist中的图片

qq_21568643的博客 956

【HGE引擎】学习HGE遇到的若干问题及解决方式记录 Q&A

Q1: 错误 3 error LNK2019: 无法解析的外部符号 "public: __thiscall hgeSprite::hgeSprite(unsigned long,float,float,float,float)" (??0hgeSprite@@QAE@KMMMM@Z),该符号在函数 _WinMain@16 中被引用 hge_tut01.obj A1: 没有加载相关的l

走向CTO的路上... 3149

【Q&A】2012-11-13 移动技术公开课《ArcGIS移动应用新主张》 Q&A

下载授权相关 Q:ArcGIS的移动SDK是免费的吗?如果只是用移动的API、地图服务使用自有的地图服务发布平台,是否可以? A:ArcGIS的3大移动开发包:ArcGISRuntime SDK for iOS/Android/Windows Phone均可以在Esri的官方网站上免费下载,并且免费用于学习研究、公益性项目,只需要在使用的地图中标上Esri的Logo即可。对于商业应用,需要Ar

ArcGIS产品与技术专栏 3081

Q&A——资源加载/卸载

资源加载/卸载 Q1:如下图,通过纹理图片通过文件流形式加载到内存, 这样的资源还可以使用Resources.UnloadUnusedAssets()和Resources.UnloadAsset(m_Asset)进行资源卸载吗? 如果是自己载入内存并初始化为Unity的Texture2D,则还是要重点查看Texture2D对象的创建方式。一般来说,会用new Textur

起个名字好难啊 736

2012-11-13 移动技术公开课《ArcGIS移动应用新主张》 Q&A

下载授权相关 Q:ArcGIS的移动SDK是免费的吗?如果只是用移动的API、地图服务使用自有的地图服务发布平台,是否可以? A:ArcGIS的3大移动开发包:ArcGISRuntime SDK for iOS/Android/Windows Phone均可以在Esri的官方网站上免费下载,并且免费用于学习研究、公益性项目,只需要在使用的地图中标上Esri的Logo即可。对于商业应用,

1万+

DeepLearningFlappyBird技术演讲:Conference报告准备指南

你是否在准备AI/强化学习领域的学术报告时,面临"算法复杂难以可视化"、"代码演示效果差"、"听众理解门槛高"的三重挑战?作为最经典的深度强化学习入门案例,DeepLearningFlappyBird项目包含从环境交互到神经网络训练的完整闭环,是技术演讲的理想素材。本指南将通过**5大核心模块**(项目架构解析→算法原理可视化→实验结果呈现→代码演示优化→Q&A应对策略),帮助你打造一场兼具学术深...

gitblog_00198的博客 469

跨平台游戏开发的终极解决方案:5分钟掌握MonoGame框架核心优势

你是否曾梦想开发一款能在PC、手机、游戏主机上同时运行的游戏?是否因为不同平台的开发环境和技术栈而望而却步?MonoGame正是为解决这些跨平台游戏开发难题而生的开源框架。作为微软XNA框架的开源实现,MonoGame让开发者能够使用熟悉的C#语言,一次性编写代码,部署到Windows、Linux、macOS、Android、iOS乃至PlayStation和Nintendo Switch等十余个

gitblog_00295的博客 696

gpu cpu交互_CPU和GPU如何交互以渲染计算机图形?

gpu cpu交互Your computer’s Central Processing Unit (CPU) and Graphics Processing Unit (GPU) interact every moment you’re using your computer to deliver you a crisp and responsive visual interface. Read ...

2167

3个步骤快速上手:用Ryujinx Switch模拟器在PC畅玩任天堂游戏

想在电脑上体验《塞尔达传说:旷野之息》、《马里奥赛车8豪华版》等Switch独占游戏吗?Ryujinx Switch模拟器让你无需购买主机,就能在PC上享受数千款任天堂游戏!这款用C#开发的开源模拟器支持Windows、Linux和macOS三大平台,无论你是游戏爱好者还是PC游戏模拟新手,都能轻松上手。 ## 🎯 为什么选择Ryujinx?三大核心优势 Ryujinx作为目前最活跃的Swi

gitblog_00117的博客 689

MATLAB EXPO 2021 Japan社区活动:从线上技术聚会到知识生态构建

MATLAB作为一款广泛应用于工程计算、算法开发和仿真的技术工具,其核心价值不仅在于强大的矩阵运算和可视化功能,更在于其构建的庞大技术生态。从基础概念来看,MATLAB通过其编程环境和丰富的工具箱,为工程师和科研人员提供了从算法原型到系统仿真的完整解决方案。其技术原理在于将复杂的数学运算封装为易用的函数,并支持与硬件、其他软件的联合仿真。在工程实践中,MATLAB的价值体现在它能显著缩短从理论到实现的周期,尤其在信号处理、控制系统、图像分析等领域。应用场景覆盖了从学生完成课程作业、研究人员进行算法验证,到工

weixin_34218890的博客 390
上一篇: Q&A——性能优化(一)
下一篇: Q&A——资源管理(二)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值