当前位置: 首页 > article >正文

unity中的材质(material)贴图(texture)着色器(shader)介绍

@TOC

在unity中,材质(material)、贴图(texture)和着色器(shader)是构建和渲染3D对象外观的基本概念

材质(material)

  • 定义:材质是一个用于定义物体外观的资源,它将材质属性(如颜色、纹理、光泽度等)与某种着色器结合起来,影响模型在场景中的视觉效果
  • 主要组成部分:
    • shader:材质使用的着色器,决定了如何对材质进行渲染
    • color(颜色):包括主颜色,反射颜色等
    • textures(贴图):图像文件,用于添加细节,图案和色彩
    • properties(属性):不同的着色器可用的参数,控制材质的各种效果(如金属度,光泽度等)
  • 创建材质
    • 在project窗口中右键点击,选择create -> material
    • 命名新材质,并在inspector面板中设置属性
    • 或者通过代码设置:
// 1. 创建材质:使用代码动态创建和配置材质。
Material myMaterial = new Material(Shader.Find("Standard"));
myMaterial.color = Color.red;
myMaterial.SetTexture("_MainTex", myTexture);
// 2. 应用材质:将材质应用到游戏对象的 Renderer 组件上。
GameObject myGameObject = GameObject.Find("MyGameObject");
myGameObject.GetComponent<Renderer>().material = myMaterial;

贴图(texture)

  • 定义:贴图是用于给材质提供表面细节的图像文件,贴图可以影响表面细节,颜色和其他效果
  • 常见类型:
    • Diffuse/Diffuse texture(漫反射贴图):用于定义物体表面的基础色彩
    • Normal Map(法线贴图):用于模拟细微的表面细节和凹凸感,给物体增加深度感
    • Specular Map(高光贴图):控制表面高光的强度和颜色
    • Emisson Map(自发光贴图):让物体某些部分自行发光
    • Bump Map(凹凸图):用灰度图像表示表面的凹凸
  • 添加贴图:
    • 将贴图文件导入unity项目(拖拽到project窗口)
    • 选中你的材质,在inspector面板中找到对应的属性(如Albedo,normal map等)
    • 将贴图文件拖到材质的相应属性槽中
    • 也可通过代码添加
// 1. 导入贴图:通过代码加载贴图资源。
Texture2D myTexture = Resources.Load<Texture2D>("Textures/MyTexture");
// 2. 应用贴图:将贴图应用到材质的相应属性。
Material myMaterial = GetComponent<Renderer>().material;
myMaterial.SetTexture("_MainTex", myTexture);

着色器(shader)

  • 定义:着色器是用来处理材质如何被渲染的程序代码,决定了最终的视觉效果,用于描述物体在光照和相机视角下的外观
  • 类型:
    • surface shader:比较简单,适合大多数情况,适合处理光照效果
    • vertex shader:处理顶点的变换,常用于自定义物体的形状和姿态
    • Fragment shader:处理像素级别的渲染计算,通常用于创建真实感的效果
    • UI shader:专门为UI组件设计的着色器
  • 使用和自定义着色器
    • 选择材质,在Inspector中找到shader下拉菜单,选择一个合适的着色器(如standard/unlit等)
    • 自定义着色器:
      • 右键点击project窗口,选择create -> shader选择类型(如standard surface shader)
      • 打开创建的shader文件,编辑代码,定义自定义的渲染效果
      • 将自定义着色器应用于一个材质上,使其可以使用

代码动态创建和设置材质 综合示例

public class MaterialSetup : MonoBehaviour
{
    public Texture2D mainTexture;
    public Texture2D normalMap;
    public Color albedoColor = Color.white;
    public float metallic = 0.5f;
    public float smoothness = 0.5f;
    public Color emissionColor = Color.black;

    void Start()
    {
        // 创建材质
        Material myMaterial = new Material(Shader.Find("Standard"));

        // 设置材质参数
        myMaterial.color = albedoColor;
        myMaterial.SetTexture("_MainTex", mainTexture);
        myMaterial.SetTexture("_BumpMap", normalMap);
        myMaterial.SetFloat("_Metallic", metallic);
        myMaterial.SetFloat("_Glossiness", smoothness);
        myMaterial.SetColor("_EmissionColor", emissionColor);

        // 应用材质
        GetComponent<Renderer>().material = myMaterial;
    }
}

http://www.kler.cn/a/371557.html

相关文章:

  • ElementUI el-table 多选以及点击某一行的任意位置就勾选上
  • [mysql]相关子查询
  • 网络编程_day6
  • Qt/C++ 调用迅雷开放下载引擎(ThunderOpenSDK)下载数据资源
  • Java封装练习——属性私有化
  • Spring i18n国际化
  • C++设计模式创建型模式———生成器模式
  • 【jvm】什么是TLAB
  • Ubuntu 22.04系统启动时自动运行ROS2节点
  • 【机器学习】Softmax 函数
  • GraphQL系列 - 第1讲 GraphQL语法入门
  • 计算机毕业设计——ssm基于HTML5的互动游戏新闻网站的设计与实现录像演示2021
  • R_机器学习——常用函数方法汇总
  • Java进阶篇设计模式之四 -----适配器模式和桥接模式
  • 会议录音转文字怎么转?有这6款视频语音转文字工具就够了!
  • 微信小程序时间弹窗——年月日时分
  • G2 基于生成对抗网络(GAN)人脸图像生成
  • Pytorch学习--神经网络--非线性激活
  • 【Unity基础】初识UI Toolkit - 运行时UI
  • 【项目复现】——DDoS-SDN Detection Project
  • Nginx + Lua + Redis:打造智能 IP 黑名单系统
  • 「Mac畅玩鸿蒙与硬件14」鸿蒙UI组件篇4 - Toggle 和 Checkbox 组件
  • Conditional DETR论文笔记
  • Java基础(4)之正则,异常与文件IO流
  • KAN原作论文github阅读(readme)
  • 深度解读GaussDB逻辑解码技术原理