创新实训第四周总结

2019/04/10
上周我们研究出smpl模型的参数关系,知道pose和shape能直接得到一个完整的人体模型
这周我们从算法出发,跑出一个库里的smpl模型图,并得到其法线贴图,深度贴图,和蒙皮权重图
在这里插入图片描述

结果:

原图
原图
在这里插入图片描述
smpl模型图
在这里插入图片描述
normal map
在这里插入图片描述
深度图

过程分析

法线贴图概念
为了计算光照, 我们需要使用网格的"法线". 一个表面法线是一个垂直于切线平面的向量. 简单来说, 它是一个向量, 垂直于给定顶点处的网格. 下面我们会看到一个网格, 每个顶点都有一条法线.

在这里插入图片描述
每个向量都指向外面, 遵循着网格的弯曲形状,这是一个游戏编程技巧, 它允许我们渲染相同数目的多边形(例如低解析度的网格模型), 但是在计算光照时使用高解析度网格模型的法线. 这为我们带来更好的感受, 关于深度, 真实性和光滑度.

对法线编码和解码
我们的表面法线是单位向量, 通常位于范围 -1.0 到 1.0 之间. 我们可以通过把法线范围转换为 0.0 到 1.0之间来把法线向量(x, y, z)存储到一个 RGB 纹理贴图中. 下面是伪码:

Color.rgb = Normal.xyz / 2.0 + 0.5;

例如, 一个法线 (-1, 0, 1) 会被作为 RGB 编码为 (0, 0.5, 1). x 轴(左/右)被保存到红色通道, y 轴(上/下)被保存到绿色通道, z 轴(前/后)被保存到蓝色通道. 最终的法线图(normal map)看起来就是下面这个样子:
在这里插入图片描述
在这里插入图片描述
有无法线信息的蜡烛对比

一条法线是一个三维向量,一个三维向量由x, y, z等3个分量组成,在法线贴图中,把(x, y, z)当作RGB3个颜色的值存储(如图2),并将其每个分量映射到[-1, 1]。例如,对于x, y, z各有8位的纹理,[0, 128, 255]表示法向量(-1, 0, 1)。
 在这里插入图片描述
保存在法线贴图中的法线是相对于由向量T(x轴),B(y轴),N(z轴)定义的纹理空间坐标系的T向量在纹理图像中是水平向右的,B向量在纹理图像中是竖直向下的,N向量是和纹理平面正交的Note:正如上图中显示的,这些向量通常是z轴对齐的(上图中N是z轴),因此z轴坐标占有最大的量,所以,当将法线贴图作为颜色图像来浏览时,通常显示为蓝色。这是因为z轴坐标是保存在蓝色通道而且有最大的量,颜色上占有主导地位那么我们该怎么将一个单位向量压缩为这种格式呢?首先注意的是对于一个单位向量而言,每个分量坐标总是位于[-1,1]的范围内假如我们将这个范围偏移并缩放为[0,1]并且乘以255并截断为十进制,那么结果将会变为[0,255]范围内的一个整数,就是说,假如x是一个在[-1,1]范围内的坐标值,那么整数部分f(x)是一个在范围0-255内的整数,函数定义为:

在这里插入图片描述
在这里插入图片描述
法线求法
我们知道求一个面的法线,但是一个顶点的法线怎么求呢?其实求出来的也是一种大概的法线。我们根据这个顶点旁边的点,每三个点确定一个平面,用这个点和其他点,每三个组合一个平面,分别求出每个平面法线后,把所有平面的法线叠加在一起,然后再单位化即是该点的法线
在这里插入图片描述
如上图所示,根据V0,V1和V2确定的平面(每个顶点Vi有x,y和z),我们可以求出这个平面的法线:

va = V1 - V0
vb = V2 - V0

根据向量求法线的公式我们可以得出,向量va和vb的叉乘 ,即为所求法向量。
即为:法线 norm = va X vb(向量叉乘) norm(x, y, z)
具体为:

 norm.x = va.y * vb.z - va.z * vb.y
 norm.y = va.z * vb.x - va.x * vb.z
 norm.z = va.x * vb.y - va.y * vb.x

或者我们可以用一些第三方计算几何数学库来处理向量的计算,例如glm库(OpenGL Mathematics几何数学库),另一个类似的数学库是:Shading Language Math for C++。使用glm库的计算如下:

glm::Vec3  va, vb, norm;
norm = glm::Cross(va, vb);    //直接利用叉乘函数即可计算

深度贴图``
深度图像 = 普通的RGB三通道彩色图像 + Depth Map
  在3D计算机图形中,Depth Map(深度图)是包含与视点的场景对象的表面的距离有关的信息的图像或图像通道。其中,Depth Map 类似于灰度图像,只是它的每个像素值是传感器距离物体的实际距离。通常RGB图像和Depth图像是配准的,因而像素点之间具有一对一的对应关系。
  
深度数据流所提供的图像帧中,每一个像素点代表的是在深度感应器的视野中,该特定的(x, y)坐标处物体到离摄像头平面最近的物体到该平面的距离(以毫米为单位)。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值