# shader&&着色器

#### 什么是shader

3D世界物的显示与增加方式为步骤为：网格 > 材质 > 贴图

其中在材质步骤有诸多设置参数，其中一项重要选型为shader，既着色器，以告诉物体应该如何绘制，3D软件通常内置了很多shader，当内置shader无法满足我们要求的时候，需要自己实现shader

[![](https://iovhm.com/book/uploads/images/gallery/2024-09/scaled-1680-/qoKDrQIBYMLGUhC9-image-1725989324874.png)](https://iovhm.com/book/uploads/images/gallery/2024-09/qoKDrQIBYMLGUhC9-image-1725989324874.png)


为模型增加材质，通常可以：
  - 先创建材质，将材质拖放到物体上
  - 直接将贴图拖放到模型上，U3D将自动创建材质并关联

双击材质，既可以查看材质的相信情况


[![](https://iovhm.com/book/uploads/images/gallery/2024-09/scaled-1680-/GxPjRT8BPCtC8tUy-image-1725989510762.png)](https://iovhm.com/book/uploads/images/gallery/2024-09/GxPjRT8BPCtC8tUy-image-1725989510762.png)

当默认shader无法满足我们要求时，例如特殊，则我们需要自己定义shader

#### 创建shader

**create > shader graph > URP > lit shader graph**
- lit shader graph:光照模型
- unlit shader graph：无光照模型

双击新建的shader文件，则进入shader编辑窗口，保存shader后（不保存的在选择界面看不到），可以在材质的shader选项选择当前自定义shader

**shader > shader graphs > new-cus-shaper**

[![](https://iovhm.com/book/uploads/images/gallery/2024-09/scaled-1680-/85A82qTqFAHgNVrK-image-1725991539890.png)](https://iovhm.com/book/uploads/images/gallery/2024-09/85A82qTqFAHgNVrK-image-1725991539890.png)


#### 开始编辑自定义shader

shader的主要工作流程如下，其工作原理为，3D物体在计算机进行显示的时候，总是需要将物体转换为具体的颜色信息输入到显示卡，通过对一系列的参数进行计算后，最终改变主要影响物体的两个主要参数

- 顶点着色器
- **片元着色器**
  - 根据其连线结果来看，主要输入点都是颜色信息和贴图信息，这一类用的最多

[![](https://iovhm.com/book/uploads/images/gallery/2024-09/scaled-1680-/6LtZ50wSuUgc7o7B-image-1725992012845.png)](https://iovhm.com/book/uploads/images/gallery/2024-09/6LtZ50wSuUgc7o7B-image-1725992012845.png)

各面板情况

[![](https://iovhm.com/book/uploads/images/gallery/2024-09/scaled-1680-/qkadBm9SsO5vgafJ-image-1725992371665.png)](https://iovhm.com/book/uploads/images/gallery/2024-09/qkadBm9SsO5vgafJ-image-1725992371665.png)

- ①输入参数：此处的参数可以在外部进行设置，
- ②参数计算：对参数进行计算的逻辑，不同的参数需要增加不同的节点计算之后，才可以链接到下一个节点
- ③片元着色器：计算结果影响颜色，贴图
- ④定点着色器：
- ⑤属性设置：对节点、参数进行设置
- ⑥预览窗口：实时预览渲染结果

#### 常用技巧

- Texture2D贴图通常不能直接输入到片元着色器，需要增加**Sample Texture 2D** （贴图取样）
- 当需要同时设置贴图或者颜色、多个颜色混合，需要增加**Multiply**乘法计算器进行混合
- 边缘发光**Fresnel Effect**（菲涅耳）