zoukankan      html  css  js  c++  java
  • 【Unity Shaders】Diffuse Shading——创建一个基本的Surface Shader

    本系列主要参考《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的安装目录Unity4EditorDataCGIncludes  下查看。在靠后面的一些章节中,会讲到。

  • 相关阅读:
    编译KlayGE所需要的第三方库和工具下载
    KlayGE启用顶级域名
    Sophus和Eigen 李群李代数 简单介绍
    G2O曲线拟合1
    梯度下降
    PCL1.8单张图点云转换显示
    双目测距demo
    Kinect基于微软SDK彩图与深度图对齐
    单例模式
    zendstudio卡死
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6314717.html
Copyright © 2011-2022 走看看