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

【TA/Unity】Shader基础结构

目录

  • 创建Shader
  • 基本结构
  • Properties
  • SubShader
  • 代码总览


创建Shader

右键资源浏览器,通过Create>Shader菜单创建Shader文件。

请添加图片描述


基本结构

Shader "Learn/Shader" {Properties {// ...}SubShader {Pass {CGPROGRAM// ...ENDCG}}
}

Properties

  Properties {_float("Float", Float) = 0.0  // 浮点数_Range("Range", Range(0.0, 1.0)) = 0.0  // _Vector("Vector", Vector) = (1, 1, 1)  // 向量_Color("Color", Color) = (0.5, 0.5, 0.5, 0.5) // 颜色_Texture("Texture", 2D) = "black"{} // 贴图}
  • 属性语法:【属性名称 (“显示名称”, 参数类型) = 默认值】

  • 在此声明变量后可以在材质球的细节面板中查看、编辑变量值。
    在这里插入图片描述

  • 使用时,还需要在Pass中声明相同类型、名称的变量。


SubShader

SubShader {Pass {CGPROGRAM#pragma vertex Vert#pragma fragment Fragfloat3 _Light_;float4 _Color_;struct Appdata {float4 Vertex : POSITION;float3 Normal : NORMAL;};struct V2F {float4 Vertex : SV_POSITION;float3 Normal : NORMAL;};V2F Vert(Appdata _data) {V2F v2f;float4 pos = mul(unity_MatrixMVP, _data.Vertex);v2f.Vertex = pos;v2f.Normal = _data.Normal;return v2f;}float4 Frag(V2F _v2f) : SV_Target {float4 color = dot(_v2f.Normal, _Light_) * _Color_;return color;}ENDCG}}
  • SubShader:可以有多个SubShader,显卡从第一个SubShader开始运行,如果一个SubShader无法运行完成,自动运行下一个SubShader。
  • Pass:Pass理解为一个GPU渲染管线。在这里完成:获取模型数据;顶点Shader;图元装配及光栅化;片段Shader;输出合并等工作。可以有多个Pass。
  • pragma vertex/fragment:指定顶点着色器、片段着色器函数名称,在后面的代码中声明这些函数,在其中编写顶点、片段着色器代码。
  • Properties中声明的变量,要在此再次声明才可以使用。
  • 定义结构体,主要是传递给顶点着色器的数据、以及顶点着色器传递给片段着色器的数据。
    • 属性语法:【属性类型 属性名称 : 特定语义词】。
  • 着色器函数:实现上文中指定的着色器。

代码总览

Shader "Learn/Shader" { // Shader名称Properties {// 属性语法:属性名称("显示名称", 参数类型) = 默认值// 使用时需要在Pass中声明相同类型、名称的变量_float("Float", Float) = 0.0  // 浮点数_Range("Range", Range(0.0, 1.0)) = 0.0  // _Vector("Vector", Vector) = (1, 1, 1)  // 向量_Color("Color", Color) = (0.5, 0.5, 0.5, 0.5) // 颜色_Texture("Texture", 2D) = "black"{} // 贴图}// SubShader可以有多个,显卡运行效果时从第一个SubShader开始//如果一个SubShader无法运行完成,自动运行下一个SubShaderSubShader {// Pass理解为一个GPU渲染管线// 在这里完成:获取模型数据;顶点Shader;图元装配及光栅化;片段Shader;输出合并等工作Pass {CGPROGRAM#pragma vertex Vert // 指定顶点Shader名称为vert#pragma fragment Frag // 指定片段Shader名称为frag// Properties中的变量float3 _Vector_;	float4 _Color_;// 输入数据的结构体struct Appdata {// 属性语法:属性类型 属性名称 : 特定语义词float4 Vertex : POSITION;float3 Normal : NORMAL;};// 顶点Shader传递给片段着色器的结构体struct V2F {float4 Vertex : SV_POSITION;float3 Normal : NORMAL;};// 顶点ShaderV2F Vert(Appdata _data) {V2F v2f;float4 pos = mul(unity_MatrixMVP, _data.Vertex);	// MVP矩阵变换v2f.Vertex = pos;v2f.Normal = _data.Normal;return v2f;}// 片段Shaderfloat4 Frag(V2F _v2f) : SV_Target { // 渲染的目标SV_Targetfloat4 color = dot(_v2f.Normal, _Light_) * _Color_;	// Lambert光照模型return color;}ENDCG}}
}

正春华枝俏,待秋实果茂,愿与君共勉

http://www.xdnf.cn/news/1110331.html

相关文章:

  • 强化学习、PPO和GRPO的通俗讲解
  • 创客匠人:解析创始人 IP 打造对知识变现的深层赋能
  • os.machine()详解
  • vue3 el-table动态表头
  • 菜鸟的C#学习(二)
  • TDengine 使用最佳实践(1)
  • hot100链表(1)
  • 工业软件出海的ERP-PLM-MES一体化解决方案
  • 自动化运维工具jenkins问题
  • AI 时代的分布式多模态数据处理实践:我的 ODPS 实践之旅、思考与展望
  • 单细胞分析教程 | (二)标准化、特征选择、降为、聚类及可视化
  • 牛客网50题
  • 第14次课 认识图 A
  • docker镜像原理与镜像制作优化
  • Classifier guidance与Classifier-free guidance的原理和公式推导
  • 【STM32实践篇】:最小系统组成
  • 深入详解:决策树在医学影像领域心脏疾病诊断的应用及实现细节
  • Pytest 跳过测试技巧:灵活控制哪些测试该跑、哪些该跳过
  • 图像扭曲增强处理流程
  • 物联网设备数据驱动3D模型的智能分析与预测系统
  • frp内网穿透教程及相关配置
  • 【Redis实战】Widnows本地模拟Redis集群的2种方法
  • Git 相关的常见面试题及参考答案
  • 国产电钢琴电子琴手卷钢琴对比选购指南
  • 2025年亚太杯(中文赛项)数学建模B题【疾病的预测与大数据分析】原创论文讲解(含完整python代码)
  • ESP32使用freertos更新lvgl控件内容
  • 搭建云手机教程
  • 聊下easyexcel导出
  • Java可变参数
  • 从基础加热到智能生态跨越:艾芬达用创新重构行业价值边界!