【Unity Shaders】Diffuse Shading——创建一个基本的Surface Shader

原创 2013年12月05日 00:46:26

本系列主要参考《Unity Shaders and Effects Cookbook》一书(感谢原书作者),同时会加上一点个人理解或拓展。

这里是本书所有的插图。这里是本书所需的代码和资源(当然你也可以从官网下载)。

========================================== 分割线 ==========================================



这一次的工作非常简单,我们主要是为了了解Unity Shaders的基本工作原理。



准备工作

  1. 创建一个新的Unity Project
  2. 在Assets目录下新建一个文件夹:Shaders
  3. 在Assets目录下新建一个文件夹:Materials

实现

  1. 在Shaders文件夹下,点击右键新建一个Shader,命名为BasicDiffuse,并打开它;
  2. Materials文件夹下,创建一个Material,并使用我们之前创建的BasicDiffuse.shader;
  3. 创建一个Sphere,并把之前创建的Material拖到它上面,查看效果;
  4. 你还可以给Material添加一个texture。


解释

打开BasicDiffuse.shader后,我们可以发现Unity实际上已经为我们写好了很多代码:

Shader "Custom/BasicDiffuse" {
	Properties {
		_MainTex ("Base (RGB)", 2D) = "white" {}
	}
	SubShader {
		Tags { "RenderType"="Opaque" }
		LOD 200
		
		CGPROGRAM
		#pragma surface surf Lambert

		sampler2D _MainTex;

		struct Input {
			float2 uv_MainTex;
		};

		void surf (Input IN, inout SurfaceOutput o) {
			half4 c = tex2D (_MainTex, IN.uv_MainTex);
			o.Albedo = c.rgb;
			o.Alpha = c.a;
		}
		ENDCG
	} 
	FallBack "Diffuse"
}

  1. 第一行表明了这个shader在Unity中的路径,它会出现在你选择某个Material的shader时的下拉列表里,并且可以随时更改;
  2. 最后一行表明,当这个shader在当前环境中运行失败后,会默认调用Unity自带的Diffuse Shader;
  3. 其他内容在下面的章节会讲到。

Unity内部使用的是Cg来实现的,它把这些实现细节封装了起来,提供我们一种基于构件的编写shader的方法,像调整图片的uv坐标、矩阵转换等工作它都帮你做好了。而以前,我们需要重复编写一些基本功能的代码,来从头创建一个shader。当你的经验逐渐丰富起来,自然而然就会想要了解Unity是怎样处理图像处理单元(GPU)的工作的。如果你想了解Unity是怎样调用Cg的,可以到Unity的安装目录Unity4\Editor\Data\CGIncludes  下查看。在靠后面的一些章节中,会讲到。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

unity shader入门指南与总结

【文章转载自:http://www.manew.com/blog-30559-16861.html】 作者学习shader已经有很长一段时间了,这篇文章是对shader的整理和总结。shad...

【Unity Shaders】概述及Diffuse Shading介绍

概述 几个月以前我就一直在找关于Unity Shader相关的资料,大三的时候有一门叫《计算机图形学》,让我觉得如果游戏程序员要从beginner成长为advancer,就必须了解底层渲染的一些知...

【Unity Shaders】《Unity Shaders and Effects Cookbook》总结篇

我的唠叨不知不觉,从发表第一篇关于《Unity Shaders and Effects Cookbook》已经快十个月了。一开始的初衷就是学习笔记,毕竟将来回过头去看的时候,再看英文难免有种急躁感。从...

【Unity Shaders】Using Textures for Effects——让sprite sheets动起来

题外话 好久未更新,一些习惯还是应该要好好坚持啊。最近发现Android上一个很好的应用,希望每天可以坚持看一个视频,了解下最新的科技动态和演讲,也推荐给大家使用! 这次内容主要讲如何使用spri...

类型转换

//char:String.c_str()AnsiString TForm1::BCD_to_AnsiString(char * P_BCD, int length){    //TODO: Add ...

【Unity Shaders】Diffuse Shading——向Surface Shader添加properties

这次是在上一篇的基础上,进一步学习Unity Shaders的Properties。 准备工作 我们假设你已经进行了上一篇里的工作:创建了一个BasicDiffuse.shader,并且看到了...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)