Gamebryo系列材质详解:三

托了好久的一篇文章,上次写了一半丢了。只好重头写来。

写这篇文章的时候纠结了很久,如果说的太细,就要涉及到很多数学上的东西,比如要解释为什么变换矩阵是4x4的,要解释tangent space的动机.但是我觉得这对毫无基础而言的学习者来说是个灾难.所以我打算用一个特殊的番外篇来试图解释一些问题,但是你完全不用去看他.就像我记得一开始学习一个引擎的使用时,我们都是先掌握好他的用法,刻意回避掉源代码也就是实现过程,这对学习是有帮助的.等到我们自如的使用以后再来研究细节.

和初衷一样,我不觉得写一个shader是多么困难的事情,不过很多地方都把这个说的异常的玄乎。包括图形中用到的大量的数学知识,我也没觉得有多么的数学。当然最近我在看一个模拟流体的文章中,看到了久违的N-S方程,突然觉得有时候数学懂的多点还是很有用的。
但是无论怎样,游戏里用的编程知识,甚至高超的数学技巧,都只是工具而已,如果你沉溺于其中势必会适得其反。真正的成功来自于设计。还是那句胡子白的老话:技术只是工具,不是诉求。
本文的目的是从浅显的角度让你认识到什么的shader,让一个从来都没有写过一句渲染代码的同志们都能通过这几篇短文的学习开始自己东西使用可编程管线。当然,我也力求用最直白的方式让你搞清楚什么是线性变换,什么是仿射变换,Tangent Space啊,甚至刚才那个N-S方程。

首先我假设你稍微懂点高等数学的知识,微积分,线性代数,如果懂点微分几何就更好了。不过就算这些你听都没听过也不要紧。这不会影响阅读。
两个问题:1.先去看下Generated里生成的文件,如果你能看懂一些片段么?
               2.最上面有很多大写字母,后面跟着=0,=1的你能大概懂么?
               3.如果上面那个问题你能回答,那么顺带看下这个问题,找两个文件,相同的定义,一个是0,一个是1,下面的片段有什么不同,你能看出来么?

如果前两个都回答不出来,那最好回去读下前两篇文章.

好的,如果都没难倒你,那么可以开始了。
首先假设你知道渲染流水线,如果这个也不懂,最好找本基础的书看两眼,或者WIKI下。
打开任意一个Shader VS文件(顶点着色器),如果有GB就随便开一个生成的文件,都缺不了两样东西。
一个叫WorldMatrix(或者world),一个叫ViewProjectMatrix(或其他大同小异的名字)
为什么这两个是必须的呢?也就是说一个简单的模型,美术在Max里拉出的一个BOX,到底要做哪些事情才能正确的显示在我们眼前呢?如果细说,就需要说到射影几何学。(我打算开个番外篇专门说这个内容 :))

模型的每个顶点数据都有自己的位置信息,他们需要WorldMatrix来把自己的局部坐标变换到世界坐标。WorldMatrix是一个4×4的矩阵(为什么呢?请看番外篇吧)  变换到WorldMatrix以后,最后一步需要把世界坐标中的模型变换到视坐标。就是ViewProjectMatrix,也是个4×4的矩阵。

这样就完成了一个最简单的变换。从本地坐标到屏幕坐标。To be continue...





收藏到网摘:

[本日志由 volfmath 于 2010-05-12 00:34 AM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 0 | 引用: 0 | 查看次数: 578
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 关闭 | [img]标签 关闭