当前位置: 首页 > 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.dtcms.com/a/276199.html

相关文章:

  • TCP套接字
  • 网络配置综合实验全攻略(对之前学习的总结)
  • 医学AI前沿论坛第6期|目前主流的医学AI基础模型有哪些?我们应该如何在有限的数据下构建高性能的基础模型?
  • 某某航空 (新版)同盾 blackbox 补环境
  • 迷宫可达性统计问题详解
  • 缓存三剑客解决方案
  • 基于YOLO11的垃圾分类AI模型训练实战
  • 计算机毕业设计ssm医院耗材管理系统 基于SSM框架的医疗物资供应链管理平台 医院低值易耗品信息化监管系统
  • 解决MySql8报错:Public Key Retrieval is not allowed
  • 六年级数学知识边界总结思考-上册
  • 苍穹外卖项目日记(day05)
  • JavaScript加强篇——第六章 定时器(延时函数)与JS执行机制
  • matplotlib:散点图
  • CCF CSP第一轮认证一本通
  • 【Fargo】发送一个rtp包的过程3:为什么媒体包发送端检测到扩展,接收端检测不到
  • Rail开发日志_7
  • 9.3 快速调用与标准调用
  • 串口连接工控机
  • Gameplay - 独立游戏Celeste的Player源码
  • 失败的面试经历二(ʘ̥∧ʘ̥)
  • 【赵渝强老师】国产数据库TiDB的代理路由:TiProxy
  • K3S滚动发布Jar
  • TCP详解——各标志位
  • 字母异位词分组
  • 闲庭信步使用图像验证平台加速FPGA的开发:第十一课——图像均值滤波的FPGA实现
  • 家用智能摄像机PRV文件删除的恢复方法
  • 牛客网50题
  • word转pdf、pdf转word在线工具分享
  • C#调用Matlab生成的DLL
  • C#枚举:从基础到高级的全方位解析