关于图形学的那些让人迷惑的入门概念

断断续续的也学了一些图形学和3D渲染的知识,出于对游戏的喜欢吧。

因为有一些知识是,我当时不明白,后来突然焕然大悟的,我觉得可以写出来,分享一下。大神略过。

管线?流水线

英文单词是pipeline,可以翻译成管道、管线。但是管线,这个根本不形象,甚至误导。“渲染管线”,难道是拿笔 去画一个管子?直到我看了这个单词,之前都是看中文,这个单词还可以翻译成流水线。“渲染管线”实际是指像工厂的流水线那样一套流程下来,把定点数据变成屏幕上的像素的一套流程。或者说,它想说的是流程,抓住“Render Pipeline”这个东西的本质是一套流程

UV

可乐的瓶子上有一层纸,就是那层油纸,一般饮料瓶上都有。这个纸它是二维的,而瓶子是三维的,但是,这是重点,当它们贴在一起的时候,对于瓶子上的某一点,它在纸上都有一个对应的点。

那么是不是对于任何形状的物体,我们都可以找到一张纸,可以很完美的贴到它的表面上?这个我无法确定,但可以用来理解概念,就假设真的有。假如这张纸是粘性的,可以把物体表面的点粘下来,那么把这张纸再张开成二维的,那么原本在物体表面上的点都被展开到了二维平面里,那么在这个二维的平面里就有另一套坐标系统,这个坐标就是UV。

UV有什么用?假设有一个三维物体表面的点A,它的UV坐标是(u,v),然后我给你一张图片,你按这个坐标去图片里去点,然后把这个点的颜色涂到三维物体表面的这个点A上,那么结果是什么?

想象瓶子的表面上每个点,都射出一条线,线的另一端连接到图片上他们对应的UV坐标上。然后这些线逐渐的缩短,最终,是不是这个图片就被贴到了三维物体表面上的?!

这个图就是纹理(texture)

  • 有了UV坐标,就可以把任意二维图片贴到三维物体上,所以你建模的时候,建一个空白的,然后你想要什么表面就要什么。所以“皮肤”就是这么来的。
  • UV还有一个大用处,就是动画?想象可乐瓶上的包装纸被转动时候的情况,其实就是每个点的UV同步调的发生改变。比如水面效果,先给一个水的波纹图片,然后把这个波纹图片不断的移动,看起来就像水面不断的起伏。而这个波纹图片的移动,就是不断随时间调整物体上点的UV左边。

这些东西,下个Unity,建个胶囊,搞个贴图,拖一拖UV就有直观的感觉。

法线贴图

  • 首先光照模型里要用到法线,比如漫反射模型
I_diff = K_d * ambient+ K_d * light* dot (Normal,lightDir);

K_d 是反射系数,ambient 是环境光,light是光照,Normal是法线方向,lightDir光照方向
从公式里可以看出:法线可以影响光照。

假如有一个平面A,那么它的光是均匀的,然后有另一个平面B是凹凸不平的,当我在计算A的光照的时候,我用B的法线数据,那么计算出来是什么结果?那就是把平面A掰成B那样凹凸不平的结果,是不是?

进一步,我把B的法线用一张图记下来,然后计算A的时候用这张图,那么A就拥有了B的表面光照特征。而这张图就是法线贴图。

怎么用图记下来?普通图片是什么,每个点是RGB(当然也有其他颜色空间的)的 数据,而法线是一个向量,刚好也是3个分量(xyz),那么正好把xyz存到RGB里去。那么我们得到了一张图,而这个图里每个颜色信息实际是法线信息。

然后是为什么要这么干?
假如游戏里有一堵墙,墙上是凹凸不平的砖块,要么建模的时候就是这样的,那就要费力气了,也可以实际这个墙是个极其光滑的平面,然后用一个砖块墙面的法线贴图来计算的它的光照,它就有了凹凸不平的效果。这样:1.我想换其他效果,一张图的事 2. 省去了建模的工作

打个比喻:你在一张白纸上画了一个极其逼真的坑,那个坑存在吗?不存在。你看上去是一个坑吗?是。什么地方出了问题:光照!

这个东西,追根溯源,其实就是这本身是一个操纵眼睛的技术。而性能是永远不嫌多的,能省则省,所以就有了很多的模拟

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文将要介绍图形渲染管线,它被认为是实时图形学中的核心部分。图形渲染管线的主要功能是在给定了的虚拟摄像机,三维的对...
    SwordMaster阅读 15,264评论 0 19
  • 我们都知道,一个三维场景的画面的好坏,百分之四十取决于模型,百分之六十取决于贴图,可见贴图在画面中所占的重要性。在...
    自由的天空阅读 14,258评论 0 12
  • 【引言】 上一篇谈到C4D的凹凸贴图及其应用。最后说道,在现实使用中,尤其是在游戏引擎中,很少有使用凹凸贴图...
    DIGITALMAN阅读 40,994评论 19 190
  • <转>我也忘了转自哪里,抱歉,感谢原作者 什么是Shader Shader(着色器)是一段能够针对3D对象进行操作...
    星易乾川阅读 10,965评论 1 16
  • 十八岁的时候所感所想记下了一些矫情的东西,现在看来也不是不能读,而且发现过了这么多年,我以为自己的心境发生了巨大改...
    BKLZY阅读 2,649评论 0 0