博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Unity Shader】二、顶点函数(vertex)和片元函数(fragment)传递数据,及各阶段可使用的语义(semantic)...
阅读量:7062 次
发布时间:2019-06-28

本文共 1584 字,大约阅读时间需要 5 分钟。

学习资料:


本节学习目标:

  • 学习Shader中结构体struct的使用。
  • 学习在片元函数(vertex)和顶点函数(fragment)之间传递数据。
  • 学习从应用程序传递到顶点函数(a2v)、从顶点函数传递到片元函数(v2f)、从片元函数传递回系统(f2a)时,各个阶段中可以使用的语义。
Shader "Custom/02" {    SubShader{        Pass {            CGPROGRAM#pragma vertex vert#pragma fragment frag            struct a2v // 命名表示从应用程序传递到顶点函数,application to vertex            {                float4 vertex : POSITION;    // 告诉Unity把模型空间下的顶点坐标填充给vertex属性                float3 normal : NORMAL;      // 告诉Unity把模型空间下的法线方向填充给normal属性                float4 texcoord : TEXCOORD0; // 告诉Unity把第一套纹理坐标填充给texcoord属性            };            struct v2f // 命名表示从顶点函数传递到片元函数,vertex to fragment            {                float4 position : SV_POSITION;                float3 temp : COLOR0; // 属性必须指定语义。该语意可以由用户自定义,一般用于存储颜色            };            // 计算顶点坐标从模型坐标系转换到裁剪面坐标系            v2f vert(a2v v)            {                v2f f;                f.position = mul(UNITY_MATRIX_MVP, v.vertex);                f.temp = v.normal;                return f; // 使用结构体struct就可以一次返回多个数据            }            // 计算每个像素点的颜色值            fixed4 frag(v2f f) : SV_Target             {                return fixed4(f.temp, 1); // f.temp是float3已经包含了三个数值            }            ENDCG        }            }    FallBack "Diffuse"}

最终显示的颜色值是每个像素点的法线方向的颜色值。参考右上角的世界坐标。

 


从应用程序传递到顶点函数(a2v)时,可以使用的语义:

  • POSITION 顶点坐标(模型空间)
  • NORMAL 法线(模型空间)
  • TANGENT 切线(模型空间)
  • TEXCOORD(0~n) 纹理坐标。x、y从0到1
  • COLOR 顶点颜色 

从顶点函数传递给片元函数(v2f)时,可以使用的语义:

  • SV_POSITION 顶点坐标(剪裁空间),一般是系统直接使用
  • COLOR0 可以传递一组值(4个)
  • COLOR1 可以传递一组值(4个)
  • TEXCOORD(0~7) 传递纹理坐标

从片元函数传递回系统(f2a)时,可以使用的语义:

  • SV_TARGET 颜色值,显示到屏幕上的颜色

 

转载地址:http://kpnll.baihongyu.com/

你可能感兴趣的文章
互联网领袖高峰对话实录:马云李彦宏等激烈碰撞
查看>>
EBS adpatch logfile : log, lgi
查看>>
一些可能没用过的调试窗口
查看>>
【原】ios下比较完美的单例模式,已验证
查看>>
C#软件设计——小话设计模式原则之:依赖倒置原则DIP
查看>>
ArcGIS Server 体系结构
查看>>
html编辑及JS脚本过滤(转载)
查看>>
linux mmap 内存映射【转】
查看>>
【bootstrap】modal模态框的几种打开方法+问题集锦
查看>>
C# 小测试(一):类成员初始化与构造函数执行的顺序
查看>>
HBase常识及HBbse适合什么场景
查看>>
ABP理论学习之SignalR集成
查看>>
Linux(CentOS)安装rar和unrar以及rar和unrar命令的使用
查看>>
Java虚拟机支持的最大内存限制
查看>>
java基本数据类型
查看>>
排序功能实现 jQuery实现排序 上移 下移
查看>>
sqlserver排序规则在全角与半角处理中的应用
查看>>
FFmpeg深入分析之零-基础
查看>>
java异常——RuntimeException和User Define Exception
查看>>
HTTP协议具体解释
查看>>