📜  Unity-材质和着色器(1)

📅  最后修改于: 2023-12-03 14:48:13.109000             🧑  作者: Mango

Unity-材质和着色器

Unity中的材质和着色器是创建游戏场景和角色的关键元素之一。在本文中,我们将介绍Unity中材质和着色器的基本概念和使用方法。

什么是材质?

材质是应用于物体表面的属性集,包括颜色、纹理和特殊效果等。材质是从向量(vector)或纹理(texture)中创建的,它们都有颜色属性。

在Unity中,一个材质被定义为一个具有属性的脚本。它可以被应用于任何物体上,包括3D模型,地形和粒子系统。

什么是着色器?

着色器是在材质中应用的程序,它控制渲染的方式。它可以更改物体的颜色、纹理、反射和透视等属性,使其看起来更真实。

在Unity中,着色器是有代码写成的。它们被编译成GPU可以理解的形式,并且包含具体的指令,以定义物体的表现方式。

如何创建材质?

在Unity中创建材质非常容易,只需右键单击“Assets”窗口,选择“Create”和“Material”即可创建一个新的材质对象。

create_material

然后,你可以在“Inspector”窗口中编辑材质的属性。你可以更改材质的颜色、纹理、反射和透视等属性,以满足你的需求。

edit_material

如何创建着色器?

Unity中创建着色器需要一定的编程知识。你需要了解一些基本的着色器语言和渲染管道的知识,才能写出优秀的着色器程序。

Unity使用支持Cg和HLSL语言的着色器。你可以使用任何一种编程语言,只要你知道如何使用它。

下面是一个简单的Unity着色器示例,可以在“Inspector”窗口中将其应用于材质。

Shader "Custom/MyShader" {
    Properties {
        _Color ("Color", Color) = (1, 1, 1, 1)
        // 可以添加其他的属性
    }
         
    SubShader {
        Tags {"Queue"="Transparent" "RenderType"="Transparent"}
        Pass {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
             
            struct appdata {
                float4 vertex : POSITION;
            };
             
            struct v2f {
                float4 vertex : SV_POSITION;
                float4 color : COLOR;
            };
             
            float4 _Color;
             
            v2f vert (appdata v) {
                v2f o;
             
                // 这里的操作会影响顶点在屏幕上的位置
             
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.color = _Color;
             
                return o;
            }
             
            fixed4 frag (v2f i) : SV_Target {
                return i.color;
            }
             
            ENDCG
        }
    }
    FallBack "Diffuse" // 如果这个shader不能在当前平台上编译,就会使用"Fallback" shader
}

这个着色器只会将物体的颜色设置为你在“Color”属性中指定的颜色。如果你想添加其他的属性,需要编辑着色器代码。

总结

材质和着色器是Unity中创建游戏场景和角色的关键元素之一。材质定义了物体的外观,而着色器则决定了物体的渲染方式。

在本文中,我们介绍了如何创建材质和着色器,以及如何编辑它们的属性。如果你想深入了解Unity材质和着色器的知识,可以参考Unity官方文档或其他相关教程。