如何用unity 镜子做两面互相反射的镜子

光在两面镜子中无限反射会增强还是削弱? | 问答 | 问答 | 果壳网 科技有意思
光在两面镜子中无限反射会增强还是削弱?
在相对着的两面镜子中放置一个光源,假定光源发光恒定,那么光线在两面镜子之间无限反射后会怎么样?光应该具有能量,那如果把这两面镜子和光源放置在一个箱子中,且假定镜子反射不损耗光的能量,那么这个箱子会爆炸么?为什么?
物理学chacha
首先,光传输的介质可能发生损耗(也可能是增益,那就是激光的情况);然后,不存在反射率100%的镜子,反射时的损耗会非常大,如果利用全反射镜损耗会骤减非常多,但一定会有损耗(此处特别强调是振荡腔内的光的能量发生变化,即包括损失转化为其它形式能量的和漏到外面的);由于损耗的发生在能量不太强时可以认为是线性的,也就可以认为是按比例减弱的,那么当腔内光强增大时,损耗的功率就会相应增大,直到损耗的功率等于光源的输入功率(灯泡功率或者激光情况下泵浦的输入),那么振荡的光就不会再增强,而达到了一个稳定的最大值。故而激光器本身都是有输出功率的限制的,输入一定的时候不可能无限增大。输出功率一定小于输入功率(因为其他损耗)【废话,能量守恒啦
(C)2017果壳网&&&&京ICP证100430号&&&&京网文[-239号&&&&新出发京零字东150005号&&&&
违法和不良信息举报邮箱:&&&&举报电话:有没有可能做两面互相反射的镜子?【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:76,604贴子:
有没有可能做两面互相反射的镜子?收藏
试过了用water reflection的代码,和reflection probe做镜子,但不能互相反射。试过了render texture,可以互相反射,但render texture并不是镜子的效果,尤其当第一人称角色走近镜子的时候,完全不是镜子的表现。请问有没有可能在unity中做出来两面镜子互相反射的效果?
达内unity3d培训全程&实战教学&,unity3d金牌讲师授课.免费unity3d课程试听中!到达内unity3d学院学习unity3d,只需4个月速成unity3d游戏工程师.
真要做出来也是死循环吧
光线追踪2333
然后玩家看了一眼镜子,游戏未响应了
Reflection probe貌似可以自定义反射次数的
登录百度帐号推荐应用&a href=&///?target=https%3A///zhutaorun/strangeioc& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - zhutaorun/strangeioc: The IoC/Binding Framework for Unity3D and C#&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=https%3A///zhutaorun/strangeioc& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&strangeioc&i class=&icon-external&&&/i&&/a&架构,我自己项目再用,简书也有一位腾讯的&a href=&///?target=http%3A///p/10693fee70a5& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Unity3D手游开发实践&i class=&icon-external&&&/i&&/a&,比我写的多一些也详细。当然我自己写了这个架构的介绍。&br&&a href=&///?target=https%3A///zhutaorun/HGFramework& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - zhutaorun/HGFramework: unity客户端框架&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=https%3A///zhutaorun/HGFramework& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&unity客户端框架&i class=&icon-external&&&/i&&/a&&br&还有些,你要自己去找了。&br&补充unity-cnUnity中国官方给的一些工具&br&&a href=&///?target=https%3A///unity-cn& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Unity Technologies China · GitHub&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A//www.ulua.org/index.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ulua - unity效率最高、最完善的热更新方案!!&i class=&icon-external&&&/i&&/a& 其中项目下载都在github,最近在看LuaFramework
架构,我自己项目再用,简书也有一位腾讯的,比我写的多一些也详细。当然我自己写了这个架构的介绍。
&p&看到一个简单的方法:素材使用高分辨率,然后渲染到一张低分辨率的RenderTexture上。&/p&&img src=&/v2-929ff595c48a97fc5baced4_b.png& data-rawwidth=&729& data-rawheight=&412& class=&origin_image zh-lightbox-thumb& width=&729& data-original=&/v2-929ff595c48a97fc5baced4_r.png&&&br&&img src=&/v2-d1ea97f15d_b.png& data-rawwidth=&729& data-rawheight=&409& class=&origin_image zh-lightbox-thumb& width=&729& data-original=&/v2-d1ea97f15d_r.png&&
看到一个简单的方法:素材使用高分辨率,然后渲染到一张低分辨率的RenderTexture上。
&p&只说一点,软光栅剔除是可以放在另外一个线程做的(充分利用多核,可以多核并行的),用1/4屏幕分辨率或者更低,一定跑的起来,如果还是跑不起来,不是场景实在复杂,就是机器cpu实在太差,抑或者是你其他场景管理算法欠缺,我10年前就在pc做过了,当时的cpu估计不如现在的手机吧。&/p&
只说一点,软光栅剔除是可以放在另外一个线程做的(充分利用多核,可以多核并行的),用1/4屏幕分辨率或者更低,一定跑的起来,如果还是跑不起来,不是场景实在复杂,就是机器cpu实在太差,抑或者是你其他场景管理算法欠缺,我10年前就在pc做过了,当时的cp…
我自觉很多老知识都不会,并不很追贴潮流,所以更多是按需要读书;网站的话,大概最多的是 &a href=&///?target=https%3A//& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a& 。
我自觉很多老知识都不会,并不很追贴潮流,所以更多是按需要读书;网站的话,大概最多的是
&p&做游戏技术主要讲究的是套路,以及对套路的掌握程度。比如说你要搞个体积光,那么从用mesh+uv动画,到volumetric scattering你都得知道,而且要知道这些方案的优缺点,以及具体的实现细节,比如camera会不会到体积光里边之类的,这种细节的了解会让你更加有信心做出各种技术决策。&/p&&p&所以3a级游戏的大神技术也是对各种领域的套路玩得比较溜,这里我也分享一些做游戏20来年自己领悟出的一些套路吧。&/p&&p&美术用工具输出的3d模型,材质一定要做一个导出插件,否则做出来和进引擎效果不一样,就只能做做手游这种无光照的手绘贴图质量的产品了。&/p&&p&动画要想不滑步,就只能用animation driven的方法,这个需要跟策划做好深度的沟通,得让策划知道移动不是说配置一个速度就可以了,得去找动画师一起调整移动的动画。&/p&&p&动态天气的困难不是制作上的困难,是可以用lightmap的物件会少很多,性能不一定扛得住,这个要在项目初期一定得和制作团队沟通清楚。&/p&&p&球类游戏要达到非常自然的动画,一方面动画肯定是要动捕的,另一方面更重要的是搭建一套动画选择机制,然后根据运动中的球类位置来选择最合适的动画来匹配,再加上小部分的ik。&/p&&p&头上冒字和冒血这种hud就应该用hud的标准方法来制作,切记不能涂省事用ui的方法,对性能效率会有非常大的影响。&/p&&p&音频对最终品质影响很大,一般遵循46原则,即图像资源在最终包中占6成,音频资源占4成。给音频设计师配置一个独立的程序来达成音频的设计需求。&/p&&p&状态机最好是用可视化的方法来实现,游戏中80%的bug都是和状态没切对有关,有个可视化的状态机对于找bug非常方便。&/p&&p&control是最需要状态机化设计的(不同的情况下按同样的按键达成不同的逻辑)&/p&&p&做面部表情,如果不是捕捉就用骨骼简单搭搭就好,如果是捕捉,制作成本会变得非常的高(制作各种morphing target)&/p&&p&对最终画面影响最大的是镜头效果,所以尽量节省渲染时间留给镜头特效。一般影响最大的是校色,如果硬件平台允许尽量给美术提供带深度校色的工具。&/p&&p&有比较宽广视野的游戏,室外可以用一些很取巧的方法来模拟mie scattering和rayleigh scattering,加上哪怕是假的对画面的提升也是巨大的。&/p&&p&对于不同的数据采用不同的配置方法,不要什么数据都用excel,对于有可视化需求的配置,比如ui或者角色身上需要装配一些武器的,提供可视化的工具。对于需要描述父子关系的例如技能树解锁之类的用json或者xml来描述,对于纯数字逻辑的就用csv就好了。&/p&&p&场景的材质如果制作normal map对于你们团队比较复杂,多加一层detail map也能对效果获得较大的提升。&/p&&p&角色的材质,如果性能有限或者说制作成本无法承受的话specular map比normal map的效果要好。&/p&&p&如果角色会近距离看脸,脸部的眼睛一定要单独拿出来处理,脸可以糊,眼睛一定不能糊。&/p&&p&脚步声的标准做法是在地面上放一层低模做和脚的碰撞检测(脚步声如果追求真实,最少得有3个以上的样本随机)&/p&&p&如果要提升动画效果,考虑主角的前臂加上twist骨骼,左肩和右肩不要从脖子上搭建骨骼,要从胸口开始(做head lookat的时候效果会更好)&/p&&p&衣服的标准做法是通过贴图来控制哪些顶点受skin和物理影响的权重比,那张贴图还可以用一个通道来控制流汗的时候哪些地方的smothness要提高。&/p&&p&搭建一个运行时数据库,并且游戏中经常需要访问的数据都放入数据库,可以类似redis那样非常简单的提供一个set和get就行了,运行时数据库可以帮助你找到绝大多数bug。&/p&&p&制作ai尽量使用行为树,并且花时间一定要让策划具备编辑和调式行为树的能力。&/p&&p&顶点色可以各种花式使用,无论是用来bake ao还是决定detail map的权重,都可以用很低廉的代价来获得非常棒的效果。&/p&&p&动画不是在任何时候都可以blend的,要想效果好,牢记:左脚落地的时候只能blend到左脚落地开始的动画,右脚同上。&/p&&p&做上下楼梯的locomotion的时候,用椭球碰撞体会非常简单的获得还不错的效果。&/p&&p&如果画面会经常快速的运动,可以加入一个vector based motionblur,效果会出奇的好。&/p&&p&要想场景生动,一定要使用decal,一个方便美术的decal工具可以让美术一天之内让整个场景提升几个档次。&/p&&p&暂时想到这些,不说了,休息好了继续干活。&/p&&p&~~~~~继续更新一波套路&/p&&p&解决alpha透贴排序的标准方法是两次绘制,第一次在不透明队列里渲染一次alpha test(cutout),打开zwrite,第二次在transparent队列里开alpha blend不开zwrite,ztest lessequal渲染就能还原美术在maya里看到的效果。&/p&&p&弹簧是个非常好用的物理组件,其虎克系数可以有效的模拟力的衰减来做出很多感人的效果,从乳摇,臀摇,尾巴,头发马尾,布料,脸上被重拳击中的肌肉变化都可以看到弹簧的身影。&/p&&p&adobe fuse cc + mixamo可以非常快速的搭建模型和动画来帮助策划找到剧情的场景的感觉。&/p&&p&脚下ik从程序来讲是很方便实现的,大多数引擎都有ik功能,但是工作流程我发现很多公司都没有正确使用。正确的流程是对输出的动画有一个左右脚高低的分析工具,逐动画生成每个脚步离水平面的高度曲线,然后运行时根据脚步的高低来决定ik和skin的权重。&/p&&p&镜头的设置很重要,最好给美术一个和相机镜头类似的算法来反过来计算fovx和fovy,我看到很多产品的fov都是一水的60之类的。&/p&&p&对于类似铁丝网或者其他半透物体的mipmap的标准做法是先自动生成mipmap,然后要美术手动的来降低不同lod贴图的alpha,换句话说近处看有铁丝网,远看就只有框中间近乎全透了来降低锯齿感。&/p&&p&dx10以上的平台上特效的shader加一句根据当前depth和已经绘制的depth的差来控制alpha可以实现简单且效果不错的软粒子效果。&/p&&p&头发的物理效果可以参考衣服的做法,发根受skin影响多,发梢受物理多一些即可。(额前刘海受物理要关掉重力)&/p&&p&如果实时sss负担太重,可以简单的把模型厚度信息烘培在顶点色的某个通道上,然后只需三两行代码就可以让皮肤有sss效果。&/p&&p&看到好多项目用双面材质只是在shader中简单加一句cull none,这个是完全错误的实现。正确的做法是需要把三角形索引信息走vs传递进来,然后判断是否顺逆时针,对于反面需要把法线反转才能获得正确的渲染结果。&/p&&p&先更新到这。&/p&&p&完了,感觉思绪开始打开了,又更新一些,怕一会会忘。&/p&&p&动画驱动的模式下,转向最少需要8个动画,原地左转90,右转90,左转180,右转180,移动同样四个,然后根据控制器的输入来决定混合的权重,一般神海这种级别的产品光locomotion牵扯到的动画会在40-50个这种量级。&/p&&p&对于衣物和皮肤,detail normal十分重要,可以瞬间让你的衣服能看出针织的材质。&/p&&p&处理声音的时候,远处的声音混响需要程序来手动提升,近处降低混响,对临场感增加很多。&/p&&p&声音如果样本有限,也一定要做随机,哪怕就一个脚步声样本,播放的时候也应该随机pitch和volume。&/p&&p&给策划提供一个调整动画曲线的工具,横轴是动画时间,纵轴是动画播放的速度,策划通过这个工具可以调整出情绪非常饱满的动画效果(例如:攻击前摇动画速度变慢,攻击过程加速之类的)这个需要和动画师沟通清楚,要求他们只需要k好几个相关pose即可。&/p&&p&卡通渲染的时候有一步是非常关键也是很多公司都忽略的,就是手动调整模型法线,这一步得在美术工具内完成,通常是定义toon shading的光方向之后,通过调整法线来让一些部位有“看起来”较为舒服的受光,主要是鼻子,腋下和两个胯这三个位置。&/p&&p&游戏加载的正确做法是,在出包的时候对各资源的单位加载时间进行预计算(适合配置固定的主机游戏)。之后在运行时加载的时候,根据每一帧cpu的可用空闲时间来决定当前帧可以加载的资源类型和数量。&/p&&p&渲染阴影的时候,很多人都会忽略绘制阴影那个pass的优化,以前做上一代游戏机的时候所有会有实时阴影的模型都会做一个低模和专门的材质(如果有透贴阴影的需求)。&/p&&p&对于写实类型的游戏,decals的正确制作方法是拿相机去拍,比如地上的水渍,墙上的裂痕,车上的划痕之类的,开闪光灯拍照,然后回来在ps里面抠出来。&/p&&p&有很多arpg的游戏中都有霸体的设计,霸体中不会受击,其实这个的正确做法是动画新增一个受击层,在播放霸体动画的同时轻微的blend一个受击动画,打击感会舒服很多。&/p&&p&午饭时间!&/p&&p&反响不错啊,再来一波=)&/p&&p&写实风格的贴图,推荐尽量使用Substance制作,打包不同目标平台的时候,可以根据目标平台的实际硬件情况,决定是Bake出Texture还是用Procedual Texture,其实很多时候会发现很多PBR贴图除了Google图片出来修改之外,只有Substance才能比较好的制作出来。&/p&&br&&p&有一个关于Animation Driven的系统中,AI的制作问题,主要是因为动画状态机自己有自己的行为准则,所以传统的AI设计思路就变得比较无力,比如说我希望我的NPC每0.3秒攻击一次,但是攻击动画本身就超过0.3秒了,怎么办?或者说状态机的逻辑无法响应到0.3秒的攻击。这个时候需要跟策划沟通,在Animation Driven的系统下,要完全的分开设计,NPC的大脑是AI,NPC的体格是动画状态机,很多时候AI的设计要根据体格的情况来酌情调整。要在行为树里增加一些检查身体体格的节点,比如说,我要转向某个方向,那么在适当的时候需要检查自己的身体是否真的转到指定方向了;同时对于大脑向身体发送的指令要分优先级,优先级的实现方法是该指令的有效时长,比如说我的身体在受击的状态中,但是我的大脑仍然下命令让我攻击一次对方,这条指令优先级存在时间0.2秒,如果受击状态在0.2秒内复原了,则该指令身体可以执行一次,如果0.2秒内身体仍然无法攻击,就丢掉此次指令。&/p&&br&&p&Volumetric Cloud/Fog/Light的使用一定要提前和美术进行商量,因为计算过程中牵扯到大量的Depth sampling,所以画面中多大会存在多大面积的这类效果一定需要严格控制,否则到了后期不得不移除这些效果的时候会让整个产品瞬间降低一个档次。&/p&&br&&p&在一些中低端设备上可以用一些简单的压缩算法来把RGB + Luminance除以一个除数来压缩到32bits的颜色空间中来获得非常划算的HDR效果,相比较RGBM,用除数可以免费获得“假”正确的alpha blend效果。这一条无需和美术沟通,直接上就行。(移动平台可用,效果很好)&/p&&br&&p&关于差值,差值计算最大的问题是需要和策划沟通清楚,越是符合现实生活运动规则的,只能使用物理的方法进行差值,物理的方法是没有办法精确的保障差值的最终位置和时间,但是却可以获得完美的差值效果。这里有一个非常小的tips来实现物理差值:一个物体从旋转R0,位置P0,差值到旋转R1,位置P1,需要差值的时候,在物体上挂一个弹簧,弹簧的另外一端挂在位置P1上,另外物体的运动规则增加两条:1,每帧运动转角不能超过XX度;2,物体的实际运动位置是当前朝向 * 力矩;即可,差值出来效果棒棒哒,无论是飞个火球还是跟踪导弹都可以用这个。&/p&&br&&p&美术资源的优化,这件事情比较好的方法是要严格的关注,但是尽量不要过早的修改这些问题,因为开发的过程中始终要留一些空间用来提升画面效果,所以过早的修改掉性能瓶颈,可能会导致到最后不得不放弃已经集成进版本的一些效果,非常不划算。所以等大家都对画面比较满意了之后,再进行一轮性能优化,结果还能再增加一些效果,对于美术大兄弟们来说就变成一件很好的事情了。&/p&&p&本来没打算写这么多,只是开始写了个头,就发现还有很多类似的问题也都可以罗列出来,于是出现这么多杂乱的内容,回头有时间会仔细整理整理,比如说配个图什么的,如果有朋友对于一些tips有疑义或者想知道一些详细的实现细节,欢迎私信单聊。&/p&&br&&p&应某同学的要求&/p&&p&更新一波手游的经验ヽ(o?ωo? )ゝ&/p&&p&贴图进版本的时候做一个alpha通道的剥离,一方面可以比较方便的适配安卓ETC1压缩格式,另一方面后期要压包的时候alpha通道可以随意缩大小,美术基本无感知。&/p&&p&如果是UI资源比较重的游戏可以采取layout和资源分离的方式来获得大量的性能提升。针对unity引擎来说就是遍历ui里所有用到的material,把里面的贴图替换成4*4的空白贴图,另外建立一个从材质对应贴图的索引。因为手机是ssd的缘故所以磁盘io读取贴图的速度是非常快的,这样就可以把整个ui的layout都留在内存中不用切场景释放,不同场景对应加载不同的贴图做一个运行时的对应即可,加载ui的时间能提升80%。这一步建议新项目中前期使用,后期项目做这种级别的修改不划算,风险高。&/p&&p&如果是动画资源比较重的产品,建议使用自定义的动画格式,采取float16的四元数储存关键帧数据,然后加载时还原引擎需要的动画数据,以前做wii上的产品,1000个左右的人形动捕数据可以压缩到23m左右。&/p&&p&经历过很多手游项目的全屏大图比较多(推广图,loading图),有的会占到整个贴图量的30%甚至更多,这时候一定要优化大图的制作工艺,和美术沟通把背景,文字和前景拆开制作,一方面可以更好的压缩(方形,2的次幂),另一方面背景图可以采取比较极端的压缩参数。&/p&&p&加载的过程中往往最后会卡一下,这个是第一次shader提交到gpu产生编译消耗的时间,可以通过在屏幕上绘制一个透明的三角形来完成warmup,这一步基本上主流引擎都有接口,如果单帧消耗过高,可以考虑分布在若干帧里完成。&/p&&p&打击感的一个小trick,击中的一瞬间把时间tick调成0持续个0.1秒左右,又轻巧效果又好。&/p&&p&搭建UI框架的时候给每页ui增加一个fadein和fadeout的接口并且管理好状态机的切换,今后可以很方便策划或者美术增加ui打开和关闭的动态效果。&/p&
做游戏技术主要讲究的是套路,以及对套路的掌握程度。比如说你要搞个体积光,那么从用mesh+uv动画,到volumetric scattering你都得知道,而且要知道这些方案的优缺点,以及具体的实现细节,比如camera会不会到体积光里边之类的,这种细节的了解会让你更加有…
C# 6 已经在随VS2015 RC正式发布。。有兴趣的童鞋可以观看在Build 2015中的介绍视频。。&br&&a href=&///?target=https%3A///Events/Build/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&What's New in C# 6 and Visual Basic 14&i class=&icon-external&&&/i&&/a&&br&&br&里面有很多本文中没有提到的特性哟。。&br&&br&BTW:C# 7的功能清单已经在出了。。&br&&a href=&///?target=https%3A///dotnet/roslyn/issues/2136& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&C# 7 Work List of Features · Issue #2136 · dotnet/roslyn · GitHub&i class=&icon-external&&&/i&&/a&&br&&br&&br&--------我是华丽的分割线--------&br&&br&稍微列举一下 C# 6 中将要出现的奇技淫巧吧~&br&参考自 &a href=&///?target=http%3A///b/csharpfaq/archive//new-features-in-c-6.aspx& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&New Features in C# 6&i class=&icon-external&&&/i&&/a& ,有删改~&br&&br&作为一门专为程(yu)序(fa)员(tang)考虑的语言,感受一下来自微软的满满的恶意...&br&&br&1. 字符串内联&br&在之前的版本中,常用的格式化字符串:&br&&div class=&highlight&&&pre&&code class=&language-csharp&&&span class=&kt&&var&/span& &span class=&n&&s&/span& &span class=&p&&=&/span& &span class=&n&&String&/span&&span class=&p&&.&/span&&span class=&n&&Format&/span&&span class=&p&&(&/span&&span class=&s&&&{0} is {1} year{{s}} old&&/span&&span class=&p&&,&/span& &span class=&n&&p&/span&&span class=&p&&.&/span&&span class=&n&&Name&/span&&span class=&p&&,&/span& &span class=&n&&p&/span&&span class=&p&&.&/span&&span class=&n&&Age&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&在 C# 6 中:&br&&div class=&highlight&&&pre&&code class=&language-csharp&&&span class=&c1&&//无格式&/span&
&span class=&kt&&var&/span& &span class=&n&&s&/span& &span class=&p&&=&/span& &span class=&err&&$&/span&&span class=&s&&&{p.Name} is {p.Age} year{{s}} old&&/span&&span class=&p&&;&/span&
&span class=&c1&&//带格式&/span&
&span class=&kt&&var&/span& &span class=&n&&s&/span& &span class=&p&&=&/span& &span class=&err&&$&/span&&span class=&s&&&{p.Name,20} is {p.Age:D3} year{{s}} old&&/span&&span class=&p&&;&/span&
&span class=&c1&&//带子表达式&/span&
&span class=&kt&&var&/span& &span class=&n&&s&/span& &span class=&p&&=&/span& &span class=&err&&$&/span&&span class=&s&&&{p.Name} is {p.Age} year{(p.Age == 1 ? && : &&/span&&span class=&n&&s&/span&&span class=&s&&&)} old&&/span&&span class=&p&&;&/span&
&/code&&/pre&&/div&&br&2. 空条件运算符&br&在之前的版本中对于 &b&可空类型 &/b&或 &b&动态类型 &/b&,获取子元素往往较为复杂:&br&&div class=&highlight&&&pre&&code class=&language-csharp&&&span class=&k&&if&/span&&span class=&p&&(&/span&&span class=&n&&someSchool&/span& &span class=&p&&!=&/span& &span class=&k&&null&/span& &span class=&p&&&&&/span& &span class=&n&&someSchool&/span&&span class=&p&&.&/span&&span class=&n&&someGrade&/span& &span class=&p&&!=&/span& &span class=&k&&null&/span& &span class=&p&&&&&/span& &span class=&n&&someSchool&/span&&span class=&p&&.&/span&&span class=&n&&someGrade&/span&&span class=&p&&.&/span&&span class=&n&&someClass&/span& &span class=&p&&!=&/span& &span class=&k&&null&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&k&&return&/span& &span class=&n&&someSchool&/span&&span class=&p&&.&/span&&span class=&n&&someGrade&/span&&span class=&p&&.&/span&&span class=&n&&someClass&/span&&span class=&p&&.&/span&&span class=&n&&someOne&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&在 C# 6 中,引入了新的运算符:&br&&div class=&highlight&&&pre&&code class=&language-text&&return someSchool?.someGrade?.someClass?.someO
//也可以使用下标运算,例如
//return someArray?[0];
&/code&&/pre&&/div&如果 ?. 运算符的左项为 null ,则直接返回 null 。&br&对于方法或者委托的执行,可以使用 Invoke:&br&&div class=&highlight&&&pre&&code class=&language-csharp&&&span class=&n&&someMethod&/span&&span class=&p&&?.&/span&&span class=&n&&Invoke&/span&&span class=&p&&(&/span&&span class=&n&&args&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&&br&3. &strong&nameof &/strong&表达式&br&可以直接返回传入变量的名称,而无需复杂的反射。&br&&div class=&highlight&&&pre&&code class=&language-csharp&&&span class=&kt&&int&/span& &span class=&n&&someInt&/span&&span class=&p&&;&/span&
&span class=&n&&Console&/span&&span class=&p&&.&/span&&span class=&n&&WriteLine&/span&&span class=&p&&(&/span&&span class=&n&&nameof&/span&&span class=&p&&(&/span&&span class=&n&&someInt&/span&&span class=&p&&));&/span& &span class=&c1&&//&someInt&&/span&
&/code&&/pre&&/div&&i&注:如果是前面带有命名空间和/或类名,只返回最后的变量名。&/i&&br&&br&4. 索引初始化器&br&在 C# 6 中简化了对 Dictionary 的初始化方法:&br&&div class=&highlight&&&pre&&code class=&language-csharp&&&span class=&kt&&var&/span& &span class=&n&&numbers&/span& &span class=&p&&=&/span& &span class=&k&&new&/span& &span class=&n&&Dictionary&/span&&span class=&p&&&&/span&&span class=&kt&&int&/span&&span class=&p&&,&/span& &span class=&kt&&string&/span&&span class=&p&&&&/span& &span class=&p&&{&/span&
&span class=&na&&
[7]&/span& &span class=&p&&=&/span& &span class=&s&&&seven&&/span&&span class=&p&&,&/span&
&span class=&na&&
[9]&/span& &span class=&p&&=&/span& &span class=&s&&&nine&&/span&&span class=&p&&,&/span&
&span class=&na&&
[13]&/span& &span class=&p&&=&/span& &span class=&s&&&thirteen&&/span&
&span class=&p&&};&/span&
&/code&&/pre&&/div&&br&5. 条件异常处理&br&在 C# 6 中可以选择性地对某些异常进行处理,无需额外增加判断过程:&br&&div class=&highlight&&&pre&&code class=&language-csharp&&&span class=&k&&try&/span& &span class=&p&&{&/span& &span class=&err&&…&/span& &span class=&p&&}&/span&
&span class=&k&&catch&/span& &span class=&p&&(&/span&&span class=&n&&MyException&/span& &span class=&n&&e&/span&&span class=&p&&)&/span& &span class=&k&&if&/span& &span class=&p&&(&/span&&span class=&n&&myfilter&/span&&span class=&p&&(&/span&&span class=&n&&e&/span&&span class=&p&&))&/span&
&span class=&p&&{&/span&
&span class=&err&&…&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&br&6. 属性初始化器&br&在 C# 6 中可以直接对属性进行初始化:&br&&div class=&highlight&&&pre&&code class=&language-csharp&&&span class=&k&&public&/span& &span class=&k&&class&/span& &span class=&nc&&Customer&/span&
&span class=&p&&{&/span&
&span class=&k&&public&/span& &span class=&kt&&string&/span& &span class=&n&&First&/span& &span class=&p&&{&/span& &span class=&k&&get&/span&&span class=&p&&;&/span& &span class=&k&&set&/span&&span class=&p&&;&/span& &span class=&p&&}&/span& &span class=&p&&=&/span& &span class=&s&&&Jane&&/span&&span class=&p&&;&/span&
&span class=&k&&public&/span& &span class=&kt&&string&/span& &span class=&n&&Last&/span& &span class=&p&&{&/span& &span class=&k&&get&/span&&span class=&p&&;&/span& &span class=&k&&set&/span&&span class=&p&&;&/span& &span class=&p&&}&/span& &span class=&p&&=&/span& &span class=&s&&&Doe&&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&i&以及可以类似定义只读的属性。&/i&&br&&br&7. 成员函数的 lambda 定义&br&在 C# 6 中可以使用 lambda 表达式来定义成员方法。&br&&div class=&highlight&&&pre&&code class=&language-csharp&&&span class=&k&&public&/span& &span class=&k&&class&/span& &span class=&nc&&Point&/span&
&span class=&p&&{&/span&
&span class=&k&&public&/span& &span class=&n&&Point&/span& &span class=&nf&&Move&/span&&span class=&p&&(&/span&&span class=&kt&&int&/span& &span class=&n&&dx&/span&&span class=&p&&,&/span& &span class=&kt&&int&/span& &span class=&n&&dy&/span&&span class=&p&&)&/span& &span class=&p&&=&&/span& &span class=&k&&new&/span& &span class=&n&&Point&/span&&span class=&p&&(&/span&&span class=&n&&x&/span& &span class=&p&&+&/span& &span class=&n&&dx&/span&&span class=&p&&,&/span& &span class=&n&&y&/span& &span class=&p&&+&/span& &span class=&n&&dy&/span&&span class=&p&&);&/span&
&span class=&k&&public&/span& &span class=&k&&static&/span& &span class=&n&&Complex&/span& &span class=&k&&operator&/span& &span class=&p&&+(&/span&&span class=&n&&Complex&/span& &span class=&n&&a&/span&&span class=&p&&,&/span& &span class=&n&&Complex&/span& &span class=&n&&b&/span&&span class=&p&&)&/span& &span class=&p&&=&&/span& &span class=&n&&a&/span&&span class=&p&&.&/span&&span class=&n&&Add&/span&&span class=&p&&(&/span&&span class=&n&&b&/span&&span class=&p&&);&/span&
&span class=&k&&public&/span& &span class=&k&&static&/span& &span class=&k&&implicit&/span& &span class=&k&&operator&/span& &span class=&nf&&string&/span&&span class=&p&&(&/span&&span class=&n&&Person&/span& &span class=&n&&p&/span&&span class=&p&&)&/span& &span class=&p&&=&&/span& &span class=&err&&$&/span&&span class=&s&&&{p.First}, {p.Last}&&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&br&8. 结构体的无参构造函数&br&在 C# 6 中可以创建结构体的不带参数的构造函数。&br&&div class=&highlight&&&pre&&code class=&language-csharp&&&span class=&k&&struct&/span& &span class=&nc&&Person&/span&
&span class=&p&&{&/span&
&span class=&k&&public&/span& &span class=&kt&&string&/span& &span class=&n&&Name&/span& &span class=&p&&{&/span& &span class=&k&&get&/span&&span class=&p&&;&/span& &span class=&p&&}&/span&
&span class=&k&&public&/span& &span class=&kt&&int&/span& &span class=&n&&Age&/span& &span class=&p&&{&/span& &span class=&k&&get&/span&&span class=&p&&;&/span& &span class=&p&&}&/span&
&span class=&k&&public&/span& &span class=&nf&&Person&/span&&span class=&p&&(&/span&&span class=&kt&&string&/span& &span class=&n&&name&/span&&span class=&p&&,&/span& &span class=&kt&&int&/span& &span class=&n&&age&/span&&span class=&p&&)&/span& &span class=&p&&{&/span& &span class=&n&&Name&/span& &span class=&p&&=&/span& &span class=&n&&name&/span&&span class=&p&&;&/span& &span class=&n&&Age&/span& &span class=&p&&=&/span& &span class=&n&&age&/span&&span class=&p&&;&/span& &span class=&p&&}&/span&
&span class=&k&&public&/span& &span class=&nf&&Person&/span&&span class=&p&&()&/span& &span class=&p&&:&/span& &span class=&k&&this&/span&&span class=&p&&(&/span&&span class=&s&&&Jane Doe&&/span&&span class=&p&&,&/span& &span class=&m&&37&/span&&span class=&p&&)&/span& &span class=&p&&{&/span& &span class=&p&&}&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&br&9. using 静态类&br&在 C# 6 中 using 除了可以用于命名空间也可以用于静态类。&br&&div class=&highlight&&&pre&&code class=&language-csharp&&&span class=&k&&using&/span& &span class=&nn&&System.Console&/span&&span class=&p&&;&/span&
&span class=&k&&using&/span& &span class=&nn&&System.Math&/span&&span class=&p&&;&/span&
&span class=&k&&class&/span& &span class=&nc&&Program&/span&
&span class=&p&&{&/span&
&span class=&k&&static&/span& &span class=&k&&void&/span& &span class=&nf&&Main&/span&&span class=&p&&()&/span&
&span class=&p&&{&/span&
&span class=&n&&WriteLine&/span&&span class=&p&&(&/span&&span class=&n&&Sqrt&/span&&span class=&p&&(&/span&&span class=&m&&3&/span&&span class=&p&&*&/span&&span class=&m&&3&/span& &span class=&p&&+&/span& &span class=&m&&4&/span&&span class=&p&&*&/span&&span class=&m&&4&/span&&span class=&p&&));&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&br&大体感觉主要就是这些内容... (o=&_&=o)
C# 6 已经在随VS2015 RC正式发布。。有兴趣的童鞋可以观看在Build 2015中的介绍视频。。
里面有很多本文中没有提到的特性哟。。 BTW:C# 7的功能清单已经在出了。。
&p&这基本要靠语言&/p&&p&譬如说Haskell&/p&&p&譬如说C++大量使用模板&/p&&p&譬如说C#大量使用省略类型的写法(lambda,linq,etc),而不要用显示类型的写法&/p&&p&&strong&重构的时候,如果一个名字的语义发生了变化,那一定要把他的类型改掉,或者把他的名字改掉&/strong&。如果你的代码有2000个地方引用了它,那这种方法就可以搞出2000个编译错误,你就可以一个一个检查了,没修好之前绝对运行不了。&/p&&br&&p&当然了,最重要的一点是,你要用类型来表达你的业务逻辑,而不是代码。正确的编程过程如下:&/p&&p&1、好好分析业务逻辑&/p&&p&2、把业务逻辑全部表现成类型(当然了也不能走极端)&/p&&p&3、然后你会发现,满足这个超级复杂的类型需求的代码,只能那么写,所以你写错了就无法编译&/p&&p&problem solved&/p&
这基本要靠语言譬如说Haskell譬如说C++大量使用模板譬如说C#大量使用省略类型的写法(lambda,linq,etc),而不要用显示类型的写法重构的时候,如果一个名字的语义发生了变化,那一定要把他的类型改掉,或者把他的名字改掉。如果你的代码有2000个地方引用…
之前在公司内做的培训计划中,基础内容大概有以下这些:&br&&br&三维几何学基础:&br&&ol&&li&三维坐标系统&br&&/li&&li&点与矢量&br&&/li&&li&矩阵与几何变换&br&&/li&&li&四元数与三维旋转&br&&/li&&/ol&&br&实时渲染管道:&br&&ol&&li&应用阶段(场景管理、可见性剔除、分组排序、提交图元)&br&&/li&&li&几何阶段(顶点着色、图元组装、面向剔除、三角形裁剪、透视除法、视区变换)&br&&/li&&li&光栅化阶段(扫瞄转换、scissor/stencil/alpha 测试、alpha 混合)&br&&/li&&/ol&&br&游戏中的光照与阴影:&br&&ol&&li&实时光照分类(正向渲染、延迟渲染、Tile 正向/延迟渲染)&/li&&li&局部光照中的光源(环境光、方向光、点光、聚光、cookie)&br&&/li&&li&阴影(平面阴影、阴影体积、阴影贴图、PCF、VSM、CSM)&br&&/li&&li&全局光照(光照贴图、幅照度环境贴图、球谐函数)&br&&/li&&/ol&&br&材质着色原理与实践:&br&&ol&&li&材质反射模型(渲染方程、BRDF、Lambertian、Phong、Blinn-Phong)&br&&/li&&li&材质着色器编程(环境光、环境遮蔽、发光物体、贴图采样、环境贴图、法线贴图、轮廓光、纹理坐标动画)&br&&/li&&li&特殊着色器(卡通渲染、Kajiya-Kay、??)&br&&/li&&/ol&&br&由浅入深可先看[1],然后[2]。数学方面可参考[3]。&br&&br&[1] 《游戏引擎架构》,叶劲峰译,电子工业出版社,2014&br&[2] Akenine-M?ller, Tomas, Eric Haines, and Naty Hoffman. Real-time rendering Third Edition, CRC Press, 2008.&br&[3] Lengyel, Eric. Mathematics for 3D game programming and computer graphics. Cengage Learning, 2012.
之前在公司内做的培训计划中,基础内容大概有以下这些: 三维几何学基础: 三维坐标系统 点与矢量 矩阵与几何变换 四元数与三维旋转 实时渲染管道: 应用阶段(场景管理、可见性剔除、分组排序、提交图元) 几何阶段(顶点着色、图元组装、面向剔除、三角形…
其实我觉得Shader之所以难学,并不是因为Shader自身难,而是因为计算机图形学难学,而且对于完全没有基础的同学来说这个过程是几乎是不可能通过自学速成的(有专门的老师一对一辅导就另说)。&br&&br&学习Shader之前,了解计算机图形学的基础知识是必须的,如果没有图形学的基础,直接学习写Shader就好比建一座空中阁楼。Shader只是3D渲染管线中的一个环节,它在执行前需要先获取输入数据。如果连Shader需要什么样的输入数据,这些输入数据怎么得到都不知道,是不可能学会写Shader的。其实主流的Shader语言(HLSL和GLSL)无非就是C语言的变种而已,除了部分关键字的区别,语法几乎一样。&br&&br&然而打基础的阶段恰恰就是最艰难的阶段,因为计算机图形学中涉及了很多专业概念和术语,这些对没怎么接触过图形学的初学者来说非常抽象,很多和我一起选修图形学的同学都没有跨过这道坎——大多数同学考试靠死记硬背过关,能够独立完成大作业的同学目测不超过三分之一(我们的大作业是组队用OpenGL的固定渲染管线写一个场景渲染demo)。&br&&br&下面是我个人学习图形学的历程,大体来说可以分为四个阶段,可以给题主做一个参考:&br&第一阶段:学习固定渲染管线(了解基本概念)&br&这个阶段我是在学校完成的,我们学院使用的教材是Steve Cunningham的《Computer Graphics》,这个时候需要一边书学习基本概念(顶点、索引、空间变换、纹理映射、基本光照模型、GPU架构等),一边学习图形渲染API(OpenGL or DirectX)。&br&Ps:固定渲染管线现在基本已经被淘汰了,但学习它也并不是完全没有意义的。就我个人看来,学习DirectX的难度明显比OpenGL更高,如果感觉直接学习可编程管线非常吃力,不妨先学习固定渲染管线打好基础,这样以后学习如何写Shader时,可以先通过实现固定渲染管线的效果来练手。这个阶段可以《Computer Graphics》中文版和英文版相互对照看,再买一本《OpenGL编程指南》(封面是红色的,俗称OpenGL红宝书)。&br&&br&第二阶段:学习无光照的可编程管线&br&把图形学的基础学得差不多了,就可以开始学习可编程渲染管线了,也就是写最简单的Shader。这个阶段我并没有系统地花时间来学习,而且也没有找到好的学习资料,因此本人在这个阶段的学习比较混乱。最先是跟某坑爹老师做了一个国创项目,在iOS平台用OpenGL ES写的,涉及到了简单的Shader(Shader部分我记得就花了一天不到的时间,看别人的demo写出来的,当时没有深究具体的原理= =)。之后断断续续地看了一些微软官方的DirectX Tutorial和DirectX SDK中的Sample,写了几个简单的demo。在对可编程渲染管线的基本流程仍然一知半解的情况下,我又跑去学习了OpenGL ES,这个过程用OpenGL ES仿造libGDX引擎写了一个简单的2D安卓游戏引擎。如果你跟我一样先学习了固定渲染管线,在这个阶段会接触到一些新的概念,比如VertexBuffer和IndexBuffer,它们都是在固定渲染管线的基础上做出的改进。这个阶段我最大的学习收获是了解了简单的Shader工作原理,对坐标系的MWVP(模型/世界/视图/投影)变换有了十分深刻的理解(理解空间变换过程对写Shader非常重要)。&br&Ps:如果只是写一个无光照的可编程渲染管线的demo并且了解可编程渲染管线与固定渲染管线的区别,可以向同事请教,我觉得花几个晚上就够了(前提是对固定渲染管线已经足够了解)。&br&&br&第三阶段:学习带有简单光照的可编程管线&br&在这个阶段我用DirectX9实现了OpenGL固定渲染管线的大部分效果,期间主要看的书是《3D游戏程序设计入门》和某不知名的HLSL语法手册,经过这个阶段的实践以后会有一种整个人都豁然开朗的感觉。&br&&br&第四阶段:学习高级视觉效果&br&去年毕业来公司以后,导师推荐我看了NVidia的《The Cg Tutorial》,这篇教程里介绍了很多视觉效果实现的基本思路以及shader的写法,对我的启发很大。不过遗憾地是导师没过多久就跳槽了,所以我又得开始自学了(导师是项目组里唯一一个对图形学有了解老员工= =)。现在我正处于一边看UE4源码,一边写3D渲染引擎的状态,目前的成果是抄袭OGRE实现了场景树管理,根据某大大博客的思路实现了一个半残的动态Shader生成系统,抄袭UE4实现了一个半残的PBR ForwardShading。这个过程可以说是看起来容易做起来难,一不小心就被某一个细节坑得半死。。。&br&&br&计算机图形学之所以让大家觉得难学,我觉得主要原因有三个:涉及大量晦涩的专业术语;涉及大量数学理论和计算;理论与实践之间的埋了太多的坑。。。。&br&&br&最后再补充说明一下:&br&1. 我觉得要想真正学会写Shader,至少需要掌握基本的线性代数知识,与数字信号处理有关知识也需要有了解,不然一看到论文里的“卷积”,“滤波”,“插值”,“傅里叶变换”这些词就要懵逼了。&br&2. 另外,最好一边学习一边做笔记,这样可以每隔一段时间就进行一次整理,有助于建立系统的知识框架,同时可以发现自己遗漏的知识点,有针对性地巩固加强,也便于日后回顾。
其实我觉得Shader之所以难学,并不是因为Shader自身难,而是因为计算机图形学难学,而且对于完全没有基础的同学来说这个过程是几乎是不可能通过自学速成的(有专门的老师一对一辅导就另说)。 学习Shader之前,了解计算机图形学的基础知识是必须的,如果没…
可以聊 &b&unity插件我不信国内有人用的比我多 !&/b&&br&特效 UI 动画之类的因项目而异,没什么好说(其实我不想告诉你 科科)&br&聊聊通用的,(网上都有下载的我就不说了,说说好用到我买了之后还让朋友买的)&br&&br&这么几个插件 基本每个项目都可以用,国内基本上也没多少介绍,我很推荐&br&&img src=&/952b019b59_b.png& data-rawwidth=&844& data-rawheight=&453& class=&origin_image zh-lightbox-thumb& width=&844& data-original=&/952b019b59_r.png&&&br&&b&Qhierarchy &/b&&br&你管理一个有几千物体的场景,点击单个物体,关掉它显示,或者修改它的static方式之类的根本就是噩梦,用Qherarchy的话,稍微点击下小眼睛关闭就好,对我来说是必备插件,而且可以很容易查找到物体是否有attach script,以及脚本是否出错,非常好使。&br&我知道很多人是用Hierachy2 的,那个的功能和Qhierarchy类似,但是当时在unity4 -5的版本升级里面出很多bug,而且功能我觉得有些太复杂,反而不如Qhierachy便宜好用&br&&br&&br&&br&&img src=&/45dfdafe6eef7f3671109_b.png& data-rawwidth=&808& data-rawheight=&435& class=&origin_image zh-lightbox-thumb& width=&808& data-original=&/45dfdafe6eef7f3671109_r.png&&&br&&b&Haste Pro&/b&&br&unity内的everything,场景东西多到死,资源乱到想跳楼,要查找某个特定的物体或者component感觉整个人都要不好了,这时候使用本插件药到病除,不知不觉就买了正版。&br&&br&&img src=&/e2c8fe38c345ef5e66c4c_b.png& data-rawwidth=&813& data-rawheight=&433& class=&origin_image zh-lightbox-thumb& width=&813& data-original=&/e2c8fe38c345ef5e66c4c_r.png&&&br&&b&Asset hunter&/b&&br&啊西坝,混蛋美术塞了五千个材质球在asset里面啊!!,基本都没用过啊!! 选择材质时候冒出来满屏幕!!
怎么破!&br&用asset hunter轻松分辨场景是否有使用到此asset,一键删除,世界恢复了和平&br&跟 Build report tool功能有点像,大多数情况下asset hunter用着更爽利&br&&br&&b&&img src=&/0fde5b838bf7b91c25a72b10d524c630_b.png& data-rawwidth=&851& data-rawheight=&435& class=&origin_image zh-lightbox-thumb& width=&851& data-original=&/0fde5b838bf7b91c25a72b10d524c630_r.png&&&br&Legacy 2 PBR&/b&&br&Unity4项目升级到unity5了,材质还是那个老味道....难道一个个改么,,, 这时候Legacy 2 PBR一键拯救你&br&&br&其他的就不是每个项目都需要用了,动画用默认,特效用默认就好,(可以买几个滤镜)有些东西如finalK shaderforge,A* project,Camera Director等等等等等等等都是极好的,不过那些插件玩一下就都要付出很多精力时间了,不是项目需要就别入坑了,何况这些东西任何一个都足够写一大篇长文来分析和赞美了。&br&&br&我推荐上面几个的理由是,unity插件应该是在某种使用的思路下被统合起来的,否则不如不用,而上述几个主要是加速你的工作效率,所以尽可大胆使用。&br&&br&另外,稍微有点经济实力的还是应该购买正版,不要问我任何求插件问题,拉黑你哦!
可以聊 unity插件我不信国内有人用的比我多 ! 特效 UI 动画之类的因项目而异,没什么好说(其实我不想告诉你 科科) 聊聊通用的,(网上都有下载的我就不说了,说说好用到我买了之后还让朋友买的) 这么几个插件 基本每个项目都可以用,国内基本上也没多少…
已有帐号?
无法登录?
社交帐号登录
972 人关注
990 人关注
2988 条内容
342 条内容
301 人关注
108 条内容
403 人关注}

我要回帖

更多关于 unity3d 镜子 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信