引用:
|
作者vircgd
記得在我小時候,鄰居的叔叔幫我家組了台電腦,
裡面裝了一套3D遊戲,叫做Wolfenstein,
我在好奇心的驅使之下動手玩了一會兒,
沒想到從此FPS類的遊戲就成為我最愛的遊戲類型,
接著FPS類型的遊戲不斷推陳出新,畫面越做越逼真,
記得第一次玩到毀滅戰士的時候,
在當時來說強到爆炸的3D特效真的撼動了我的心靈,
後來毀滅公爵、雷神之鎚、戰慄時空、彩虹六號、
戰地風雲、決勝時刻、DOOM3、FAR CRY,
遊戲的畫面一個比一個逼真,幾乎每半年就會有一次飛躍,
每一款新FPS的3D特效都值得期待。
但是自從CRYSIS推出之後,到今天也已經超過兩年,
在這兩年間,似乎CRYSIS之後的FPS遊戲畫面都沒有躍進,
彷彿陷於某種瓶頸一般,因此,我感到很好奇,
究竟在這兩年之間發生了什麼事?
是軟體上的技術已達極限,還是硬體上的能力無法增強?
還要過多久,才能再一次體會到德軍總部→毀滅戰士之...
|
我以前也是跟你一樣
後來看了篇文章後
才了解自己是個只會嫌人家 永無止盡挑剔
而這種行為根本是很苛刻的
首先
就跟大眾一樣 大家對手頭上的東西
知道這些是怎麼運作的嗎
你看看這網業
http://www.cnblogs.com/lancidie/arc...09/2203955.html
當我們覺得 怎麼畫面都沒有進步的時後
你知道 這些遊戲引擎是多麼高知識 才成就得嗎
天底下哪有那種永無止盡進步的道理
一個東西甜一千倍 再甜一萬倍
你真的吃的出那什麼味道嗎
我看的文章告訴我們為什麼特效不可能永無止進進步
http://vga.zol.com.cn/219/2195505_all.html
這個特效 要100行程式碼
再複雜點
就變一萬行
再複雜點 一百萬行
為什麼特效不能一直進步
很簡單寫程式的人會累死
但消費者卻只會挑剔 而且他們的胃口你永遠無法滿足
沙子-沙漠效应
为了接近真相,我们要在这里引入一个重要的概念——沙子-沙漠效用。所谓沙子-沙漠效应,其实是几个从量变到质变的过程的集合。
如果您手里有一粒沙子,而你想要一小堆沙子,那好办,只要再找几十几百粒沙子就可以凑成一小堆了。
如果您手头有了一小堆沙子,想要一捧沙子,那也好办,不过是几百万粒沙子而已,弄起来不会很难。
如果您有了一捧沙子,想要一大堆沙子,也不是不能办,几百上千亿粒沙子而已,找个铲子一铲子下去就能有几亿,不几下就搞定了。
如果您有了一大堆沙子,想要一片沙地,这可能就不好办了,沙子有多少是数不过来了,不过也不是不能办,多花点时间就可能做得到。
如果您有一片沙地,想要一个沙漠……
这就是沙子-沙漠效应。他的描述性解释应该是——在最小单位不变的前提下,体系在简单的基础上向复杂方向的每次质变都会比前一次质变更加困难,更加接近不可完成。
这个概念我们将会在今后的文章中遇到两次,作为其中的第一次,就让我们把这个效应应用到shader过程中,去看看究竟发生了什么吧。
最开始,透过几十段shader代码就可以实现单纯的纹理操作无法做到的效果,它可能只是改变了几百个关键像素而已,您的眼前一亮。
接下来,这种效果看多了,您习惯了,于是希望看到更加真实的效果,这种效果的提升导致代码从几十段变成了几千段,而且其中开始出现了各种复杂的比如跳转和条件分支之类的操作,它开始面向所有场景中的像素了,您的眼前又是一亮。
然后,新的效果您又看厌倦了,为了迎合您的需求,代码从几千段变成了几十上百万段,它不仅面向场景中所有的像素,而且其中开始出现了复杂的光线和颜色交互关系的变化,您的眼前勉强的又亮了一下。
现在,很明显新的效果您再一次厌倦了,于是代码开始变成上千万段,它在原有的基础上甚至将直接执行的数学代码都引入进来以便为体系计算更加真实的光线关系提供运算能力,所要处理的像素也经常要根据实际需要再次甚至多次的重新回到流水线中一遍一遍的处理正确的颜色表现。
每一代微软发布的新API所能够产生的特效都是美好的,越来越趋近真实的,但这种真实是建立在日益累积的复杂度之上的,这些特效的基础,也就是每一段代码都是程序员一个字母一个符号的敲打而成的。如果在这么发展下去,当您对现在的特效再一次厌倦了的时候,程序员们该如何去面对可能会达到几十亿段代码级别的编程需求呢。
产品:GeForce GTX560Ti nVIDIA 显示芯片 回到顶部阅读商人为沙子准备了推土机
● 商人为沙子准备了推土机
实际上微软之所以将shader效率提升到了一个极其重要的高度,跟他本身意识到了沙子-沙漠效应有直接关系。API再怎么优秀,最终的使用者都是人。微软如果想要让自己的API有更多的人使用,除了更高效更绚丽之外,逐渐降低的编程难度也是必要条件。否则光有优秀的特效,却动辄需要几万行代码才能实现,这么发展下去早晚有一天全天下的程序员都会被累死。
提倡高效的shader,推广形势更加灵活的代码形式,这从本质上就是在降低编程的难度,因为灵活本身就意味着自由和无拘无束,而自由和无拘无束的编程环境显然有利于程序员甩掉繁文冗节的累赘。同样的使用1D指令就能够达成的效果,在DirectX 10环境下的代码绝对比需要找齐规整4D格式的DirectX 9环境要简单很多。而一样是调用通用计算能力去加速图形处理过程,DirectX 11环境下干脆取消了代码的几何关联性,这使得编程难度和复杂度大幅下降到了足以让绝大多数人都能够接受的程度。