中文第一计算机图形学社区OpenGPU 版权所有2007-2018

 找回密码
 注册

扫一扫,访问微社区

搜索
查看: 4458|回复: 2

normalMap的七七八八

[复制链接]
发表于 2012-12-13 00:20:08 | 显示全部楼层 |阅读模式

关于normalMap,主要是要谈谈tangent space,可以自行生成,或者从3dmax里取。

我是这样想的,当检查到mesh的material使用了normalMap,那么mesh就会导出tangent和binormal。

通过2天不停得试验和翻阅文档,有几点认知是需要明确指出:

1.  tangent变换并不是正交变换,大部分情况下顶点normal和三角形表面是不垂直的,tangent和binormal也未互相必垂直。不考虑镜像映射的话还只是误差,镜像映射之后干脆连方向都反了。

2.  如上述,一般的说法,在vertex buffer中只存tangent,而在vertex shader中使用cross(tangent, normal)计算出binormal是不正确的。

3.  美术可能只画半张脸的normalMap,而另一半使用mirror出来。这种情况,使用cross出binormal的效果,就会原本凹的凸,凸的变凹。

4.  还有一种说法,是重新计算比如tangent在平面上的投影,也就是Gram-Schmidt orthogonalize,但我的结论是在max中不需要这么做。

5.  直接取max给的tangent和binormal是绝对不行的,那会变成这样,见下图:

左边是ogre自动生成的tangent,右边是直接取max的tangent不作处理,两者的binormal都是cross出来的,两者中间的镜像都是不正确的。


结论是:

1.  必须是源生tangent, binormal,指望只存1个,用cross出来另一个是想法是错误的。

2.  要处理镜像,不单是tangent,连binormal都可能反向。


关键代码如下:


if (hasTangent)
{
    int tangentIndex = mesh->GetFaceVertexTangentBinormal(face->meshFaceIndex, vertexIdx, tangentChannel);
    vertex.tangent = mesh->GetTangent(tangentIndex, tangentChannel);
    vertex.binormal = mesh->GetBinormal(tangentIndex, tangentChannel);

    if (vertex.binormal % CrossProd(vertex.normal, vertex.tangent) < 0)
        vertex.tangent *= -1.0f;

    if (vertex.tangent % CrossProd(vertex.normal, vertex.binormal) < 0)
        vertex.binormal *= -1.0f;

}



这是处理后的NdotL图:

注意这个地方:

如果不处理则会凹凸相反。

最终的渲染效果:


发表于 2014-3-27 23:24:13 | 显示全部楼层
马肝大大, 你的这个带镜像的tagent space, 最后计算出的法线,有缝没有? 我这里会看到一个缝, 暂时还没有解决.
貌似NdL图中腰带处也能看到缝?
发表于 7 小时前 | 显示全部楼层
天龙开服|奇迹Mu开服|魔兽开服|魔域开服|墨香开服
天堂2开服|传奇3开服|英雄王座开服|千年开服|征途开服
新魔界开服|骑士开服|烈焰开服|破天开服|决战开服
美丽世界开服|乱勇OL开服|倚天2开服|完美世界开服|征服开服
天堂开服|传世开服|真封神开服|劲舞团开服|天上碑开服
永恒之塔开服|仙境RO开服|诛仙开服|神泣开服|石器开服
冒险岛开服|惊天动地开服|热血江湖开服|问道开服|密传开服
火线任务(Heat Project)开服|飞飞OL开服|洛汗开服|天之炼狱开服
丝路传说开服|大话西游开服|蜀门开服|机战开服|剑侠情缘开服
绝对女神开服|传说OL开服|刀剑开服|弹弹堂开服|科洛斯开服
魔力宝贝开服|武林外传开服|网页游戏开服|页游开服|希望OL开服
成吉思汗开服|剑侠世界开服|全民奇迹开服|挑战OL开服
红月开服|十二之天(江湖OL)开服|倚天开服|dnf开服
很多第一次想开F的客户,基本都是发一个版本给我们,问我们有没有这样的版本
首先我们申明,版本都是要进行修改的,因为每个GM都有自己的想法和设计
不可能有一模一样的版本,只能进行修改和制作后才能做到相同.
关于私服,我们可以模仿做任何版本,这个是肯定不可争议的.
IDC服务器以及空间租用&私服一条龙网络游戏服务端销售(架设属于你自己的私服)
开服套餐-游戏介绍-网站模版-广告代理-主机空间租用
官方网站40ie.com
客服咨询QQ1292124634(企鹅扣扣)
Email:1292124634@qq.com
本团队正规公司化运营,拥有自己的专业技术团队,合理的价格。
专业诚信为您量身定做独家专业的网络游戏,打造属于自己的网络私F,圆您一个GM梦想.
40ie.com开区服务端版本下载地址(已修复不能下载问题):
40ie.com/soft/index.html
传奇3私服一条龙制作_40ie.com 传奇sf一条龙开服_40ie.com 永恒之塔开区一条龙服务端_40ie.com












天堂2私服一条龙制作 传奇3sf一条龙开服 天上碑开区一条龙服务端
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|关于我们|小黑屋|Archiver|手机版|中文第一计算机图形学社区OpenGPU

GMT+8, 2018-10-19 22:23 , Processed in 0.061878 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表