【Unity Shader】二、顶点函数(vertex)和片元函数(fragment)传递数据,及各阶段可使用的语义(semantic)
学习资料:http://www.sikiedu.com/course/37/task/433/show
本节学习目标:
- 学习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, ); // 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 颜色值,显示到屏幕上的颜色
【Unity Shader】二、顶点函数(vertex)和片元函数(fragment)传递数据,及各阶段可使用的语义(semantic)的更多相关文章
- [Unity Shader] 逐顶点光照和逐片元漫反射光照
		书中的6.4节讲的是漫反射的逐顶点光照和逐片元光照. 前一种算法是根据漫反射公式计算顶点颜色(顶点着色器),对颜色插值(光栅化过程)返回每个像素的颜色值(片元着色器). 第二种算法是获得顶点的法线(顶 ... 
- 【Unity Shader】一、顶点函数(vertex)和片元函数(fragment)
		学习资料:http://www.sikiedu.com/course/37/task/430/show 学习Shader中顶点函数(vertex)和片元函数(fragment)的基本用法. Shade ... 
- 【Unity Shader】(三) ------ 光照模型原理及漫反射和高光反射的实现
		[Unity Shader](三) ---------------- 光照模型原理及漫反射和高光反射的实现 [Unity Shader](四) ------ 纹理之法线纹理.单张纹理及遮罩纹理的实现 ... 
- Unity Shader入门精要学习笔记 - 第3章 Unity Shader 基础
		来源作者:candycat http://blog.csdn.net/candycat1992/article/ 概述 总体来说,在Unity中我们需要配合使用材质和Unity Shader才能达 ... 
- unity shader入门(二)语义,结构体,逐顶点光照
		下为一个逐顶点漫反射光照shader Shader "study/Chapter6/vertexShader"{ Properties{_Diffuse("Diffuse ... 
- Unity Shader 知识点总结(二)
		紧接着上一篇文章的shader入门知识的总结,本文主要总结shader中的纹理贴图.透明度混合.顶点动画.后期特效处理等操作.如果有什么地方有错,请指出更正,谢谢.本文的代码主要来自开源书:unity ... 
- 【Unity Shader】---常用帮助函数、结构体和全局变量
		[Unity Shader]---常用帮助函数.结构体和全局变量 一.内置包含文件 Unity中有类似于C++的包含文件.cginc,在编写Shader时我们可以使用#include指令把这些文件包含 ... 
- Vertex And Fragment Shader(顶点和片段着色器)
		Vertex And Fragment Shader(顶点和片段着色器) Shader "Unlit/ Vertex_And_Fragment_Shader " { Proper ... 
- Unity Shader (四)顶点程序示例
		1.在顶点函数中实现凸起效果 Shader "Custom/Example" { properties { _R(,))= //圆的半径,也是凸起的范围 _OX(,))= //x轴 ... 
随机推荐
- Android Framework中的线程Thread及它的threadLoop方法
			当初跟踪Camera的代码中的时候一直追到了HAL层,而在Framework中的代码看见了许很多多的Thread.它们普遍的特点就是有一个threadLoop方法.依照字面的意思应该是这个线程能够循环 ... 
- nginx / apache / tomcat /resin等 http server的benchmark性能测试方法
			性能测试是软件产品发布前必经阶段,对于web app的发布需要使用http server,可选择的优秀免费http server主要有开源apache server, 俄国的nginx,专用于java ... 
- springcloud中服务组策与发现eureka
			1 Eureka 是什么 Eureka是netflix的一个子模块,只需要使用服务的标志符,就可以访问到服务,而不需要修改服务调用的配置文件.功能类似于Dubbo的注册中心,比如Zookeeper. ... 
- 最简单的一个java驱动jdbc链接mysql数据库
			导入jar包:mysql.connector-java-5.0.8-bin.jar String driver = "com.mysql.jdbc.Driver"; String ... 
- ubuntu 14.04安装mysql数据库
			1. apt-get install mysql-server mysql-client 输入root的密码: 确认root的密码: 2. 连接测试是否成功:mysql –hlocalhost –ur ... 
- Processing支持中文显示
			Processing 默认不支持中文,中文显示成框框,我使用的版本是:2.2.1,进行如下设置,并且重启processing就可以支持中文了: 可以看到中文了: 
- 《Java Concurrency》读书笔记,构建线程安全应用程序
			1. 什么是线程安全性 调用一个函数(假设该函数是正确的)操作某对象常常会使该对象暂时陷入不可用的状态(通常称为不稳定状态),等到操作完全结束,该对象才会重新回到完全可用的状态.如果其他线程企图访问一 ... 
- Atitit  undac网络设备管理法案 (路由器 交换机等)    法案编号USRr101510
			Atitit undac网络设备管理法案 (路由器 交换机等) 法案编号USRr101510 1.1. 版本历史1 1.2. 密码设置规范 与原则1 1.3. 如何设置密码 ,设置一个简单又安 ... 
- 深入理解Linux内核-定时测量
			定时测量:由基于固定频率振荡器和计数器的几个硬件电路完成的. 记时体系概貌: 内核中与时间相关的任务: 硬件设备: 实时时钟(RTC):1.Real Time Clock ,独立于CPU和所有芯片,每 ... 
- PxCook(像素大厨)
			PxCook(像素大厨)是一款切图设计工具软件.自2.0.0版本开始,支持PSD文件的文字,颜色,距离自动智能识别. 优点在于将标注.切图这两项设计完稿后集成在一个软件内完成,支持Windows和Ma ... 
