Unity游戏引擎安卓游戏开发引擎时遇到内存泄漏问题怎么办

&p&Unity因为更多的时间花在了如何跨平台上,开发者往往会将就低端平台,写一份在哪里都用。这样高端平台发挥不出来。&/p&&p&另一方面是性能。比如我曾经在KlayGE里实现了一个皮肤渲染。 &a class=&member_mention& href=&///people/96ebf60da4f1295abab79cce388e85c0& data-hash=&96ebf60da4f1295abab79cce388e85c0& data-hovercard=&p$b$96ebf60da4f1295abab79cce388e85c0&&@钱康来&/a& 想在Unity里实现一下。发现性能差4倍。原因在于当时Unity没法那样自由控制stencil buffer,必须全屏处理。比起我先用stencil buffer把皮肤的区域标出来,再光处理皮肤,性能肯定要低了。&/p&&p&所以其实好好做的话,不见得有太多画质上的区别,性能可能有区别。&/p&
Unity因为更多的时间花在了如何跨平台上,开发者往往会将就低端平台,写一份在哪里都用。这样高端平台发挥不出来。另一方面是性能。比如我曾经在KlayGE里实现了一个皮肤渲染。
想在Unity里实现一下。发现性能差4倍。原因在于当时Unity没法那样自由…
&a href=&///?target=https%3A///zhutaorun/Hearth-Stone& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&zhutaorun/Hearth-Stone · GitHub&i class=&icon-external&&&/i&&/a&,客户端难度不高,难的是细节和服务端通信。特别是卡片的种类多了以后,网络即时相应。&br&网络部分内容,我早找了之前关于炉石服务器和代码结构的分析&br&&a href=&///?target=http%3A//blog.csdn.net/neil3d/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《炉石传说》架构设计赏析(1):游戏启动流程&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A//blog.csdn.net/neil3d/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《炉石传说》架构设计赏析(2):Scene管理&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A//blog.csdn.net/neil3d/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《炉石传说》架构设计赏析(3):Gameplay初探&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A//blog.csdn.net/neil3d/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《炉石传说》架构设计赏析(4):Asset管理&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A//blog.csdn.net/neil3d/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《炉石传说》架构设计赏析(5):卡牌&技能的静态数据组织&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A//blog.csdn.net/neil3d/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《炉石传说》架构设计赏析(6):卡牌&技能数据的运行时组织&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A//blog.csdn.net/neil3d/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《炉石传说》架构设计赏析(7):使用Google.ProtocolBuffers处理网络消息&i class=&icon-external&&&/i&&/a&&br&博主是仙剑系列之一的主程。
,客户端难度不高,难的是细节和服务端通信。特别是卡片的种类多了以后,网络即时相应。 网络部分内容,我早找了之前关于炉石服务器和代码结构的分析
&p&哈哈哈,我也来喷一下&/p&&p&&br&&/p&&p&&b&注意,下面很多图,流量党随意啊&/b&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&UE4效果好是一回事,但是你登录不上(误),登陆上了下载不了,下载好了安装不了,安装好了电脑配置不够,配置够了无法打包,能打包了打包APK1个G..............&/p&&p&我来解释一下,首先ue4一般是登录器安装(也可以下载编译版,不过很多人感觉更麻烦),需要找到官网&/p&&img src=&/v2-323967aecdf218d6dd71_b.png& data-rawwidth=&780& data-rawheight=&529& class=&origin_image zh-lightbox-thumb& width=&780& data-original=&/v2-323967aecdf218d6dd71_r.png&&&p&第一个什么鬼?第二个看不懂&br&没有VPN,上ue4的中文网真是憋屈,网页就是打不开,不管你刷新多少遍&br&回头再看看unity,虽然慢,但是也是一次性就可以下载安装嘛&br&好不容易找到下载地方了还需要登录(好吧,unity现在也学坏了......)&/p&&p&&br&&/p&&p&好不容易花了两天下载好了EpicGamesLauncherInstaller然后又是漫长的安装等待.......&/p&&img src=&/v2-673a7bf936c8882808ebb_b.png& data-rawwidth=&453& data-rawheight=&189& class=&origin_image zh-lightbox-thumb& width=&453& data-original=&/v2-673a7bf936c8882808ebb_r.png&&&p&&br&&/p&&p&&br&&/p&&p&经过陶大 &a class=&member_mention& href=&///people/d963de97abcaad& data-hash=&d963de97abcaad& data-hovercard=&p$b$d963de97abcaad&&@陶仁贤&/a&提醒,新版的登录器速度很快了.........&/p&&p&&br&&/p&&img src=&/v2-010a9afad_b.png& data-rawwidth=&580& data-rawheight=&247& class=&origin_image zh-lightbox-thumb& width=&580& data-original=&/v2-010a9afad_r.png&&&img src=&/v2-d2edceb9_b.jpg& data-rawwidth=&123& data-rawheight=&126& class=&content_image& width=&123&&&p&&br&&/p&&p&然后&/p&&img src=&/v2-f6ea95bbfc148eb507c7d6_b.png& data-rawwidth=&400& data-rawheight=&576& class=&content_image& width=&400&&&p&&br&&/p&&p&果然是游戏引擎,服务器都爆了,你就不能多开几个区么?&/p&&img src=&/v2-a3d8bbca2fb7da9b6e60a_b.png& data-rawwidth=&400& data-rawheight=&576& class=&content_image& width=&400&&&p&&br&&/p&&p&其实UE4的官网一直在卖萌,特别是中文官网&/p&&img src=&/v2-7c9e714e4d62c16ee92ce713cb15c76a_b.png& data-rawwidth=&240& data-rawheight=&131& class=&content_image& width=&240&&&p&然后我们这样对持了三天,后来他想通了,开始下载了&/p&&img src=&/v2-e9bff10d51cd29fbe6bdd_b.jpg& data-rawwidth=&559& data-rawheight=&336& class=&origin_image zh-lightbox-thumb& width=&559& data-original=&/v2-e9bff10d51cd29fbe6bdd_r.jpg&&&p&&br&&/p&&p&然后安装失败!!!!!&/p&&img src=&/v2-d5cd03ca4d3f5bcc69326_b.jpg& data-rawwidth=&198& data-rawheight=&192& class=&content_image& width=&198&&&p&好好好,只要你高兴就好&/p&&p&&br&&/p&&p&卸载c++2010,安装dx,安装sp1,安装ie11,安装vs2015,更新驱动,卸载了unity(一定是阴谋!)&/p&&img src=&/v2-9061e4cffaae260b3dfc9bfc01d6cdf6_b.jpg& data-rawwidth=&352& data-rawheight=&212& class=&content_image& width=&352&&&p&&br&&/p&&p&&br&&/p&&img src=&/v2-c5ee83ec99ce7_b.jpg& data-rawwidth=&1536& data-rawheight=&832& class=&origin_image zh-lightbox-thumb& width=&1536& data-original=&/v2-c5ee83ec99ce7_r.jpg&&&p&&br&&/p&&p&加油!&/p&&p&&br&&/p&&img src=&/v2-b84dd5aaad88c66c1ffa08_b.png& data-rawwidth=&242& data-rawheight=&167& class=&content_image& width=&242&&&p&终于安装好了&br&可是,qq不高兴了................打不开了&/p&&p&不管了,先测试一个小场景(操作方式竟然是fps类型的,奇葩........)&/p&&img src=&/v2-1a54b61a36fbcfb3f011_b.png& data-rawwidth=&968& data-rawheight=&648& class=&origin_image zh-lightbox-thumb& width=&968& data-original=&/v2-1a54b61a36fbcfb3f011_r.png&&&p&真的是小场景啊,就一box,一plane,一light而已..........&/p&&p&然后就是漫长的折腾...........&/p&&p&什么爆内存啊,爆显存啊,爆贴图流啊,卡死啊,启动失败啊.............&/p&&p&&b&BUILD FAILED&/b&&/p&&img src=&/v2-8f445df4de9d79125aa20_b.png& data-rawwidth=&569& data-rawheight=&367& class=&origin_image zh-lightbox-thumb& width=&569& data-original=&/v2-8f445df4de9d79125aa20_r.png&&&p&&b&COOK FAILED&/b&&/p&&img src=&/v2-8de06ed25beadc9690f2fbb_b.jpg& data-rawwidth=&690& data-rawheight=&690& class=&origin_image zh-lightbox-thumb& width=&690& data-original=&/v2-8de06ed25beadc9690f2fbb_r.jpg&&&p&&b&Swarm FAILED&/b&&/p&&img src=&/v2-0d7dddfc65f_b.jpg& data-rawwidth=&291& data-rawheight=&300& class=&content_image& width=&291&&&p&&br&&/p&&p&&br&&/p&&img src=&/v2-ea058f07dede7e_b.png& data-rawwidth=&239& data-rawheight=&153& class=&content_image& width=&239&&&img src=&/v2-ff0eced90ae5d6eb7060c6_b.png& data-rawwidth=&509& data-rawheight=&288& class=&origin_image zh-lightbox-thumb& width=&509& data-original=&/v2-ff0eced90ae5d6eb7060c6_r.png&&&p&&br&&/p&&img src=&/v2-6db3ee8c23fba_b.jpg& data-rawwidth=&851& data-rawheight=&620& class=&origin_image zh-lightbox-thumb& width=&851& data-original=&/v2-6db3ee8c23fba_r.jpg&&&p&&br&&/p&&p&你要上天啊?&/p&&img src=&/v2-e425c894ae15b2b04788d03aafa1b284_b.png& data-rawwidth=&336& data-rawheight=&331& class=&content_image& width=&336&&&p&&br&&/p&&p&&br&&/p&&p&ue4说有强大的图形画质,好多人都说可以代替渲染了,不过反射一塌糊涂,光阴关系也是需要魔改配置文件才能稍微好点,总之是粗看还可以,细看的话.......(啥?unity?)&/p&&img src=&/v2-f1ce9e2db2d3d7da1873e_b.png& data-rawwidth=&842& data-rawheight=&868& class=&origin_image zh-lightbox-thumb& width=&842& data-original=&/v2-f1ce9e2db2d3d7da1873e_r.png&&&p&&br&&/p&&p&以前和ue4的反射杠上了.................&/p&&p&&br&&/p&&img src=&/v2-ee6cb100cb5dd507a77cba0_b.jpg& data-rawwidth=&64& data-rawheight=&52& class=&content_image& width=&64&&&p&我要玩个VR游戏放松放松,然而没有正向渲染之前满眼马赛克&/p&&img src=&/v2-c1fa104c1d32aec6d4c96_b.jpg& data-rawwidth=&514& data-rawheight=&770& class=&origin_image zh-lightbox-thumb& width=&514& data-original=&/v2-c1fa104c1d32aec6d4c96_r.jpg&&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&上次老外甲方来我们公司说要见识一下3A级别的画质&/p&&p&我就胸有成竹的给甲方打开了这个,好激动啊.............&/p&&img src=&/v2-7bfb291b6d13ec4ac1539_b.png& data-rawwidth=&264& data-rawheight=&101& class=&content_image& width=&264&&&p&&br&&/p&&p&&br&&/p&&p&然而半个多小时过去了&/p&&img src=&/v2-c7aa99673ebc16fabce6_b.png& data-rawwidth=&601& data-rawheight=&201& class=&origin_image zh-lightbox-thumb& width=&601& data-original=&/v2-c7aa99673ebc16fabce6_r.png&&&p&&br&&/p&&p&大家知道这半个小时我是怎么熬过来的嘛?安静得就像乌兰巴托的夜..........&/p&&p&还好老板英明带着甲方去吃冒菜了&/p&&img src=&/v2-4d5fbafb8524fcab816c0d2c_b.jpg& data-rawwidth=&198& data-rawheight=&160& class=&content_image& width=&198&&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&最后好不容易打包个apk了只有十几M,欧耶!&/p&&img src=&/v2-eabec8fcf594_b.png& data-rawwidth=&503& data-rawheight=&62& class=&origin_image zh-lightbox-thumb& width=&503& data-original=&/v2-eabec8fcf594_r.png&&&p&过程慢得令人发指!!!!安装好了&/p&&img src=&/v2-97e872d0d4cb8e048edcabdd4b00ec80_b.png& data-rawwidth=&938& data-rawheight=&522& class=&origin_image zh-lightbox-thumb& width=&938& data-original=&/v2-97e872d0d4cb8e048edcabdd4b00ec80_r.png&&&img src=&/v2-0e916a6b2b1ce8901484f_b.jpg& data-rawwidth=&303& data-rawheight=&234& class=&content_image& width=&303&&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&img src=&/v2-dbb1e716b69a95c13633e9_b.png& data-rawwidth=&527& data-rawheight=&76& class=&origin_image zh-lightbox-thumb& width=&527& data-original=&/v2-dbb1e716b69a95c13633e9_r.png&&&p&&br&&/p&&p&&br&&/p&&p&那么假的UE4不就是假的&b& Unreal
Engine 4 ,假假为真,&/b&就变成了
Engin&i&e&/i&&/b& 了,我看是 &br&&b&哭引擎&/b&(Cry
Engin&i&e) &/i&还差不多&/p&&p&&br&&/p&&img src=&/v2-6c985cdebacdbe0d8ea79_b.png& data-rawwidth=&436& data-rawheight=&397& class=&origin_image zh-lightbox-thumb& width=&436& data-original=&/v2-6c985cdebacdbe0d8ea79_r.png&&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&好吧不要obb吧&/p&&img src=&/v2-7802150adc33faebd6d81c_b.png& data-rawwidth=&589& data-rawheight=&27& class=&origin_image zh-lightbox-thumb& width=&589& data-original=&/v2-7802150adc33faebd6d81c_r.png&&&p&&br&&/p&&img src=&/v2-dfb5ecc9bb_b.png& data-rawwidth=&110& data-rawheight=&120& class=&content_image& width=&110&&&p&我内心已经很强大了,都是托ue4的福&/p&&p&我的799的畅玩5c打不开,隔壁unity大得多的场景都能开,而且apk还只有你的十分之一不到&br&..................&/p&&p&官方问答判若无人(我一定是上了假的ue4官网)&/p&&p&比如我的提问,围观地址:swarm worked only once&/p&&img src=&/v2-acb261b608b7b23241fdf9_b.png& data-rawwidth=&696& data-rawheight=&716& class=&origin_image zh-lightbox-thumb& width=&696& data-original=&/v2-acb261b608b7b23241fdf9_r.png&&&p&&br&&/p&&img src=&/v2-2b6eef96e_b.png& data-rawwidth=&764& data-rawheight=&815& class=&origin_image zh-lightbox-thumb& width=&764& data-original=&/v2-2b6eef96e_r.png&&&p&&br&&/p&&p&请愿成功,官方开始对我大力支持了,欧耶!&/p&&img src=&/v2-d6735a4aac5de925b64c3ec667d0f199_b.png& data-rawwidth=&1178& data-rawheight=&444& class=&origin_image zh-lightbox-thumb& width=&1178& data-original=&/v2-d6735a4aac5de925b64c3ec667d0f199_r.png&&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&下面这个先等等咯&/p&&p&&br&&/p&&img src=&/v2-e540ec15fce772bac4ddb7b_b.png& data-rawwidth=&599& data-rawheight=&241& class=&origin_image zh-lightbox-thumb& width=&599& data-original=&/v2-e540ec15fce772bac4ddb7b_r.png&&&p&&br&&/p&&p&&br&&/p&&p&我要去用unity了,重来没有这么欺负过人,安装一下子就帮你弄好了&/p&&img src=&/2f2c1ed81cc7ec29c283_b.jpg& data-rawwidth=&50& data-rawheight=&45& class=&content_image& width=&50&&&p&舒坦!!!!!!!!!!&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&无论怎么吐槽,还是得感谢epic以及各位一起奋斗的兄弟姐妹,当然也要感谢对面那家unity的各位(免费了哈,以前老贵的)&/p&&img src=&/v2-c4f3b2c86afb3dde5093ee_b.png& data-rawwidth=&568& data-rawheight=&350& class=&origin_image zh-lightbox-thumb& width=&568& data-original=&/v2-c4f3b2c86afb3dde5093ee_r.png&&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&下面的福利.....&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&img src=&/v2-cdf2f0d7a68f0bf68a39a_b.jpg& data-rawwidth=&736& data-rawheight=&793& class=&origin_image zh-lightbox-thumb& width=&736& data-original=&/v2-cdf2f0d7a68f0bf68a39a_r.jpg&&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&img src=&/v2-f33cce273f11a_b.png& data-rawwidth=&531& data-rawheight=&84& class=&origin_image zh-lightbox-thumb& width=&531& data-original=&/v2-f33cce273f11a_r.png&&&p&&br&&/p&&p&经这位大神提醒。我找到了作者的网站,北京电影学院毕业的哦&/p&&p&TYanim&/p&&img src=&/v2-a51abb90d215f2df4c5ba48e09ae23eb_b.png& data-rawwidth=&1039& data-rawheight=&633& class=&origin_image zh-lightbox-thumb& width=&1039& data-original=&/v2-a51abb90d215f2df4c5ba48e09ae23eb_r.png&&&p&萌哭了啊&/p&
哈哈哈,我也来喷一下 注意,下面很多图,流量党随意啊 UE4效果好是一回事,但是你登录不上(误),登陆上了下载不了,下载好了安装不了,安装好了电脑配置不够,配置够了无法打包,能打包了打包APK1个G..............我来解释一下,首先ue4一般是登录器安…
1. 高層&br&&br&深入了解各種計算圖形學及數字圖像學的算法,要知道它們要解決什麼問題,現存有那些解決方案,每個方案的優缺點是甚麼。書籍太多,不在此列舉,可參考本人的豆列:&br&&ul&&li&計算機圖形: 入門/API類 &a href=&///?target=http%3A///link2/%3Furl%3Dhttp%253A%252F%%252Fdoulist%252FF& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&/doulist/1445744/&i class=&icon-external&&&/i&&/a&&br&&/li&&li&計算機圖形: 進階/專門 &a href=&///?target=http%3A///link2/%3Furl%3Dhttp%253A%252F%%252Fdoulist%252FF& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&/doulist/1445680/&i class=&icon-external&&&/i&&/a&&br&&/li&&li&計算機圖形: Gems類 &a href=&///?target=http%3A///link2/%3Furl%3Dhttp%253A%252F%%252Fdoulist%252FF& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&/doulist/1445745/&i class=&icon-external&&&/i&&/a&&br&&/li&&li&計算機圖形: 專欄結集 &a href=&///?target=http%3A///link2/%3Furl%3Dhttp%253A%252F%%252Fdoulist%252FF& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&/doulist/1445806/&i class=&icon-external&&&/i&&/a&&br&&/li&&li&計算機圖形: 動畫 &a href=&///?target=http%3A///link2/%3Furl%3Dhttp%253A%252F%%252Fdoulist%252FF& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&/doulist/1445716/&i class=&icon-external&&&/i&&/a&&br&&/li&&li&計算機圖形: 相關數學 &a href=&///?target=http%3A///link2/%3Furl%3Dhttp%253A%252F%%252Fdoulist%252FF& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&/doulist/1445735/&i class=&icon-external&&&/i&&/a&&br&&/li&&li&計算機圖形: 其他參考 &a href=&///?target=http%3A///link2/%3Furl%3Dhttp%253A%252F%%252Fdoulist%252FF& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&/doulist/1447740/&i class=&icon-external&&&/i&&/a&&br&&/li&&/ul&遊戲圖形程序員必讀的是《Real Time Rendering》(見進建/專門豆列),和shader有關的較前沿著作有《GPU Pro》叢書(見Gems類列)。&br&&br&計算機圖形學並不是追求物理上完全正確的解,而是觀眾/玩家看上去覺得好看。為了優化,有些問題可以通過近似化來減少運算,學習一些擬合函數(也需了解底層提供的現成函數),並作出嘗試。例如基於物理着色中的BRDF擬合[1]、SSS模擬[2]。&br&&br&有時候,可以分解一些複雜的函數,生成查找表(LUT)減少運算量,如下面[1]的示例:&br&&img src=&/32247cbadd61ae399fcbcabd_b.jpg& data-rawwidth=&668& data-rawheight=&307& class=&origin_image zh-lightbox-thumb& width=&668& data-original=&/32247cbadd61ae399fcbcabd_r.jpg&&&br&&br&2. 底層&br&&br&通常shader是圖形算法實現的一部分,程序員需要了解shader語言提供的指令,以及它們如何影射至更底層的匯編指令,有時候還要了解具體的GPU架構和特性。有些指令可能較少用,例如ddx/ddy這些,有時候能用於優化。可以參考shader語言手冊、各GPU廠商的官方文件,以及GDC的一些講座[3][4]。&br&&br&3. 數學&br&&br&如題主所言,數學佔了很大的部分,建議閱讀[5][6],之後可以找相關數學的豆列。&br&&br&參考&br&&br&[1] Brian Karis, &Real Shading in Unreal Engine 4&, &i&ACM SIGGRAPH 2013 Courses: &/i&Physically based shading in theory and practice, ACM, 2013. &a href=&///?target=http%3A///publications/s2013-shading-course/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/pub&/span&&span class=&invisible&&lications/s2013-shading-course/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&[2] Colin Barré-Brisebois, Marc Bouchard, &Real-Time Approximation of Light Transport in Translucent Homogenous Media&, &i&Gpu Pro 2&/i&. Vol. 2. CRC Press, 2011. Slides: &a href=&///?target=http%3A////gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurface-scattering-look/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GDC 2011 – Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look&i class=&icon-external&&&/i&&/a&&br&[3] Emil Persson, &Low-Level Thinking in High-Level Shading Languages&,
GDC 2013. Slides: &a href=&///?target=http%3A//www.humus.name/index.php%3Fpage%3DArticles%26ID%3D6& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Humus - Articles&i class=&icon-external&&&/i&&/a&&br&[4] Emil Persson, &Low-level Shader Optimization for Next-Gen and DX11&, GDC 2014. Slides: &a href=&///?target=http%3A//www.humus.name/index.php%3Fpage%3DArticles%26ID%3D9& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Humus - Articles&i class=&icon-external&&&/i&&/a&&br&[5] Lengyel, Eric. &i&Mathematics for 3D game programming and computer graphics&/i&. 3rd Edition, Cengage Learning, 2012.&br&[6] Schneider, Philip, and David H. Eberly. &i&Geometric tools for computer graphics&/i&. Morgan Kaufmann, 2002.
1. 高層 深入了解各種計算圖形學及數字圖像學的算法,要知道它們要解決什麼問題,現存有那些解決方案,每個方案的優缺點是甚麼。書籍太多,不在此列舉,可參考本人的豆列: 計算機圖形: 入門/API類
計算機圖形: 進…
刚好我现在同时在开发两个2D游戏,一个是用Cocos2d-x,一个是用Unity3d。&br&&br&对于“&b&学习&/b&”而言,&br&Cocos2d-x是比较好理解的。它是传统的OOP结构,对于有编程经验的人来说,是最好不过了。就连Unity3d上,也有一个很火的2D框架,Futile,是模仿Cocos2d-x的架构和代码风格。从Cocos2d-x上手接触一下游戏引擎,是一个不错的选择。&br&&br&而Unity3d是Component-Based结构,对于OOP背景的程序员来说,一开始会觉得别扭。而且Unity3d有很多针对3d模型、3d动画、优化等等的商用功能,对于初学者来说会有点overwhelming的感觉。而且无论如何使用Unity3d,总需要在editor里进行大量操作,对理解游戏引擎和代码架构来说,并不是一个很好的方式。&br&&br&然而,从“&b&开发&/b&”的角度来说,&br&Cocos2d-x正如 &a data-hash=&d2cefa55c2bf& href=&///people/d2cefa55c2bf& class=&member_mention& data-tip=&p$b$d2cefa55c2bf& data-hovercard=&p$b$d2cefa55c2bf&&@周华&/a& 所说,是一个“纯正”的引擎——仅仅只是代码库。虽然可以利用CocosBuilder和其他一些工具进行图形化操作,但效率始终不够Unity3d高。而且暴露过多的底层代码,对于&b&研究&/b&是一件大大的好事,但是对于&b&创作&/b&而言,未必是福音。&br&&br&而Unity3d则是一个高效的IDE+代码库。它很好地封装了底层代码,提供许多简便的图形操作,还有商业级的高级功能。对于开发而言,我认为是更好地选择。之前大多数开发者对Unity3d的认识还停留在3D开发,但2013年末的2D支持让更多人选择Unity3d进行2D开发。&br&&br&&br&所以我的结论是,通过Cocos2d-x或者是Unity3d上的Futile框架来入门,熟悉之后再过渡到Unity3d进行开发。:)
刚好我现在同时在开发两个2D游戏,一个是用Cocos2d-x,一个是用Unity3d。 对于“学习”而言, Cocos2d-x是比较好理解的。它是传统的OOP结构,对于有编程经验的人来说,是最好不过了。就连Unity3d上,也有一个很火的2D框架,Futile,是模仿Cocos2d-x的架构和…
首先按照问题来回答的话:只要上PC,免不了被破解。对于一款独立游戏来说,最好的加密手段是不上PC,要不就干脆别加密。&br&&br&然后来说一下我个人的建议:国产独立游戏如果上PC的话,在品质(受欢迎程度)有保障的前提下,现阶段完全不加密会比加密更有优势。&br&&br&这年头只要打好国产旗号,至少国内的一些大的盗版网站不会去主动破解或者发布破解。但是还是会有小的破解组或者老外会破解,然后一些小的网站为了流量也会把破解版发出来。&br&老外做一款一般好评的独立游戏,没有什么优点也没什么缺点,过眼云烟两三周后就会被忘记。而同样的一款独立游戏如果是国产的,直接能被奉为神作。&br&国产大旗在各个方面都是一面很好的保护伞,放下你的一切高傲好好利用它吧,有优势不善加利用那不叫清高,叫傻。&br&&br&与其考虑提高成本使用加密手段避免被破解,还不如考虑怎么把游戏做好。把加密那部分预算和时间放到游戏后续的版本更新上,独立游戏的后续版本更新真的非常重要!!!毕竟对于独立游戏来说,游戏发布后的影响力才是至关重要的东西,影响力越大越不需要考虑净利润什么的。&br&你做个像MC一样影响力的游戏出来,哪怕和MC一样99%的玩家都是盗版,你也不愁自己的团队饿死了是不是?&br&&br&玩儿破解的那帮人,哪怕你真加密好了没有破解版,他们宁愿不玩儿也不会花一分钱买你的游戏玩儿。至于真正愿意为游戏花钱的那部分玩儿家,可能有些是先玩儿的破解,知道你是国产了,多多少少会挑手头富裕的时候花钱买一份来支持你的。这种时候或许那群打死不花钱的盗版玩家还能帮你在玩家间口口相传,提高知名度。&br&&br&所以作为一款国产独立游戏,打好的国产大旗,保证你的品质真的过硬,口口相传导致破解组蜂拥而至,倒也不是什么坏事。
首先按照问题来回答的话:只要上PC,免不了被破解。对于一款独立游戏来说,最好的加密手段是不上PC,要不就干脆别加密。 然后来说一下我个人的建议:国产独立游戏如果上PC的话,在品质(受欢迎程度)有保障的前提下,现阶段完全不加密会比加密更有优势。 这…
&p&看到有人说&Unity是给不懂编程的人用的&,忍不住想来说几句话。&/p&&p&作为一个用Unity和Unreal,以及其他三四线引擎都开发过商业项目,且业余时间玩各种大小开源引擎的人来说,听到这种话,还真是不太舒服。&/p&&p&&br&&/p&&p&在VR前阵子还很火的时候,
Valve那帮家伙用unity开发了《The Lab》,并在后来开源了其中的核心模块The Lab Renderer, The Lab Renderer的出现的原因之一是因为在Unity默认的Forward渲染框架下(至于为什么要用Forward ,是因为要支持MSAA),渲染每个物体时,每多一个动态光就要多一个Pass处理其光照,而 The Lab Renderer实现了单个Pass渲染多个灯光的解决方案。这样一个核心模块,在Unity极其方便的事件接口和ShaderLab的组合下,只增加修改了极少的代码就实现了。整个源码,我看了一下午就全都吃透了。其中基本上重新实现了阴影,灯光,雾等等的渲染。就是这样一个东西,如果让我在Unreal里实现一遍,我需要做多少事?? 我需要看多少Unreal源码才能实现这样的定制且还得确保新的定制不会与旧系统有不兼容,同时还得便于和官方新分支顺利合并新特性??(Unreal也在后来的版本中加入了这个)
我不敢想。
同样的例子还有很多,我就不一一列举了。&/p&&p& 我当初因为公司项目是用Unreal写的,所以也看了不少Unreal的源码,后来再用回Unity时,感慨良多,单从程序员的角度来说,有时候,开源并不代表你就可以对引擎有更多的掌控力,而且这往往都是程序员对开源这件事的自欺欺人。Unity提供了更方便的接口,更方便的脚本语言,让你不用花费太多时间在底层兼容性与C++那漫无边际的特性上,可以专注于你要解决的问题,你要创造的算法上,这对程序员来说难道不好吗?&/p&&p&每次看到有人在知乎上毫无根据的一边倒的捧Unreal (以前我也是其中的一份子),贬Unity时(特别是那些拿画面说事的), 我都想说 :“You Don't Know Unity”&/p&&p&&br&&/p&&p&&br&&/p&&p&不好意思,说了这么多,没有解答题主的问题&/p&&p&接下来是正题&/p&&p&技术方面我就不说了,因为争议点太多,没啥意义。我就说点市场吧。&/p&&p&在可以预见的未来中,如果没有出现大的技术变革,或者大的市场变化,Unity依然会占据比Unreal更多的市场。&/p&&p&如果你想要个证据,你可以去看看Unreal官方文档里有Unity转Unreal入门指南, 可你看看Unity会在自己的文档里放Unreal转Unity入门指南吗?
这难道还没有说明一切吗?&/p&
看到有人说"Unity是给不懂编程的人用的",忍不住想来说几句话。作为一个用Unity和Unreal,以及其他三四线引擎都开发过商业项目,且业余时间玩各种大小开源引擎的人来说,听到这种话,还真是不太舒服。 在VR前阵子还很火的时候, Valve那帮家伙用unity开发了…
&a data-hash=&e59aa6c5ee28d1fa404c40aae3455c0b& href=&///people/e59aa6c5ee28d1fa404c40aae3455c0b& class=&member_mention& data-editable=&true& data-title=&@梁伟国& data-tip=&p$b$e59aa6c5ee28d1fa404c40aae3455c0b& data-hovercard=&p$b$e59aa6c5ee28d1fa404c40aae3455c0b&&@梁伟国&/a& 说的很好,但我觉得2,3条也不是没必要的,特别是做3D游戏。我现在就在专门研究Cg和图形学的东西。自己在工作之余还折腾出了几个插件 ,放在Unity商店里卖着玩,每个月还能搞个上百美刀。&br&&a href=&///?target=https%3A//www./en/%23%21/publisher/4395& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Asset Store&i class=&icon-external&&&/i&&/a&&br&&br&从题主的问题中可以看出题主的一点迷茫,就像一年前的我,我也就比你多一年Unity经验。从一个打工者的角度来跟你探讨一下,也跟大家都探讨一下,不光探讨Unity技术,也探讨一下以后的方向。这里说一下我自己对这个行业的思考。&br&&br&现在Unity流行了,只要会写几行C#代码的人都能进个游戏公司写点逻辑,但真正精通的人不多。我当初C#都没学过,只会Java,都进了个小游戏公司,花了个把月的时间就参与开发了,当然也就是搞点优化,改改BUG,写点逻辑之类。现在越来越多的人用Unity了,我甚至可以预料,未来的几年内Unity会更加流行,说不定会到处是培训机构。到时候会有一大波人涌入这个行业,就像现在的Java开发SSH三大框架之类的。&br&&br&&b&我们面临的问题:Unity入门门槛低,注定以后的Unity从业者会越来越多,竞争会越来越激烈。&/b&&br&&br&我刚毕业的时候待过一个比较大的公司,做银行的信贷系统。那时刚开始学java,自己工作之余也看一下书充电,项目经理却跟我说,技术不重要,重要的是实现。后来我才知道,我当时是做一个工厂流水线工人,码农一个,技术确实不重要。公司巴不得我什么都不懂,只会if else,解决逻辑的问题,发一点微薄的薪水就行了。&br&&br&&b&于是我明白了,不想做产线工人,首先要脱离当前层次。要做到公司少了你不行!
&/b&&b&这个时候你必须掌握一些门槛高的技术,你才能拔尖。&/b&&br&&br&有些技术是靠经验堆积的,比如整个框架的设计,设计模式的运用。我倒觉得这个能力只要你平时留心,掌握它们只是个时间的问题。&br&而有些技术,是要去实打实钻研的,不看透几本英文原版书,不逛遍几个论坛,你永远不能get it。&b&越是难的东西,越能拉开你跟别人的距离。&/b&&br&&br&比如学Cg,很多资料都是英文的,像Cg的官方教程&a href=&///?target=http%3A//http./CgTutorial/cg_tutorial_chapter04.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The Cg Tutorial&i class=&icon-external&&&/i&&/a&,还有这个&a href=&///?target=http%3A//en.wikibooks.org/wiki/Cg_Programming/Unity& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Cg Programming/Unity&i class=&icon-external&&&/i&&/a&,不看这些书,根本入不了门吧。 还有最著名的《Real-Time Rendering》,都是英文的,还需要很多数学知识。像线性代数里的矩阵变换,这些东西虽然大学都有学过,但在这里才真正用上。在开发的过程中遇到问题了,要上网查吧。我跟你打赌,你要是碰到个C#的问题,去stackoverflow分分钟就能查出来(甚至去百度都能查出来)。但要是你碰到个shader上的问题,可就不好查了。Unity里面很多东西都是没资料查的,你只能去论坛里跟人交流,去看源码,去看UnityCG.cginc,去看AutoLight.cginc。总而言之,就是不好弄啊。等你深入的去研究这些的时候,慢慢的你就发现,好像公司里就你在弄这个,别人都不懂。这个时候你就牛逼了啊。&br&&br&以后手机的性能越来越好,高品质的3D手游会越来越多,虽然可能现在国内大部分公司做的手游是2D的,但以后一定会有更多的3D手游涌现。&b&我相信手游拼3D特效的时代马上就要到来了!&/b& 所以我感觉学图形学的东西还是比较有前途的。&br&&br&当然这也跟你自己的爱好有关吧。反正我是觉得,如果以后要跳槽,面试的时候,你拿着一个游戏说,这个游戏框架是你搭的,可能面试的人很难确定,谁知道你这框架搭得好不好。但如果你说这个游戏的所有3D特效和Shader都是你写的,这就一目了然了。
说的很好,但我觉得2,3条也不是没必要的,特别是做3D游戏。我现在就在专门研究Cg和图形学的东西。自己在工作之余还折腾出了几个插件 ,放在Unity商店里卖着玩,每个月还能搞个上百美刀。
从题主的问题中可以看出题主的一点迷茫,就像一…
&p&说一个独立开发不常见的技巧,但是做游戏的配置非常方便。做好了可以省很多时间&/p&&p&我们开发游戏的时候经常喜欢挂脚本放在物体上,像这样。&/p&&p&&br&&/p&&img src=&/v2-38b38cbf0f20_b.png& data-rawwidth=&409& data-rawheight=&457& class=&content_image& width=&409&&&p&&br&&/p&&p&但是如果到了后期,你要实现很多功能的时候,一个设计不好就会放很多脚本上去,像这样&/p&&p&&br&&/p&&img src=&/v2-37a8ae5f14add9adb9b94_b.png& data-rawwidth=&422& data-rawheight=&451& class=&origin_image zh-lightbox-thumb& width=&422& data-original=&/v2-37a8ae5f14add9adb9b94_r.png&&&p&&br&&/p&&p&如果你开始做第二个外观不同的模型的时候,但是功能相同的时候就要全部再挂一遍,数据复制过来一次。你可以说我可以直接复制预制体然后改变里面的网格就好了,但是这样经常会失去引用,比如你移动挂载了模型的某个挂点,这样一替换挂点就消失了。&/p&&p&一些有经验的程序员会选择动态挂载脚本(其实项目开发中基本都是动态挂载脚本到物体上)&/p&&p&&br&&/p&&img src=&/v2-ca21ca7cd566f7c994615c_b.png& data-rawwidth=&554& data-rawheight=&111& class=&origin_image zh-lightbox-thumb& width=&554& data-original=&/v2-ca21ca7cd566f7c994615c_r.png&&&p&&br&&/p&&p&然后数据要么通过读表,要么是和美术商定一个规则,动态赋值数据读取给对应脚本。&/p&&p&说真的,这样处理不好维护,而且需要策划配置表来控制数据,等到实际看到效果中间的流程太冗长了。&/p&&p&有没有办法能直接保存Unity放在面板上的数据呢?&/p&&p&&br&&/p&&img src=&/v2-caa43a47b159bede9dcd18_b.png& data-rawwidth=&419& data-rawheight=&176& class=&content_image& width=&419&&&p&&br&&/p&&p&有一个叫做ScriptableObject的类,这个类可以序列化存储数据,用的时候可以通过实例化来得到数据。&/p&&p&比如我们做一个这样的类,简单记录高度和宽度数据。用来存储数据&/p&&p&&br&&/p&&img src=&/v2-f2fa332f13c92eb5f5f3836_b.png& data-rawwidth=&518& data-rawheight=&322& class=&origin_image zh-lightbox-thumb& width=&518& data-original=&/v2-f2fa332f13c92eb5f5f3836_r.png&&&p&&br&&/p&&p&创建一个mono的类用来挂载在物体上显示数据&/p&&p&&br&&/p&&img src=&/v2-5b0e432c3dee5227bbff95e_b.png& data-rawwidth=&345& data-rawheight=&158& class=&content_image& width=&345&&&p&&br&&/p&&p&创建一个Editor脚本来做一些简单的显示控制&/p&&p&&br&&/p&&img src=&/v2-c39a69ced6d70c22e75b4ec431f1695f_b.png& data-rawwidth=&525& data-rawheight=&381& class=&origin_image zh-lightbox-thumb& width=&525& data-original=&/v2-c39a69ced6d70c22e75b4ec431f1695f_r.png&&&p&&br&&/p&&p&外界就看到简单的一个数据,双击它&/p&&p&&br&&/p&&img src=&/v2-34bec89d8dd7bbee47ddf50_b.png& data-rawwidth=&358& data-rawheight=&102& class=&content_image& width=&358&&&p&&br&&/p&&p&就出现可以编辑数据的界面&/p&&p&&br&&/p&&img src=&/v2-17bb4a344ee8ff48bab2b3e3ab94ba97_b.png& data-rawwidth=&361& data-rawheight=&273& class=&content_image& width=&361&&&p&&br&&/p&&p&然后在Editor脚本中加入导入和保存的数据的功能:&/p&&p&&br&&/p&&img src=&/v2-ddf3b69a828be257bfdf46c9ddddb877_b.png& data-rawwidth=&554& data-rawheight=&553& class=&origin_image zh-lightbox-thumb& width=&554& data-original=&/v2-ddf3b69a828be257bfdf46c9ddddb877_r.png&&&p&&br&&/p&&p&导出就可以看到脚本数据被保存到Resources目录了&/p&&p&&br&&/p&&p&&br&&/p&&img src=&/v2-aa124b680b0fb5aac472f088d490a37f_b.png& data-rawwidth=&554& data-rawheight=&380& class=&origin_image zh-lightbox-thumb& width=&554& data-original=&/v2-aa124b680b0fb5aac472f088d490a37f_r.png&&&p&&br&&/p&&p&以上就是用ScriptableObject这个类保存数据的流程,这个类的有点在于我们保存的数据可以动态的修改,而且是在游戏里面可视化的修改。如果程序和美术的数据用这个做存储,美术直接修改配置我们的程序用的时候就可以直接用这个数据了。而不用去做Json或者其他格式的存储数据来转换读取数据。&/p&&p&而缺陷在于这个类是会依赖你的脚本,如果要做热更新功能,必须脚本变量和存储的变量数据是统一的。&/p&&p&&br&&/p&&p&如果你对unity 的Editor功能熟悉,可以做它来做一个很棒的插件脚本,比如这个之前给美术处理角色信息的工具,程序只用给工具加轮子,美术只要用工具配置,就可以直接看到效果&/p&&img src=&/v2-7da6a1b522_b.png& data-rawwidth=&350& data-rawheight=&180& class=&content_image& width=&350&&&p&&br&&/p&&img src=&/v2-b626b4cd3ca437d1f522eee4357cda5b_b.png& data-rawwidth=&393& data-rawheight=&600& class=&content_image& width=&393&&&p&&/p&&p&&/p&&p&&/p&
说一个独立开发不常见的技巧,但是做游戏的配置非常方便。做好了可以省很多时间我们开发游戏的时候经常喜欢挂脚本放在物体上,像这样。 但是如果到了后期,你要实现很多功能的时候,一个设计不好就会放很多脚本上去,像这样 如果你开始做第二个外观不同的模…
上图喽~&br&&img src=&/a20fe575ab0fac56dd9c53_b.jpg& data-rawwidth=&553& data-rawheight=&419& class=&origin_image zh-lightbox-thumb& width=&553& data-original=&/a20fe575ab0fac56dd9c53_r.jpg&&&br&这是这十几天写的soft pipeline渲染的立方体&br&&img src=&/6dbdb206d6d351d591c82b96c4d98a10_b.jpg& data-rawwidth=&498& data-rawheight=&395& class=&origin_image zh-lightbox-thumb& width=&498& data-original=&/6dbdb206d6d351d591c82b96c4d98a10_r.jpg&&黑色三角形是鼠标点选效果,嗯,精确度高高?~&br&&img src=&/ef0b56f91b16e4f7db88e_b.jpg& data-rawwidth=&566& data-rawheight=&445& class=&origin_image zh-lightbox-thumb& width=&566& data-original=&/ef0b56f91b16e4f7db88e_r.jpg&&左面三角形使用透视纹理映射,右面的是线性映射,还是左面的给力啊(尼玛,计算量翻了好几倍啊~!)&br&为了感谢大家的谬赞,来~小的们,把新出炉的干货给各位兄台抬上来~&br&(1)&a href=&///?target=http%3A//blog.csdn.net/popy007/article/category/640562& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&blog.csdn.net/popy007/a&/span&&span class=&invisible&&rticle/category/640562&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&
这大牛把几个关键的矩阵用初中生都能看懂的数学知识给推!!倒!!了!!受益良多啊。唯一的一点点小遗憾是没有把CVV裁剪介绍一下,导致在顶点乘以透视矩阵后,进行投影操作之前出现了一段真空期,下面提到的《计算机图形学(opengl版)》说明了这个问题。但是大牛的光环还是那么耀眼!&br&(2)目前我看到的介绍流水线的资料中,在推导摄像机矩阵时,基本上没有提到一个很重要的线性代数上的基本概念,如下:&br&
world coordinate
是世界坐标系
&br&&p&  coordinate frame 是局部坐标系 也叫坐标架 类似于物体坐标系,或者摄像机坐标。&/p&&p& 
第一部分:这里用到得一个线性代数里的概念 叫做
过度矩阵: 从一个坐标基 到 另个一坐标基之间有一个过度矩阵
如 从坐标基A到坐标基B
有个过度矩阵C
则有 A*C = B 。如果有一个向量在世界坐标系下的坐标为a,有两在世界坐标系下的坐标基(coordinate frame)A和B,且从A到B的过度矩阵为C,a在A和B两个坐标基下的坐标是a‘和b‘。那么有&/p&&p&a = A*a‘ = B*b‘
由 A*C=B 带入得
A*a‘ = B*b‘=A*C *b‘
其中 A为可逆矩阵 有 a‘ = C*b‘。这样就得到了两个在不同坐标基,且由A可逆还可知C = B*(A-1)。(A-1)时A矩阵的逆。&/p&&p&&a href=&///?target=http%3A///BlackWalnut/articles/4194956.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/BlackWalnut&/span&&span class=&invisible&&/articles/4194956.html&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&
第二部分在上面的链接里,由于公式编辑不下来,看着太疼了。&/p&&p&
上面数学知识的重要性在于,给定任意一个向量可以快速构建一个坐标系。。。。。。用途有多广?!?!?!你把它用在物体绕任意轴旋转上试试,你把它用在摄像机坐标系推导上试试,你把它用在求射线和三角形焦点上试试(搜搜这个吧《Fast Minimum Storage Ray Triangle Intersection》),你把它用在normal map上试试(据说可以,我回头看看,嘻嘻~),当然,你要是发现其他用途也私信一下我,嘿嘿。&/p&&p&要不是考研!!这个定理我踏马也发现不了啊!!线性代数老师压根就没有提过!!话说那天我懒洋洋的看着数二数三不考,数一要考的线性代数部分,看到这个定理后,突然感觉比雷劈轻,比电击爽的一丝电流在大脑里蔓延。。。。。。我靠~我找的你好苦啊!!!&/p&&p&
得了~就这么多吧,今天刚把xcode上的和glsl相关的代码写完,明天开始研究光照,随后更新光照部分,手头已经有两本书了,不过学习思路还是不太明朗。回头聊~&/p&&br& -----------------------------------这东西真叫分割线???------------------------------------------&br&谢(没人)邀。。。。。&br&学3D开发也有两三年了,弯路走了不少就当给大家提个醒吧。&br&3D图形学刚开始学的时候最难的部分其实是渲染流水线,要搞清楚流水线每一步做了什么,用到了那些矩阵,以及矩阵背后的数学原理还真是要了亲命。折腾了死去活来好久以后,发现好书就那么几本:&br&1.《3D数学基础:图形与游戏开发》
这个可以当参考手册使用&br&2.《3D游戏编程大师技巧》
很多人说它过时了,但是让你徒手写个流水线,我还没有发现比这本代码更完整,系统的书。不过这本书的缺点是,透视变换和投影变换完全是乱七八糟的一大坨坨!下面这本书就好很多。&br&3.《计算机图形学(opengl版)》第三版
最近才发现的,目前中文网站上所有关于3D流水线叙述比较热门的博客,帖子基本上都能从这本书上找到出处,很系统,也基本完整,概念,术语,图例等等也比较到位,有些不太清楚的地方可以上网查查,基本上没有什么太大的遗漏。&br&4.红宝书&br&以下所有前提都要求你明白简单的线性代数运算,比如向量和矩阵的左右乘法,矩阵转置,正交矩阵的逆矩阵等于其转置矩阵等等。&br&如果你不知道3D是啥,建议从红宝书开始。&br&如果对3D有一定了解,会一点opengl,建议从《计算机图形学(opengl版)》开始,跟着徒手写一个渲染流水出来,写的过程中,《计算机图形学(opengl版)》里面有数学原理的介绍不太完整的,查查《3D数学基础:图形与游戏开发》相关章节,不知道具体数据结构怎么设计的,查查《3D游戏编程大师技巧》。&br&这个阶段,如果最后能写出来一个软的光栅化流水线,渲染出来线框就算成功。这是我的学习过程,可能对于不同的人,学习过程不太相同,但是,3D渲染流水线上关于几何变换的东西,这三本书都包含的差不多了。&br&关于光照部分,我这个寒假想研究一下,主要是shader的使用,已经有几本资料了,我看看了再来更新吧。&br&好吧。。。。。我回答这个问题的原因是有没有人能帮我回答一下&br&&a href=&/question/& class=&internal&&点经过透视矩阵变化后得到齐次坐标,经行裁剪时w分量的含义? - 数学&/a&&br&这个问题啊!!!急死人了都!!很多资料都“巧妙”(还是我傻傻的没有看见)避开了这个问题!!!三天了!!代码改了十几次!!!猜的,蒙的,算的都试了个遍!!流水线就差这一小步!!还让不让人开心的写代码了!!!快摔啤酒瓶了都!!!&br&----------------------------------------------------他们管这东西叫分割线---------------------------------------------------&br&那个问题解决了,是我的疏忽,给大家带来了麻烦,很抱歉。答案我就写在那个问题下面了。
啊哈哈~ 上图喽~ 这是这十几天写的soft pipeline渲染的立方体 黑色三角形是鼠标点选效果,嗯,精确度高高?~ 左面三角形使用透视纹理映射,右面的是线性映射,还是左面的给力啊(尼玛,计算量翻了好几倍啊~!) 为了感谢大家的谬赞,来~小的们,把新…
&p&看题主问的是GUILTY GEAR Xrd REVELATOR里的卡通渲染金属高光的实现方法, 那就拿图形分析工具截了一帧PC版本的画面进行分析&/p&&img src=&/v2-790db87fe56a912b33dedb7_b.jpg& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/v2-790db87fe56a912b33dedb7_r.jpg&&&p&没有找到很典型的金属模型, 只好拿potemkin手上的装备来当例子了&/p&&br&&img src=&/v2-72ffc85bcbc_b.jpg& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/v2-72ffc85bcbc_r.jpg&&&p&这个装备使用的材质贴图主要有三张:&/p&&img src=&/v2-b63eeaf96bbd004f0b20865_b.jpg& data-rawwidth=&512& data-rawheight=&512& class=&origin_image zh-lightbox-thumb& width=&512& data-original=&/v2-b63eeaf96bbd004f0b20865_r.jpg&&&p&前两张除了颜色没什么差别&/p&&img src=&/v2-70d3bdabbdfbf_b.jpg& data-rawwidth=&512& data-rawheight=&512& class=&origin_image zh-lightbox-thumb& width=&512& data-original=&/v2-70d3bdabbdfbf_r.jpg&&&p&贴到模型上看看效果, 应该是BaseColor&/p&&img src=&/v2-82a293dc052b2a5b146cab_b.png& data-rawwidth=&896& data-rawheight=&896& class=&origin_image zh-lightbox-thumb& width=&896& data-original=&/v2-82a293dc052b2a5b146cab_r.png&&&p&第三张最为复杂, 包含了4个通道, 应该就是各种Mask了&/p&&img src=&/v2-7be3c730f600a3462d56_b.jpg& data-rawwidth=&1024& data-rawheight=&1024& class=&origin_image zh-lightbox-thumb& width=&1024& data-original=&/v2-7be3c730f600a3462d56_r.jpg&&&p&分别把各通道对应到模型看看:&/p&&p&R通道, 估计是海带高光这种大范围出现的区域&/p&&img src=&/v2-083dbe4dc29ae56af50950_b.png& data-rawwidth=&896& data-rawheight=&896& class=&origin_image zh-lightbox-thumb& width=&896& data-original=&/v2-083dbe4dc29ae56af50950_r.png&&&p&G通道在这个模型上没有作用&/p&&p&A通道显然是卡通渲染中的描边区域, 有粗细的变化比程序计算出来的效果好得多&/p&&img src=&/v2-3db00ea150bb841e25c70_b.png& data-rawwidth=&896& data-rawheight=&896& class=&origin_image zh-lightbox-thumb& width=&896& data-original=&/v2-3db00ea150bb841e25c70_r.png&&&p&最后是B通道, 这就是题主要问的&UV边缘&了.&/p&&img src=&/v2-1cc0fae6533b06ace4a2f9c4e84be4b6_b.png& data-rawwidth=&896& data-rawheight=&896& class=&origin_image zh-lightbox-thumb& width=&896& data-original=&/v2-1cc0fae6533b06ace4a2f9c4e84be4b6_r.png&&&br&&img src=&/v2-fe274a587d_b.png& data-rawwidth=&1024& data-rawheight=&1024& class=&origin_image zh-lightbox-thumb& width=&1024& data-original=&/v2-fe274a587d_r.png&&&p&通过对比UV的分布和最终画面的渲染效果, 可以看出边缘高光出现的区域和形状都是受这个B通道控制的. &/p&&img src=&/v2-6162edf0adefce5fdda3e_b.png& data-rawwidth=&410& data-rawheight=&354& class=&content_image& width=&410&&&p&那么结论就是, Shader里并不存在所谓的&边缘&, 高光该怎么算就怎么算, 最后跟MASK贴图中的边缘高光通道混合一下就行了. 这个效果难度不在于程序部分, 而在于这种模型的UV/贴图的制作方法. &/p&
看题主问的是GUILTY GEAR Xrd REVELATOR里的卡通渲染金属高光的实现方法, 那就拿图形分析工具截了一帧PC版本的画面进行分析没有找到很典型的金属模型, 只好拿potemkin手上的装备来当例子了 这个装备使用的材质贴图主要有三张:前两张除了颜色没什么差别贴到…
xLua的作者,关注这帖子一阵子了,一直犹豫作为作者回答这问题会不会有卖瓜之嫌。&br&回下大家关注的热补丁的overhead。&br&热补丁的基本原理其实非常简单,了解后任何程序员都很容易分析出开销,比如对于这个类&br&&div class=&highlight&&&pre&&code class=&language-csharp&&&span class=&k&&public&/span& &span class=&k&&class&/span& &span class=&nc&&Calc&/span&
&span class=&p&&{&/span&
&span class=&kt&&int&/span& &span class=&nf&&Add&/span&&span class=&p&&(&/span&&span class=&kt&&int&/span& &span class=&n&&a&/span&&span class=&p&&,&/span& &span class=&kt&&int&/span& &span class=&n&&b&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&k&&return&/span& &span class=&n&&a&/span& &span class=&p&&+&/span& &span class=&n&&b&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&打了hotfix标签后,xLua会在il层面注入代码,注入之后这个类会类似这样:&br&&div class=&highlight&&&pre&&code class=&language-csharp&&&span class=&k&&public&/span& &span class=&k&&class&/span& &span class=&nc&&Calc&/span&
&span class=&p&&{&/span&
&span class=&k&&static&/span& &span class=&n&&Func&/span&&span class=&p&&&&/span&&span class=&kt&&object&/span&&span class=&p&&,&/span& &span class=&kt&&int&/span&&span class=&p&&,&/span& &span class=&kt&&int&/span&&span class=&p&&,&/span& &span class=&kt&&int&/span&&span class=&p&&&&/span& &span class=&n&&hotfix_Add&/span& &span class=&p&&=&/span& &span class=&k&&null&/span&&span class=&p&&;&/span&
&span class=&kt&&int&/span& &span class=&nf&&Add&/span&&span class=&p&&(&/span&&span class=&kt&&int&/span& &span class=&n&&a&/span&&span class=&p&&,&/span& &span class=&kt&&int&/span& &span class=&n&&b&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&k&&if&/span& &span class=&p&&(&/span&&span class=&n&&hotfix_Add&/span& &span class=&p&&!=&/span& &span class=&k&&null&/span&&span class=&p&&)&/span& &span class=&k&&return&/span& &span class=&n&&hotfix_Add&/span&&span class=&p&&(&/span&&span class=&k&&this&/span&&span class=&p&&,&/span& &span class=&n&&a&/span&&span class=&p&&,&/span& &span class=&n&&b&/span&&span class=&p&&);&/span&
&span class=&k&&return&/span& &span class=&n&&a&/span& &span class=&p&&+&/span& &span class=&n&&b&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&br&如果lua中执行了hotfix调用,hotfix_Add会指向一个lua的适配函数。&br&性能开销:&br&如果不打补丁,就一个if判断,比注入前多执行两条很轻量级的指令(Ldsfld,Brfalse),我在window下测试,这两指令加起来仅相当于空函数调用开销的十分之一到五分之一。&br&内存开销:&br&每个函数会多一个静态delegate引用,注意是静态的,和对象实例个数无关。(Stateful方式会略不同,后面单独分析)。&br&安装包影响:&br&一般情况,就一个if和delegate调用。如果泛化函数以及参数含非public类型参数或返回值的函数会多一点:每一个输入参数,每个输出参数,对应一次函数调用,外加三次函数调用。&br&很难有“增加百分之多少”的数据,因为这和你程序函数的粒度有关。有童鞋在尝试为NGUI全部类型加Hotfix标签来测试,有数据我可以更新上来。&br&&br&Stateful方式&br&这个方式的开销和基本和Stateless一样,一个地方除外:内存开销上每个对象实例会增加一个LuaTable的引用(引用而已,不会帮你new一个LuaTable实例,你没在构造函数那返回一个table,这个引用为空)。&br&&br&关于开源&br&当然,这决策来自领导,但我个人也有点小想法:&br&xLua在内部推广使用的过程中,深感项目的挑剔、指责和各种场景下的折腾才是一个通用组件快速进步和完善的动力。开源,无疑是把这放大化,也更加有利于xLua的健康发展。
xLua的作者,关注这帖子一阵子了,一直犹豫作为作者回答这问题会不会有卖瓜之嫌。 回下大家关注的热补丁的overhead。 热补丁的基本原理其实非常简单,了解后任何程序员都很容易分析出开销,比如对于这个类 public class Calc
int Add(int a, int b)
已有帐号?
无法登录?
社交帐号登录

我要回帖

更多关于 主流游戏开发引擎 的文章

 

随机推荐