如何使用Shader处理纹理

发表于2018-02-28
评论0 4k浏览
使用Shader处理纹理对于有经验的开发者来说肯定是简单的,但对于那些初入门的开发者来说可就未必了,为此下面就给大家介绍下用Shader处理纹理的方法。

1:在每帧调用Draw Call的时候,物体的Mesh Render组件都会将它复杂渲染的模型数据发送给unity shader。

2:使用纹理坐标访问纹理,而法线可以用于计算光照。纹理实际上是一个二维数组,它的元素是一些颜色值。单个的颜色值被称为纹理元素(texture elements)或纹理像素(texel)。每一个纹理像素在纹理中都有一个唯一的地址。这个地址可以被认为是一个列(column)和行(row)的值,它们分别由U和V来表示。Direct3D直接将纹理空间中的纹理像素映射到屏幕空间中的像素,跳过了中间过程,从而提高了效率。

3:把材质拖拽到模型上,其实就是将材质赋予组件的Mesh Renderer的Material属性。模型的构成:三角面片组,每一个三角形由三个点构成,每个点又有位置,法线,切线,纹理坐标,顶点颜色等数据。

4:纹理中的每一个纹理像素可以通过它的坐标来声明。但是,为了将纹理像素映射到图元上,对于所有纹理上的所有纹理像素,Direct3D需要有一个统一的地址范围。因此,它使用了一个通用的地址方案,在这个方案中所有纹理像素地址的范围都在0.0到1.0之间,包括0.0和1.0。Direct3D程序用U、V的值来声明纹理坐标,它和用x、y坐标来声明二维迪卡尔坐标系一样。

5:凹凸纹理原理:是使用了法线贴图,使用一张纹理来修改模型表面的法线。从而改变模型表面的细节,但不会改变模型顶 点的位置。要先把图片的类型选择为normal map,然后在材质球中的Shader下选择Bumped Diffuse选项表示法线材质球,感觉就是两个材质球叠加。想返回到texture材质就选择这个就行了。法线贴图可以做那种比较粗糙的地面贴图,用二维的贴图可以制造三维的假象,提高游戏运行速度。

要给图中左边的像素确定一定的颜色。像素四个角的地址被映射到对象空间中的图元上,这时,像素的形状会有一些变形,这是由图元的形状和观察的角度造成的。然后,与像素角相对应的图元表面上的几个角被映射到纹理空间中。这一映射过程再次使像素的形状产生变形。像素最终的颜色值就由该像素映射到的区域中的纹理像素计算而得。在设置纹理过滤方法时,要决定Direct3D使用什么方法来得到像素的颜色。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引