Wzy—Shader新手入门精讲(一)
因为我也是个Shader的新手入门着,其实感觉找到门还是挺麻烦的,所以本着自己感觉已经入门了的经验分享一下,如有不对,请指示:
首先可以把Shader看成一个标准的框架:我对新的那个不熟悉所以分享的是旧版的Shader写法;
框架结构:
一、首先从属性中先介绍各个属性的声明及类型:
拿第一个为例子
_Color("Color",Color)=(1,1,1,1) _Color和括号里的字符串“Color”是自己随意定义的名字_Color是在Shader内部用的名字;字符串是在Unity界面显示的名字(尽量统一方便外部获取);
=号后面是默认值;fiex4类型声明
_Vector("Vector",Vector)=(1,2,3,4) Float4类型声明
_Int("Int",Int)= 34234 Int类型声明
_Float("Float",Float) = 4.5 Float类型接收
_Range("Range",Range(1,11))=6 float类型声明
_2D("Texture",2D) ="red"{} Sampler2D声明
_Cube("Cube",Cube) ="white"{} samplerCUBE声明
_3D("Texure",3D) ="black"{} Sampler3D 声明
二、SubShader的Pass块外面没有东西了 至少入门是:
Pass块在需要时 需要一个标签:Tags{"LightMode"="ForwardBase" }
只有定义了正确的LightMode才能得到一些Unity的内置光照变量
其他的东西暂时还没用过;
#include"Lighting.cginc"
标注了包含unity的内置的文件,才可以使用unity内置的一些变量;
这两个导入可以使用
_LightColor0.RGB 第一个直射光的颜色 0一般只有一个直射光;
_WorldSpaceLightPos0.xyz; 第一个直射光的位置=对于每一个顶点的光的方向记得标准化:
UNITY_LIGHTMODEL_AMBIENT.rgb 获取Unity内置的光照模型的设置环境光;
_WorldSpaceCameraPos.xyz
然后是编译指示两个函数,这里我叫做声明抽象方法。。。
#pragma vertex vert 这个是顶点操作的方法体(所有的顶点操作尽量放在这里而且这个函数比下面的像素函数效率要高一些);
#pragma fragment frag 这个是片元函数;操作一些像素点的计算量比较大;计算光照反射的颜色渲染都在这里;
在顶点函数中是可以代替外面的Mesh顶点变形直接更改顶点位置的;(毕竟这里是GPU);
然后我还会定义两个结构体:一个是接收系统返回的各项数据;另一个用来把这些数据转换到片元函数中;
Struct a2v{}:注意这里需要加分号;结构体的命名虽然可以自己定义但是尽量保持这个因为有的一些宏设置会调用这个名字;
我先介绍一下需要从系统返回的数据类型:
float4 POSITION 顶点坐标
float3 NORMAL 模型空间下的法线方向
float4 TEXCOORD0~n 第一套纹理坐标
TANGENT 切线
COLOR 顶点颜色
Struct V2f{};上面同理;
我在介绍一下能传输变量的数据写法:
TEXCOORD0~7 传递纹理坐标
float4/float3 COLOR0 传递4个值或者3个值 (一组值)
float4/float3 COLOR1 传递4个值或者3个值
完善方法体内容自构:
既然已经声明了抽象方法就需要实现它:
v2f vert(a2v v){ v2f f;return f;F的内容需要全被赋值在这里函数里能调用V的系统数据 }
Void frag(v2f f):SV_Target(这个是必须写的是Float4的值为颜色值输出到平面的颜色){
}
然后按照最初的结构完善,然后直接就能运行了:
贴一段代码 现在应该都能看懂了 看不懂的全是规定写法的定义直接查就好了:
Wzy—Shader新手入门精讲(一)相关推荐
- matlab入门精讲 【官方资料精简而来,确保全面】
matlab入门精讲 learn_matlab_zh_CN.pdf Matlab快速入门[本文取于此书] matlab_3d_visualize_zh_CN.pdf ...
- 【学习OpenCV4】OpenCV入门精讲(C++/Python双语教学)
大家好,我在CSDN开的OpenCV课程已经开课了,入口如下: OpenCV入门精讲(C++/Python双语教学) 课程开始快一周了,收到了广大同学们的欢迎. (1)评分很高: (2)已经有50+同 ...
- python快速入门精讲_Python快速入门精讲
基础入门篇 第0章从零开始3 0.1克服编程恐惧3 0.2如何写出好程序4 0.3为什么选择Python5 0.4Python的发展和应用6 0.5一些建议8 0.6多平台搭建Python开发环境10 ...
- 面向对象C#初级入门精讲(1)C#开发入门-徐照兴-专题视频课程
面向对象C#初级入门精讲(1)C#开发入门-438人已学习 课程介绍 [教学理念] 1.把"需要工作的人"变成"工作需要的人" 2.创设&quo ...
- 面向对象C#初级入门精讲(2)C#语言基础-徐照兴-专题视频课程
面向对象C#初级入门精讲(2)C#语言基础-397人已学习 课程介绍 欢迎加入QQ群538724338提问,这样老师能及时看到并回复 [课程特色] 1.课程设计循序渐进.讲解细致.通俗 ...
- 视频教程-Python入门精讲视频,从入门到精通-Python
Python入门精讲视频,从入门到精通 10年Linux使用及管理经验,7年IT在线教育培训经验.拥有RHCA高级架构师及Openstack证书.精通Linux.Python.思科.C++.安全渗透等 ...
- 虚拟化VMware vSphere 6.7入门精讲-郭小冬-专题视频课程
虚拟化VMware vSphere 6.7入门精讲-70人已学习 课程介绍 本课程为虚拟化入门课程,讲师风格幽默风趣,浅显易懂,带领大家轻松进入虚拟化的世界. 课程收益 初步掌 ...
- Python 3.X 完全零基础入门精讲 全套视频教程
简介 零基础小白快速学程序员大爱语言――Python,易学易用易就业!!! 目标人群:熟悉电脑基本操作,编程零基础或已具备Python或其它编程语言的人群. 课程目标:绝对零基础Python3.x 入 ...
- python入门教程书-清华大学出版社-图书详情-《Python快速入门精讲》
在这本书的创作过程中,有过很多的构思,是精炼直接还是面面俱到,是道理连篇还是实用为主--经过深思熟虑,最终的呈现是: 涉及技术的地方,用简练的语言去介绍,希望读者能够用最短的时间了解一个新功能或者一个 ...
最新文章
- ASP.NET页面借助IFrame提交表单数据所遇到的问题
- 堆栈跟踪 堆栈跟踪_寻找缺少的堆栈跟踪
- 软件测试——0422作业
- Pytorch可视化工具 —— TensorBoard
- VC++ 只运行一个程序实例
- 读《About Face 4 交互设计精髓》22
- 代码安全之代码混淆及加固(Android)
- 学习单片机开发——浅尝点灯的快乐
- 服务器raid发生故障如何恢复数据?- raid5磁盘阵列数据恢复方法
- SaaS启动阶段增长指南(上)
- Because you loved me
- Vue项目生成二维码
- 春天来了,该播种了。久久荒芜的博客重新耕种起来
- 网络之mac地址和ip地址
- 掌握python和js_新华字典:掌_“掌”的意思,五笔,笔画,拼音,五行_HttpCN
- Python的学习(二十一)----Python的静态变量
- 联想 ThinkPad P53接耳机有声音而外放没声音
- 高级搜索:搜索指定网址
- 多图养眼!Partition,荷兰国旗问题与随机快排
- (开包即用,不用看代码!)借助Docker自动构建Java(Oracle)镜像
热门文章
- js滚动条事件监听addEventListener、removeEventListener不生效
- 百度Apollo(二):障碍物感知模块
- java输出windows系统日志_闲聊Windows系统日志
- 服务器怎么创建硬盘,超微主板怎么创建RAID磁盘阵列 服务器组建RAID0、RAID1图文教程...
- SQL查询的艺术学习笔记--数据插入操作
- 缘灭--HashMap系列之1.8put源码篇(三)
- jinjia理解 python模板使用
- 【零信任落地案例】山石网科南京市中医院云数据中心〃零 信任”建设项目成功案例
- Xcode10 出现 String file not found
- 网页或pc端收消息,空究竟是推还是拉?