Esfog_UnityShader教程_前言
很多人在学习Unity的时候对Shader都是一知半解,作为刚入职半年的新人接触Shader的时间也并不长,正因为是新人才能体会到学习Shader时候所遇到的困难和迷茫,无奈于资料不好找,网上难得的几篇教程讲的又不够完善或者太浅太短,所以我一直以来就想写一系列UnityShader的学习教程,现在终于快过年公司放假了, 抽空准备开始着手写这个系列的教程了,在Unity这个圈子里我还是一只很菜很菜的菜鸟,感谢这半年来一路上帮助过我的人,书,以及在网上无私奉献宝贵知识的前辈们,仅以此系列向他们致敬.
这个系列的教程会不定期的更新,由于笔者工作繁忙,有时可能会一段时间不更新,还望各位谅解,本人才疏学浅,可能在大神们面前班门弄斧了,写这系列教程一来是想帮助那些准备接触Shader却不知如何入门的同学们分享自己的经验,二来是借由自己写教程来锻炼自己写技术文章的文笔和巩固自己学习的知识,查缺补漏,只有你能把你学到的知识透彻的讲给别人听的时候,你才完全掌握了它.由于我接触Unity时间并不长,接触Shader时间更短,难免会有所纰漏和错误,还望各位看官不吝赐教,批评指正.
前言
前言部分主要是讲述一下个人对学习UnityShader的一些建议,以及描述一下图形渲染的大概模型和UnityShader的工作方式.
首先要说明一点,要想学好Shader而不只是停留在会用几个简单语法的层面,那你就一定不可避免的需要接触数学,主要是线性代数,深入研究可能会用到微积分和空间几何,要做好心理准备,总之要学习Shader不难,但要想学好,你真的要花一番功夫.再有一点就是编写Shader来说目前只有一些有限功能的带代码提示的编辑器,还没有可以调试的工具,一旦Shader出错Unity给出的提示经常是非常不明确的,这时候你只能耐心的一行行分析了.
先说明的一下什么是Shader,Shader一般被翻译为"着色器",他并不是指某一种具体语言,他是一种技术,可以让程序员去通过编写代码去参与到GPU渲染图形的具体流程中去,去制作一些精美的特效和动画甚至是让模型发生奇怪的形变,简单点就是可以把它理解成一种对呈现到屏幕上画面的一种美化工具,想一想是不是很酷,你竟然可以去参与显卡的工作.以前写一辈子Hello world一直和CPU打交道.
而编写Shader目前比较知名的是基于DirectX的HLSL和基于OpenGL的GLSL,而我们Unity用的ShaderLab是基于Nvida和Microsoft一同开发的CG(C for Graphic)语言,从名字上我们就能知道,只是一门类C的语言,如果你接触过C语言或者C++,甚至是JAVA,C#那对他的基本语法一定不会陌生,CG语言他是跨平台的,他可以基于OpenGL也可以DirectX来运行,也就是说他是工作在DX和OpenGL上层的抽象语言,这三种语言在某些具体方面可能有性能和扩展性上的区别,但是对于背后的实质技术并无过大区别,我对GLSL和HLSL接触的不多,HLSL由于是基于DX的可能现在很多高端引擎都是用HLSL,GLSL的话优势可能在于跨平台吧.
好吧我们只要关注我们的CG就可以了,有兴趣的同学可以自己去了解一下另外两种语言,说明一下由于CG是Nvida和微软共同开发的,所以CG上的很多标准和HLSL是兼容的,学起来有很多互通的地方.Unity 使用的并不是完完全全的CG语言,如果你看官方的API你会发现他的Shader分为三大类:
在上面我简略的说了一下GPU渲染3D物体的大概流程,那我们的Shader是怎么参与进来的呢,开篇已经说过了,这个系列的文章只以Vertex and Fragment Shader来进行距离,这是Unity中最复杂和最强大的Shader,另外两种大家自己跟着官方文档了解一下吧.
Esfog_UnityShader教程_前言的更多相关文章
- Esfog_UnityShader教程_镜面反射SpecularReflection
系列教程第四篇,本来打算昨天写的,有些小偷懒就今天写了,这一期我们来讨论一下关于镜面反射的基本原理和具体代码.这一篇是承接着上一篇<Esfog_UnityShader教程_漫反射DiffuseR ...
- Esfog_UnityShader教程_漫反射DiffuseReflection
这篇是系列教程的第三篇,最近工作比较紧,所以这个周六周日就自觉去加了刚回来就打开电脑补上这篇,这个系列的教程我会尽量至少保证一周写一篇的.如果大家看过我的上一篇教程<Esfog_UnitySha ...
- Esfog_UnityShader教程_遮挡描边(实现篇)
在上一篇中,我们基本上说明了遮挡描边实现的一种基本原理.这一篇中我们将了解一下基于这种原理的具体实现代码.本篇中的内容和前几篇教程相比,相对比较难一些,建议先有一些基本的Unity的C#脚本编程经验 ...
- Esfog_UnityShader教程_遮挡描边(原理篇)
咳咳,有段时间没有更新了,最近有点懒!把不少精力都放在C++身上了.闲言少叙,今天要讲的可和之前的几篇有所不同了,这次是一个次综合应用.这篇内容中与之前不同主要体现在下面几点上. 1.之前我们写的都是 ...
- Esfog_UnityShader教程_逐帧动画
有段日子没出这个系列的新文章了,今天就拿一个比较常见也比较基础的利用改变Shader来改变不断调整UV实现播放逐帧动画的小功能.很久没写了就当练练手了.在新版本的Unity中早就已经集成了Sprite ...
- Python笔记_第五篇_Python数据分析基础教程_前言
1. 前言: 本部分会讲解在Python环境下进行数值运算.以NumPy为核心,并讲解其他相关库的使用,诸如Matplotlib等绘图工具等. C.C++和Forttran等变成语言各有各的优势,但是 ...
- Esfog_UnityShader教程_溶解效果Dissolve
溶解效果在游戏中是很常见的,比如在一些神话或者魔法世界中,一些NPC角色在剧情需要时候会身体会渐渐的消失掉.甚至有一些更炫的,比如用火焰喷射器把目标燃尽.这些都可以用到溶解效果.这篇文章主要是讲解一下 ...
- Spring_MVC_教程_快速入门_深入分析
Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门 资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf Spring ...
- C#读写文件的方法汇总_C#教程_脚本之家
C#读写文件的方法汇总_C#教程_脚本之家 http://www.jb51.net/article/34936.htm
随机推荐
- AIX用chsec命令修改快捷修改配置文件
前言 AIX的所有配置设置通过一个命令来进行更改配置文件中的键-值对,以达到修改配置的目的.如:group/user/limits/passwd等等 命令格式 chsec [-f file] [-s ...
- <随便写写>
# Markdown用法 整理
- MySQL开启general_log跟踪sql执行记录
# 设置general log保存路径 # 注意在Linux中只能设置到 /tmp 或 /var 文件夹下,设置其他路径出错 # 需要root用户才有访问此文件的权限 mysql>set glo ...
- 新冲刺Sprint3(第五天)
一.Sprint介绍 实现商品.服务信息存入数据库,实现商品图片传输(服务器传输),点击商品.服务进入商品.商品详情.商品.服务按此标准建立数据库. 二.Sprint周期 看板: 燃尽图:
- Document树的解析方法
一.本次总结用到的xml文本 1. <?xml version="1.0" encoding="UTF-8" standalone="no ...
- VMware卸载出现“the msi failed”解决办法
最近被VMware卸载搞烦死掉,最后通过这个帖子解决. http://www.cnblogs.com/noble/p/4144267.html 总结:有啥软件使用问题最好找官方的FAQ找答案,不然百度 ...
- 转载《Android-TabHost 选项卡功能用法详解》
一. TabHost介绍 TabHost组件可以在界面中存放多个选项卡, 很多软件都使用了改组件进行设计; 1. TabHost常用组件 TabWidget : 该组件就是TabHost标签页中上部 ...
- 9本java程序员必读的书(附下载地址)
本文列出的9本书在Java程序员界都是被认为很棒的书.当一个程序员开始初学Java时,他的第一个问题应该是如何选择一本书来作为指导学习Java.这个问题也就表明,相对于其他的教程和博客,Java书籍还 ...
- 素数方阵的工程ing
2016 12 12 16 12 开始 2016 12 13 17 30 还没开打 2017 1 3 ..... 一星期前貌似打完了... 如下 #include<iostream> ...
- Android 的 DatePicker、TimePicker或NumberPicker
布局文件加上这个就可以,去除日期选择器.时间选择器或数值选择器的可编辑状态. android:descendantFocusability="blocksDescendants" ...