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

news/2024/10/30 9:54:05/

@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.ppmy.cn/news/1543067.html

相关文章

为什么使用Node.js爬虫更优

在现代网络开发中&#xff0c;爬虫技术已成为开发者不可或缺的工具。 在比较Node.js和Python在爬虫工具内存使用方面&#xff0c;我们可以从几个关键点来进行分析&#xff1a; 1. 异步I/O和事件驱动模型 Node.js是基于事件驱动和非阻塞I/O模型的&#xff0c;这使得它在处理高…

倪师学习笔记-天纪-易经八卦

一、简介 卦代表事情&#xff0c;爻代表时机&#xff0c;三爻为一卦八卦对应的天相&#xff0c;六十四卦对应人间事 二、八卦性 1、乾 天父亲向下看&#xff0c;无所求&#xff0c;雄心万丈始终如一&#xff0c;贞&#xff0c;坚心&#xff0c;专心至刚&#xff0c;天威&am…

Apache Paimon主键表的一些最佳实践

今天我们说说Paimon主键表的一些使用上的注意事项。 一、主键表 主键表是Paimon的一种表类型。用户可以插入、更新或删除表中的记录。 说的直白点就是&#xff0c;允许你设置唯一主键&#xff0c;然后覆盖更新。 Bucket选择 无论分区表还是未分区表&#xff0c;Bucket都是最小的…

软件测试学习笔记丨Selenium多frame切换

本文转自测试人&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/22518 本文为霍格沃兹测试开发学社的学习经历分享&#xff0c;写出来分享给大家&#xff0c;希望有志同道合的小伙伴可以一起交流技术&#xff0c;一起进步~ 说明&#xff1a;本篇博客基于seleniu…

echarts属性之gird

grid 直角坐标系内绘图网格&#xff0c;单个 grid 内最多可以放置上下两个 X 轴&#xff0c;左右两个 Y 轴。可以在网格上绘制折线图&#xff0c;柱状图&#xff0c;散点图&#xff08;气泡图&#xff09;。 在 ECharts 2.x 里单个 echarts 实例中最多只能存在一个 grid 组件…

Mac开发环境配置- Shell/Homebrew/ruby

前言 从 macOS Catalina 开始&#xff0c;Mac 使用 zsh 作为默认登录 Shell 和交互式 Shell。当然你也可以修改默认Shell&#xff0c;但一般没这个必要。而实际开发中经常会遇到一些环境问题导致的报错&#xff0c;下面我们就讲一下一些常用库的环境配置以及原理。 一、Homeb…

【JavaEE初阶】网络原理—关于TCP协议值滑动窗口与流量控制,进来看看吧!!!

前言 &#x1f31f;&#x1f31f;本期讲解关于TCP协议的重要的机制“连接的建立和断开”~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1…

JavaEE-多线程初阶(1)

目录 1. 线程的概念 1.1 线程是是什么 1.2 为什么要有线程 1.3 线程和进程的区别 1.4 Java的线程和操作系统线程的关系 2. 第一个多线程程序 2.1 Hello Thread 2.2 使用jconsole观察线程 3. 创建线程 3.1 继承Thread类 3.2 实现Runnable接口 1. 线程的概念 1.1 线程…