Bootstrap

Unity3d shader 教程一 准备

Cg编程

游戏引擎中的Cg编程对于OpenGL或Direct3D应用程序,Unity比Cg编程要容易得多。网格和图像(即纹理)的导入由图形用户界面支持; mipmap和法线贴图可以自动计算; 最常见的顶点属性和uniforms是预定义的; OpenGL和Direct3D状态可以通过非常简单的命令设置,等等

准备

可以在Unity的下载页面下载适用于Windows和MacOS的免费版Unity 。所有包含的教程与免费版本一起使用。
应该注意几点:

  • 首先,这部分是关于Unity的顶点和片段着色器。这种着色器编程特别灵活,可以让您编写非常高效的着色器,这在渲染性能有限时(例如在移动设备上)通常很重要。它也对图像效果非常有用,并且了解GPU如何工作。如果要考虑Unity的标准照明,编程顶点和片段着色器就不太有用。(在这种情况下,Surface
    Shader更适合Unity)
  • 其次,这部分假设读者对Unity很熟悉。如果不是这样,读者应该参考Unity手册(Unity基础知识资源工作流程主窗口)的前三部分。
  • 第三,Unity不区分Cv(Nvidia的阴影语言)和DirectX 9风格的HLSL(Direct3D 9中的着色语言),因为这两种语言非常相似; 因此,大多数这些教程也适用于DirectX 9风格的HLSL。
  • 此外,Cg由Nvidia的Cg教程Nvidia的Cg语言规范记录。但是,这些描述缺少特定于Unity的细节。另一方面,Unity的着色器文档专注于Unity的ShaderLab语法,并假定读者熟悉Cg。因此,在Unity中学习Cg编程,而没有Cg的先前知识可能是相当困难的。这本wikibook试图通过在Unity中提供Cg编程的介绍来弥补这个差距,而无需事先知道Cg。

教程

请注意,这些教程假定您按照它们在这里呈现的顺序阅读它们,即每个教程将假设您熟悉以前教程中介绍的概念和技术。如果您是Cg或Unity的新手,请至少阅读“基础知识”部分的教程。(以此警告!)

基础知识

透明曲面

  • 剔除(关于丢弃片段和三角面剔除)
  • 透明度(关于混合)
  • 顺序无关的半透明渲染(关于顺序无关的混合)
  • 轮廓增强(关于转换法线)

基本照明

  • 漫反射(关于逐顶点的漫反射照明和不同种类的多种光源)
  • 镜面高光(关于逐顶点的照明)
  • 双面显示(约双面逐顶点照明)
  • 平滑的镜面高光(关于逐像素照明)
  • 平滑的双面显示(关于双面逐像素照明)
  • 多个光源(关于在一个着色器过程中处理多个光源)

基本贴图

  • 纹理球体(关于纹理球体)
  • 纹理表面光照(关于漫射照明的纹理)
  • 光照贴图(关于光照贴图)
  • 透明纹理(关于使用alpha纹理丢弃片段,Alpha Test和混合)
  • 纹理层(关于多重纹理)

3D纹理

  • 弯曲表面光照(关于正常映射)
  • 凹凸表面的投影(关于视差映射)
  • Cookies(关于塑造光的投影纹理贴图)
  • 投影机(投影机投影纹理贴图)

环境映射

  • 反射曲面(关于反射映射)
  • 弯曲玻璃(关于折射映射)
  • Skyboxes(关于渲染环境地图作为背景)
  • 多光源(关于图像照明)

照明变化

  • 拉丝金属(关于各向异性镜面反射)
  • 轮廓的镜面高光(关于镜面反射的菲涅尔因子)
  • 天光漫反射(关于半球照明)
  • 半透明表面(关于背光的漫反射和前向散射传输)
  • 半透明体(关于散射照明,减少对比度和弥漫背光在轮廓上的传播)
  • 球体的软阴影(关于渲染球体的阴影和半影)
  • Toon Shading(关于非真实感渲染)

非标准顶点变换

  • 屏幕叠加(关于从对象空间到屏幕空间的直接转换)
  • 广告牌(关于对象的视图对齐投影)
  • 非线性变形(关于顶点混合)
  • 飞机上的阴影(关于将阴影投射到飞机上)

图像效果和计算着色器

  • 最小图像效果(关于片段着色器的基本图像后期处理)
  • 计算图像效果(关于使用计算着色器进行图像效果处理)
  • 计算颜色直方图(关于使用计算着色器计算颜色直方图)
  • 计算最亮的像素(关于使用计算着色器找到最亮的像素)

杂项

  • 贝塞尔曲线(Bézier曲线和样条曲线)
  • Hermite曲线(关于立方体Hermite曲线和splines)
  • 旋转(欧拉角和四元数)
  • 虚拟现实投影(关于离轴透视投影)
  • 镜像(关于渲染平面镜与渲染纹理)
;