# 材质系统

几何描述了物体的形状,材质描述物体的外观(颜色、光照)。ARS提供了多种材质,可以满足多种情况下的使用。

Mateiarls

TIP

材质实例过多会导致程序效率降低。建议尽可能重用材质。比如相同颜色的模型,使用相同的材质实例。

# 简单材质

基本材质可以用来显示点、线、或者不受光照影响的面。


var material = BasicMaterial.Create("red");
material.SetColor(new Vector3(1,0,0));

1
2
3
4

# 面材质

Phong光照模型计算量比较简单,是比较传统的光照模型。 以下是根据经验值可以设置的参数来模拟不同的材质。

Name Ambient Diffuse Specular Shininess
emerald 0.0215 0.1745 0.0215 0.07568 0.61424 0.07568 0.633 0.727811 0.633 0.6
jade 0.135 0.2225 0.1575 0.54 0.89 0.63 0.316228 0.316228 0.316228 0.1
obsidian 0.05375 0.05 0.06625 0.18275 0.17 0.22525 0.332741 0.328634 0.346435 0.3
pearl 0.25 0.20725 0.20725 1 0.829 0.829 0.296648 0.296648 0.296648 0.088
ruby 0.1745 0.01175 0.01175 0.61424 0.04136 0.04136 0.727811 0.626959 0.626959 0.6
turquoise 0.1 0.18725 0.1745 0.396 0.74151 0.69102 0.297254 0.30829 0.306678 0.1
brass 0.329412 0.223529 0.027451 0.780392 0.568627 0. 0.992157 0.941176 0.807843 0.21794872
bronze 0.2125 0.1275 0.054 0.714 0.4284 0.18144 0.393548 0.271906 0.166721 0.2
chrome 0.25 0.25 0.25 0.4 0.4 0.4 0.774597 0.774597 0.774597 0.6
copper 0.19125 0.0735 0.0225 0.7038 0.27048 0.0828 0.256777 0.137622 0.086014 0.1
gold 0.24725 0.1995 0.0745 0.75164 0.60648 0.22648 0.628281 0.555802 0.366065 0.4
silver 0.19225 0.19225 0.19225 0.50754 0.50754 0.50754 0.508273 0.508273 0.508273 0.4
black plastic 0.0 0.0 0.0 0.01 0.01 0.01 0.50 0.50 0.50 .25
cyan plastic 0.0 0.1 0.06 0.0 0.50980392 0.50980392 0.50196078 0.50196078 0.50196078 .25
green plastic 0.0 0.0 0.0 0.1 0.35 0.1 0.45 0.55 0.45 .25
red plastic 0.0 0.0 0.0 0.5 0.0 0.0 0.7 0.6 0.6 .25
white plastic 0.0 0.0 0.0 0.55 0.55 0.55 0.70 0.70 0.70 .25
yellow plastic 0.0 0.0 0.0 0.5 0.5 0.0 0.60 0.60 0.50 .25
black rubber 0.02 0.02 0.02 0.01 0.01 0.01 0.4 0.4 0.4 .078125
cyan rubber 0.0 0.05 0.05 0.4 0.5 0.5 0.04 0.7 0.7 .078125
green rubber 0.0 0.05 0.0 0.4 0.5 0.4 0.04 0.7 0.04 .078125
red rubber 0.05 0.0 0.0 0.5 0.4 0.4 0.7 0.04 0.04 .078125
white rubber 0.05 0.05 0.05 0.5 0.5 0.5 0.7 0.7 0.7 .078125
yellow rubber 0.05 0.05 0.0 0.5 0.5 0.4 0.7 0.7 0.04 .078125

Standard采用基于物理光照(PBR)的渲染模型,是目前流行的材质。可以通过Roughness参数来设置物体表面的粗糙度,使用metalness来设置金属度。

# 线材质

基本曲线颜色、线宽使用BasicMaterial就可以描述。若需要点画线则需要使用LineDashedMaterial来描述。

# 点材质

  • PointsMaterial PointsMaterial用来描述点的样式,点的形状可以使用图片来描述
            var material = PointsMaterial.Create("points-material");
            material.SetSizeAttenuation(false);
            material.SetPointSize(15.0f);
            material.SetColorMap(ImageTexture2D.Create(GetResourcePath("textures/snowflake7_alpha.png")));
            material.SetTransparent(true);

1
2
3
4
5
6

查看完整代码 PointsMaterial

# 特殊材质

  • FontMaterial
            var fontMaterial = FontMaterial.Create("font-texture-1");
            fontMaterial.SetFaceSide(EnumFaceSide.DoubleSide);
            fontMaterial.SetColor(new Vector3(1, 1, 0));
            fontMaterial.SetBackground(new Vector3(0, 0, 1));
            fontMaterial.SetBillboard(true);

            var dim = fontMaterial.SetText("Hello 世界!", 128);
            var shape = GeometryBuilder.CreatePlane(dim.x * 0.1f, dim.y*0.1f);

            var node = new PrimitiveSceneNode(shape, fontMaterial);
            node.SetPickable(false);

            render.ShowSceneNode(node);
1
2
3
4
5
6
7
8
9
10
11
12
13

FontMaterial

# 自定义材质

所有的材质都是基于Shader机制实现,用户可以实现自己的光照模型和特效。

查看实例代码

特效

# 小结

ARS材质系统封装了复杂的Shader实现

Last Updated: 9/30/2020, 11:39:01 PM