法线贴图中法线值的坐标空间选择

法线贴图是目前游戏中被广泛使用的技术,通过从贴图采样法线可以表现物体的凹凸,在法线贴图的实现上,有一个重要的问题需要考虑,就是法线贴图上的法线值应该取在哪个空间.

一  模型空间:法线就直接取建模时的模型空间,这是最容易想到的方法。这种方法在runtime的时候,将光线从世界坐标转换到模型的局部坐标,然后在局部空间同每个pixel的采样到的法线做光照计算。这种方法有个最大的缺点就是法线贴图需要的是唯一化的UV(即模型的每个顶点的nv都不能重复,为什么?想象一下即可,模型需要完全展开到发帖上),这意味着法帖的尺寸较大,不能复用,占内存。

二切线空间:首先切线空间的定义,模型顶点处,以顶点的法向为z轴,模型的局部y轴方向为y轴,用他们叉乘出x轴,在用x和z叉乘出新的y。这样建立的坐标系是和这个点的法向相切的,这个空间叫做正切空间,这个坐标系的数值表示称为改点的正切值,通常和位置uv等其他一并放入顶点buff里。切线空间法线的做法是将某点的法线转换到该点的正切空间上,存储正切空间的法线值。因为正切空间的法线表征了相对这点的凸起情况,所以法帖是可以在模型的不同位置重用的,比如可以平铺何以对折,可以某些部位重用。在runtime计算的时候,要讲光线转换到正切空间计算。节省了贴图的内存,但是要附加顶点的正切属性。这是目前较为流行的法线计算方法。

时间: 2024-10-31 04:10:19

法线贴图中法线值的坐标空间选择的相关文章

法线贴图中2维图像和空间3维图像坐标对应关系

问题描述 法线贴图中2维图像和空间3维图像坐标对应关系 我有一张地球图像,我用U3D贴到了空间球体上,我如何才能知道地球图像上的某一块 的坐标(x,y)和空间球体(x,y,z)坐标的对应关系???? 解决方案 我记得,好像鼠标的position和自带UnityGUI的0点和坐标轴正方向不一样 貌似鼠标position的0点在屏幕左下角,X轴正方向是向屏幕右方,Y轴正方向是向屏幕上方 而UnityGUI的0点在屏幕左上角,X轴正方向是向屏幕右方,Y轴正方向是向屏幕下方

《Unity着色器和屏幕特效开发秘笈》—— 2.5 法线贴图

2.5 法线贴图 在当今的游戏开发可编程管线中,我们最常使用的一种贴图方式就是法线贴图.使用法线贴图我们可以在低分辨率的模型上实现一种模拟的高分辨率效果.因为不同于对每个顶点(逐顶点级)进行光照计算,我们是将法线贴图中的各个像素点作为模型的法线,这样我们的光照呈现高分辨率的效果,同时模型保持低多边形数. 在三维计算机图形学中,法线贴图也叫"DOT3 (仿立体)凹凸映射",是一种用于模拟凸起和凹陷的光照效果--凹凸贴图的实现技术.它是用来在不增加额外多边形的情况下添加更多的细节.该技术的

请问如何识别图中黑色方块并转换成坐标

问题描述 请问如何识别图中黑色方块并转换成坐标?(有黑色的坐标的值是true,如果没有黑色方块即为false)谁有好的解决方法.方向是有一点歪的. 解决方案 解决方案二:无图yousayajb解决方案三: 解决方案四:引用1楼xdashewan的回复: 无图yousayajb 图发了解决方案五:你是要每个黑色矩形的坐标吗?解决方案六:引用4楼xuzuning的回复: 你是要每个黑色矩形的坐标吗? 是的.其实我是需要知道所有坐标的位置上是黑色方块还是白色方块(白色间隙不算)解决方案七:引用3楼lq

sdk-KinectV2彩色图中一点对应的深度图坐标?

问题描述 KinectV2彩色图中一点对应的深度图坐标? 深度图点转换成彩色图坐标可以用MapDepthToColorImagePoint()函数. 那么反过来呢?已知彩色图某一点坐标如何较准确的计算对应深度图的坐标? 解决方案 kinectv2是sdk版本还是啥,这块应该对其一下就行了吧,没有太搞过 Kinect中使用OpenNI2实现深度图和彩色图对齐 或者融合显示?http://blog.csdn.net/chenxin_130/article/details/8619909

图像处理-用C语言将bmp 8位灰度图的灰度值缩小16倍,调色板中数值由255行变成16行调

问题描述 用C语言将bmp 8位灰度图的灰度值缩小16倍,调色板中数值由255行变成16行调 用C语言将bmp 8位灰度图的灰度值缩小16倍,由0-255变成0-16,调色板中数值由255行变成16行,同时调色板rgbBlue rgbRed rgbGreen数值范围由0-255变成0-1.我用c语言实现后,为什么图片不再是灰度图,有了其他颜色??? ```#pragma once #ifndef BMP_H_INCLUDED #define BMP_H_INCLUDED #include #in

c语言-C语言的递归算法,编译时会出现图中的数值,无论输什么数都是这个求和值

问题描述 C语言的递归算法,编译时会出现图中的数值,无论输什么数都是这个求和值 解决方案 首先这并不叫递归,递归是自己调用自己的意思. 这个程序的错误在于scanf格式说明里面不能有汉字 换成 scanf("%d",&n); 解决方案二: 你的程序首先没有用递归,其次scanf不要/n 解决方案三: 你这是一个循环程序, 另外你在你在要输入的数值前面输入和 %d 符号前面一样的串之后,输入数值再敲回车就可以了.不然你读到的值永远是0.

吧-matlab中怎么检测一幅二值图中的线是直线还是曲线?

问题描述 matlab中怎么检测一幅二值图中的线是直线还是曲线? 一幅二值图中有几条线,怎么判断出它是直线还是曲线?

图像处理-matlab中怎么检测一幅二值图中的线是直线还是曲线?

问题描述 matlab中怎么检测一幅二值图中的线是直线还是曲线? 一幅二值图中有几条线,怎么判断出它是直线还是曲线? 解决方案 有没有误差范围delta?

如何获取c1flexgrid表中单元格的坐标

问题描述 合计栏上边的c1flexgrid控件我放在了Panel控件中,我想要取得某一单元格的Left和Top值应该怎么做呢?我用过c1flexgrid.rows(1).top和c1flexgrid.cols(0).left属性来取值,发现所取单元格的TOP值在控件可视范围内的值是准确的,在可视范围外的就不准确了,如:c1flexgrid.rows(30).top的值就是前30行的高度累加的值.请教各位高手有什么方法解决吗?最好附上代码(vb.net).谢谢! 解决方案 解决方案二:既然是坐标,