Godot Shader笔记:你的第一个3D Shader 第一部分(一)

原文地址:Docs » Shading » Your first shader » Your first Spatial shader

译者注:方便起见,将Spatial Shader意译为3D Shader

你打算开始写你的自定义3D Shader了?也许是因为你看到了网上用Shader做出来的炫酷的特效,也许是因为你发现SpatialMaterial (默认的3D材质)不能够满足你的需要。总之,你决定自己写一下Shader,那么你需要考虑一下从哪里开始。

这个教程将解释如何写一个3D Sahder并且将覆盖较之前2D Shader教程更多的知识点。

相较于2D Shader,3D Shader提供更多的内置功能。3D Shader的初衷就是让Godot提供常用的所有功能,用户只需要设置属性变量就可以了。这尤其是针对PBR(physically based rendering)工作流。

这个教程分为两个部分。第一个部分中,我们将在顶点函数中基于高度图(heightmap)的顶点置换完成一个简单的地形。第二个部分中,我们会以海洋的Shader为例,手把手教大家设置自定义材质。

注意: 这个教程需要一些前导知识比如数据类型(vec2,float,sampler2D)以及函数。如果你对这些概念有困难,建议你先阅读一下The Book of Shaders 再来完成这个教程

到哪里指定材质

在3D中,引擎使用Mesh(网格模型,后简称网格)来绘制对象。网格是一种资源类型,用于存储几何形状(对象的形状)以及材质(颜色以及对象与光如何作用),网格通常以表面(surface)为单位。一个网格可以有很多表面也可以只有一个表面。一般来说,我们会从诸如Blender的其它软件导入网格。但是Godot也提供了一些基础几何体(PrimitiveMesh),以供你在不借助其它软件的时候可以添加一些基础几何体。

你可以使用很多种类型的节点来绘制网格。最主要的是MeshInstance,当然你也可以使用Particles或者MultiMeshes(包含一个MultiMeshInstance)等。

一般来说,一个材质会关联网格中的一个指定的表面,但诸如MultiMeshInstance的一些节点允许你对于某些甚至全部表面重写材质。

如果你为一个表面或者网格本身设置了一个材质,那么共享这个网格的所有MeshInstance将共享这个材质。如果你想在多个MeshInstance间复用一个网格,但每个MeshInstance拥有不同的材质,那么你应该将材质设置在MeshInstance上。

在这个教程中,我们将把材质设置在网格本身,而不是利用MeshInstance去重写材质。

你可能感兴趣的:(Godot Shader笔记:你的第一个3D Shader 第一部分(一))