Shader Graph9-世界空间、物体空间、相机空间、切线空间

一、World Space世界空间

在下用的Blender软件,新建了一个平面,中间的黄色小圆点表示的世界空间的原点,在世界空间的物体的位置,都是相对于这个原点来说的,红色箭头表示x轴,绿色箭头表示y轴,蓝色箭头表示z轴。世界空间的原点和三个方向都是一直不变的。

 

 二、Object Space物体空间

茶壶这个物体空间的原点是在茶壶底部,红色箭头表示x轴,绿色箭头表示y轴,蓝色箭头表示z轴。当我们移动旋转茶壶时,该茶壶空间相对于世界空间的位置和方向都会发生变化,但是相对壶盖来说,它并没有位置和角度的变换,因为它是相对于茶壶底部的原来来说的,有点像我们在地球上,地球是在公转和自转,但我们并没有感觉到一样。

下面左图使茶壶向上移动,右图茶壶进行了某些转动。

 三、Camera相机空间

 

 相机空间的原点是黄色小圆点,红色箭头表示x轴,绿色箭头表示y轴,蓝色箭头表示z轴。z轴的方向就是眼睛的朝向。

四、Tangent切线空间

这是放大的茶壶表面,每个顶点都有自己的切线空间,红色箭头表示x轴,绿色箭头表示y轴,蓝色箭头表示z轴,x轴为顶点法线,y和z为uv坐标。

补充一下,为什么要出现切线空间以及它解决了哪些问题?

切线空间是为了解决法线贴图形成的光线会产生Shading artifacts着色瑕疵,那么瑕疵有以下几种,第一种叫做banding,意思是在应该是光滑的区域中有明显的色带或条纹;第二种叫做shadow acne,意思是当阴影投射对象的位置的微小变化导致阴影看起来有噪声或有斑点时,就会发生这种情况;第三种叫做terminator artifacts,意思是当照明区域和未照明区域之间出现急剧过渡时会发生这种情况,以及当渲染引擎试图模拟光线在皮肤或蜡等半透明材料中散射的方式时会发生“次表面散射伪影”;

 

切线空间因为是针对每个点,所以与光照的计算更为精确,所以可以解决以上的问题。

五、打开UE,新建材质DemoSpace,双击打开。

Lerp节点是将苔藓与石头进行混合,达到现实中的效果。TransformVector的作用是将切线空间转为世界空间,Mask(B)的意思是让苔藓现实在最上面,并且越往上越密集。

如果你创建的项目是Thrid Person项目,那么在Textures中我们可以找到,这里我们使用了石头和苔藓两种材质4个文件。

石块的话我们可以使用项目中自带的。

 最终效果是,转动石头时候苔藓的位置一直是出现在最上面。

 这样在有些情况中,如果我们移动了石头,那么会出现奇怪的现象。所以如果我们想要苔藓在石头上不移动,那么我们只需要修改TransformVector的Destination为Local Space就可以了。

再来看一个例子,我们可以找一张这种图作为纹理图,然后使用我们下面的shader,不管我们怎么旋转物体,它都好像有光照一样,这种方式可以使用在移动设备上。

这里我们使用了TransformVector将世界空间转为了视图空间(摄像机空间)。

六、打开Unity,新建ShaderGraph,进入编辑界面。

这里注意一下在Unity中Transform要选择Object->World意思是由物体空间到世界空间。

 这里的Transform是从World到View,意思是由世界空间到相机空间。

猜你喜欢

转载自blog.csdn.net/zhuziying99/article/details/130055397