Shader Lab 是shader language的抽象,只能在unity中使用.

语义syntax是其基本结构,{}内的内容。

Shader "ShaderName"//shader的名字以及在材质面板的显示{
//材质和shader的沟通
Properties
{//NameInShader("NameInMaterial",Propertype) = DefaultValue;//Properties只有一下几种,声明方式固定// Numbers and Sliders_Int ("Int", Int) = 2_Float ("Float", Float) = 1.5_Range("Range", Range(0.0, 5.0)) = 3.0// Colors and Vectors_Color ("Color", Color) = (1,1,1,1)_Vector ("Vector", Vector) = (2, 3, 6, 1)// Textures_2D ("2D", 2D) = "" {}_Cube ("Cube", Cube) = "white" {}_3D ("3D", 3D) = "black" {}
}//最重要的模块,包含至少一个subshader,unity扫描所有subshader找到第一个能在目标平台使用的shader,没有就使用Fallback。
SubShader
{//RenderSetup//Cull,Ztest,ZWrite,Blend//Tags{"TagName1 = "Value1"}//SubShade的Tags是一组键值对//Queue队列,RenderType渲染类别,DisableBatching关闭批处理//ForceNoShadowCasting关闭阴影,IgnoreProjector无视投影(用于透明物体)//CanUseSpriteAtlas,PreviewType材质框中预览模型,可以是"Plane""Sphere"//一个Pass是一个完整渲染流程,Pass过多影响性能。Pass{}
}SubShader
{//真正的Shader代码//表面着色器Surface Shader//顶点片元着色器//固定函数着色器
}
//最后一道防线,如果以上SubShader都不能用就只能用最低级的。不写就是不管了
Fallback "VertexLit"
}

表面着色器Surface Shader

这是Unity独创的shader类型,本质上还是顶点片元着色器,在其基础上进行抽象。

代码量少,Unity处理了许多细节。

SubShader
{Tags{"RenderType" = "Opaque"}CGPROGRAM#Pragma surface surf Lambertstruct Input{float4 color : COLOR;};void surf(Input IN, inout SurfaceOutput o){o.Albedo = 1;}ENDCG
}

Surface Shader中的语义块在CGPROGRAM和ENDCG之间,而不是Pass。CGPROGRAM和ENDCG之间使用CG/HLSL。

顶点片元着色器Vertex/Fragment Shader

