• Unity3D教程宝典之Shader篇:第十九讲凹凸贴图


    本讲分为两个部分
    一:原理
    二:实现
     
     
      一:原理
     
    (1)眼睛与光
    让我们来看看一个粗糙的表面。
         



       从远处看,你判断这个物体是粗糙的的唯一证据是在它表面上下的亮度有改变。你的大脑能够获得这些亮暗不一的图案信息,然后判断出它们是表面中有凹凸的部位。左边的一幅图就说明了这一点。你可以发现它是一个浮雕式的表面。一些矩型和字母被印入表面,但是它们摸上去就像是一个隐藏的监控器的玻璃。如果这个图像是在适当的位置上,那么它除了改变亮度,不需要再做任何其他的工作。
     
       那么你也许会问:我是怎么知道哪些点要亮,哪些点要暗呢?这不难。绝大多数人生活在这样一种环境下——这个环境的大多数光源来自上方(译者注:比如白天主要的光来自太阳,夜晚主要的光来自天花板上的日光灯)。所以向上倾的地方就会更亮,而向下倾的地方就会更暗。所以这种现象使你的眼睛看到一个物体上亮暗区域时,可以判断出它的凹凸情况。相对亮的块被判断是面向上的,相对暗的块被判断是面向下的。所以我只需要给物体上的线条简单得上色。
     
       如果你想要更多的证据,这里还有一幅几乎相同的图,不同于前的是它旋转了180度。所以它是前一幅图倒转的图像。那些先前看起来是凹进去的区域,现在看起来是凸出来的了。
      
     
       这个时候你的大脑并没有被完全欺骗,你脑中存留的视觉印象使你仍然有能力判断出这是前一幅图,只是它的光源变了,是从小往上照的你的大脑可能强迫性地判断出它是第一幅图。事实上,你只要始终盯着它,并且努力地想像着光是从右下方向照射的,你就会理解它是凹的(译者注:因为日常生活的习惯,你会很容易把这些图形判断成凸出的图形,但是因为有了上一幅对照图的印象,你可能才会特别注意到这些图块其实还是凹入的,只是判断方法不符合我们日常生活习惯,因为这时大多数光不是从上方照射,而是从下往上照射)。
     
    (2)法线
    之前15讲提到过,法线对光的反射很重要。而一般来说 一个三角形上某点的法线就等于垂直整个三角型的法线。但是我们可以通过灰度图或者从法线贴图取得法线,达到更真实的画面效果。
     
     
      二:实现
     
    (1)与灰度图叠加 
    这种方式也叫fake bump mapping,假凹凸贴图。因为并没有改变物体表面点的位置或者法线。仅仅是把Bump Map叠加在已经渲染好的表面上,造成亮度上的扰动,从而让眼睛以为是凹凸的。计算复杂度是基本加减法。缺点是并不会随着光方向的改变而改变明暗区域。
     
    (2)生成法线
    由于(1)的方法有不能对光进行反应的硬伤。于是有了更逼真的方法:用高度计算法线。
    高度计算法线的方法比较多,这里主要介绍的是CG里广泛采用的一种。
    方法:
    在对灰度图上的点采样的时候,不单取该点的高度Hg,而且取该点之右的点Hr和该点之上的点Ha
    以这三个点作2个向量:第一个向量V1是(1,0,Hr - Hg) 第二个V2是(0,1,Ha - Hg)
    法线为 单位化后的 v1与v2的向量积。
     
    如果把结果储存在一张图上,那么就生成了法线贴图了。Unity3d能替我们做这些,将灰度图转换为法线贴图。就是下面的(3)
     
    (3)Unity里高度图转法线贴图
    具体步骤:
    1)导入heightmap
    2)选中之后将Texture Type改为Normal map
    3)勾选Create from Grayscale
    4)Apply
    之后就看到unity里该图直接变成了呈蓝色的法线贴图。


     
     
    PS: 
    Unity3D里自带的Bump Map Shader,即Bumped Diffuse等Shader是法线贴图的方式。也就是用的是RGB的法线贴图,一般呈蓝色。Unity自带的Shader是没有直接使用灰度图的,而提供能是灰度图转法线贴图的功能。
     
     
    本文部分内容出自
    http://freespace.virgin.net/hugo.elias/graphics/x_polybm.htm
  • 相关阅读:
    面向对象与面向过程的区别
    IE浏览器上传文件时本地路径变成”C:\fakepath\”的问题
    ldap bdb_db_open 错误解决办法
    转载:技术普及帖:你刚才在淘宝上买了一件东西
    js错误捕捉
    Linux服务器管理系统wdcp Lanmp
    [译]Pro ASP.NET MVC 3 Framework 3rd Edition (Chapter 20 JQuery) 0.引言
    发一个自己写的账号管理软件
    [译]Pro ASP.NET MVC 3 Framework 3rd Edition (Chapter 20 JQuery) 4.Basic jQuery Theory jQuery理论基础
    资源下载(2011609更新)
  • 原文地址:https://www.cnblogs.com/zdlbbg/p/4329478.html
Copyright © 2020-2023  润新知