介绍
这篇教程的第一部分展示了如何用无灯光模型(如下图)来渲染一部分的物体。还需要几件事才能完全实现在Astroneer中漂亮的风格。
切几何体
记载我们着色器中最简单的效果是停止绘制几何体的上半部分。关键字discard可以用来任意阻止一个像素被绘制到着色器中。我们用它来确保只有一个我们模型上顶部的边缘被绘制:
1
2
3
4
5
6
|
void surf (Input IN, inout SurfaceOutputStandard o) { if (IN.worldPos.y > _ConstructY + _ConstructGap) discard; ... } |
要记住,这可能会在集合形状中留下“洞”。你应该禁用面剔除,这样物体的背面也可以被绘制。
|
Cull Off 现在,最引人注目的是这个物体看起来是中空的。这不光是看起来:所有3D模型其实都是中空的。然而我们想做的是,这个物体给人错觉其实是实心的。只要把物体里面用同样的无灯光着色器来上色是很容易做到的。这个物体仍然是中空的,但是会被看做实心。 为了达到这一点,我们简单地给这个背对镜头的三角线。如果你对向量代数不熟悉,这个实现起来像一个复杂条件。在现实中,这个可以简单地用积点来完成。在两个向量之前的积表示他们是如何“对齐”。这个直接和他们的角度相关。当两个向量之间的积是负数时,说明他们之间的角度大于90度。我们可以用相机视角方向(viewDir在表面着色器)之间的积来测试我们的原始状态。如果是负数,说明这个三角不是面对镜头的。所以,我们能看到他的背面;我们用实体的颜色来渲染它。 |