SubShader
{Pass{CGPROGRAM#pragma vertex vert;#pragma fargment frag;float4 vert(float4 v : POSITION) : SV_POSITION{return mul (UNITY_MATRIX_MVP,v);}fixed4 frag() : SV_Target{return fixed4(1,0,0,1);}ENDCG}
}

Pass{}中实现。CGPROGRAM和ENDCG之间使用CG/HLSL。灵活性更高。

固定函数Fixed Function Shader

时代眼泪,不写了。

冯乐乐之三,SHADERLAB入门相关推荐

  1. 冯乐乐 unity_Unity常用矩阵运算的推导补遗——切线空间

    在上一篇文章中,我写了一些关于Unity中各个坐标空间及其转换矩阵是如何得到的,说实在的,我是那种"记忆需要依靠外部装置存储"类.如同<攻壳机动队>的电子脑一样的人,每 ...

  2. Unity图形学之ShaderLab入门基础

    文章来源: 学习通http://www.bdgxy.com/ 普学网http://www.boxinghulanban.cn/ 智学网http://www.jaxp.net/ 表格制作excel教程h ...

  3. Redis入门指南之三(入门)

    本节主要介绍Redis的5种数据类型,同时使用Python API来操作Redis,其中python版本为3.5, redis版本为4.0.2. redis-py 的API的使用可以分类为: (1)连 ...

  4. unity Shader Lab(cg hlsl glsl)着色器入门教程 以及 vs2019 支持unity shader语法(更新中2019.9.5)

    前言: 如果你对cg glsl hlsl 顶点着色器 片段着色器 表面着色器 固定渲染管线 等等有所疑惑,或是想学会unity的渲染,看这一篇就足够了.另外我博客的shader分类中还有很多shade ...

  5. 游戏框架 核心科技与面试精粹 (樊松阳 著)

    第一部分 架构与封装 第1章 UI交互 (已看) 第2章 玩法底层 (已看) 第3章 辅助系统 第二部分 艺术资源 第4章 资源分类 第5章 后处理效果 第6章 资源工作流 第三部分 底层核心 第7章 ...

  6. 3D美术人员Technical Artist(TA技术美术)的学习之旅(2)

    接着之前的内容,第一章我说过了(什么是TA;为什么需要TA;TA需要做什么),相信各位也对TA有了一定浅层次的了解. 但是肯定也有很多人会觉得很困惑,那么你说了这么多,那我们该怎么做呢? 对于这个问题 ...

  7. 百人计划学习 图形 2.1 色彩空间介绍

    这是个人学习笔记,有错欢迎指出 学习链接: 冯乐乐 <UnityShader入门精要> [技术美术百人计划]图形 2.1 色彩空间介绍 色彩发射器 色彩认知:光源是出生点,光源发射出光线, ...

  8. 3D美术人员Technical Artist(TA技术美术)的学习之旅(4)

    上一篇文章我讲了渲染管线以及我觉得美术应该有疑问的程序语法的书写格式.接下来我会根据我理解的冯乐乐老师Shader入门精要去说说Shader的基本语法结构有哪些(这里针对的是Unity3d的Shand ...

  9. unity学习进阶之美

    游戏程序员学习之路 https://miloyip.github.io/game-programmer/game-programmer-zh-cn.svg 网站推荐 github: 程序猿没听过这个就 ...

  10. 如何从一个美术变成程序员?

    我写代码也有五六年了,你们可能想不到,我之前是做美术的,而且是动画的,大学也是艺术设计学院的动画系的,然后做了一年的flash动画后面才转的编程!相信我这种菜鸟都能学,大家应该都没啥问题吧!这里我就讲 ...

最新文章

  1. c语言通讯录文件存储位置,c语言实现通讯录(存入文件)
  2. gitlab不小心把sign-in取消了怎么恢复
  3. template might not exist or might not be accessible by any of the configured
  4. XML 文档四种解析放式
  5. 计算机离散数学及其应用
  6. faststone capture怎么滚动截图?faststone capture怎么录屏?
  7. wps+for+linux+字体大小,WPS for Linux(ubuntu)字体配置(字体缺失解决办法)
  8. JXT查询数据库导入到Execl
  9. 2017存钱计划(python实现)
  10. Iterative closest point (ICP) 算法
  11. 环信java,java集成环信 - IM Geek开发者社区-移动开发者社区-开源社区-IM Geek官网...
  12. ArcGIS矢量化——半自动矢量化操作
  13. 1093:计算多项式的值
  14. 移动应用如何利用社交平台获取流量
  15. AI模型训练无需购买设备啦!Tesar超算网络让AI模型训练更便捷!
  16. 各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式 详解
  17. [基础论文阅读]QMIX: Monotonic Value Function Factorization for Deep Multi-agent Reinforcement Learning
  18. Linux版原型工具,Justproto:Linux下Axure的替代方案
  19. ajax 服务端 除了echo,Ajax轮询——定时的通过Ajax查询服务端
  20. Surface RT应用技巧1

热门文章

  1. 腾讯云GPU云服务器配置初体验
  2. live share_带Live Share的Visual Studio Code中的实时编码入门
  3. android 获取路由器mac,android设备获取当前wifi下的路由器的mac和路由器的名称
  4. 工作中使用到的单词(软件开发)_2022-06-01备份
  5. 【区块链开发入门】(四) Truffle详解篇1
  6. xshell写JS脚本自动进行操作
  7. cors js解决js跨域问题
  8. 欧姆龙CP1H+CIF11与3台施耐德ATV 71变频器通讯实战程序
  9. 怎么让电脑微信安装到别的盘路径
  10. vs2019python使用教程_vs2019安装和使用详细图文教程