Shader "Custom/Surface_Shadeer" {

Properties {                                                     //属性

_Color ("主颜色", Color) = (1,1,1,1)

_MainTex ("主纹理", 2D) = "white" {}

_NormalTex ("法线纹理", 2D) = "" {}

}

//子着色器

SubShader {

Tags { "RenderType"="Opaque" }             //标签

LOD 200                                                                    //多层次细节  高效渲染的运算

//开始CG着色器编程语言段   surface 固定格式

CGPROGRAM

//1.光照模式声明:使用兰伯特光照模式    surface 固定格式  声明为表面着色器  Lamber是漫反射光照模式

#pragma surface surf Lambert

//2.输入结构   主要是用来接收外部的数据

struct Input

{

//四元素的颜色值(RGBA)

float4 color : COLOR;

float2 uv_MainTex;//uv + 变量名称  就可以获取当前的uv点  可以直接使用  是一个固定的结构

};

sampler2D _MainTex;                        //声明一张贴图

float4 _MainColor;                     //声明主颜色

sampler2D _NormalTex;          //声明法线贴图

//3.表面着色函数的编写实现方法

void surf (Input IN, inout SurfaceOutput o)  {

//反射率  float3 表示三维变量  floa4表示四维变量

// o.Albedo = float3(0.5,0.8,0.3);       //(0.5,0.8,0.3)分别对应于RGB分量

//而o.Albedo = 0.6;等效于写o.Albedo = float3(0.6,0.6,0.6);

//改变着色器颜色

o.Albedo = _MainColor.rgb;

//给当前着色器贴图赋值  四维颜色转三维RGB

o.Albedo = tex2D(_MainTex,IN.uv_MainTex).rgb;

//给当前着色器的法线赋值  首先获取到法线贴图的颜色输出值tex2D(_NormalTex, IN.uv_MainTex)   但是需要把颜色输出值转换成法线向量赋值给着色器 也就是赋值给 o.Normal

o.Normal = UnpackNormal(tex2D(_NormalTex, IN.uv_MainTex));

}

ENDCG //结束CG着色器编程语言段

}

FallBack "Diffuse"    //备用渲染方式 “”里面填的内容为Shader的路径

}

注:此着色器与unity 3d 本身预制的光照进行计算 ,Lambert和BlinnPhong,或者是自定义的光照模型 ,void surf (Input IN,inout SurfaceOutput 0)是其重要的显示实现函数,作用是接收  struct Input 函数的UV等数据的输入,进行处理,然后将结果填充显示在SurfaceOutput中。

Surface Shader(表面着色器)的更多相关文章

  1. Surface Shader简单向导

    Surface Shader 表面着色器 描述 当你的Material要处理光照,则一般使用Surface Shader.Surface Shader隐藏了光照的计算,你只需要在surf函数里设置好反 ...

  2. Unity3D Shader官方教程翻译(十九)----Shader语法,编写表面着色器

    Writing Surface Shaders Writing shaders that interact with lighting is complex. There are different ...

  3. Unity Shader入门精要学习笔记 - 第17章 Unity的表面着色器探秘

    转自 冯乐乐的<Unity Shader 入门精要> 2010年的Unity 3 中,Surface Shader 出现了. 表面着色器的一个例子. 我们先做如下准备工作. 1)新建一个场 ...

  4. [Unity] Shader(着色器)输入输出和语义

    在Unity5.x后, 已经支持了基于物理的光照模型,也就是常说的次时代引擎所必须具备的功能. 如果在Properties使用2D,CG里要用sampler2D,代表使用的是2维纹理 如果在Prope ...

  5. Surface Shader

    Surface Shader: (1)必须放在SubShdader块,不能放在Pass内部: (2)#pragma sufrace surfaceFunction lightModel [option ...

  6. UnityShader 表面着色器简单例程集合

    0.前言 这些简单的shader程序都是写于2015年的暑假.当时实验室空调坏了,30多个人在实验室中挥汗如雨,闷热中学习shader的日子还历历在目.这些文章闲置在我个人博客中,一年将过,师弟也到了 ...

  7. 【Unity Shaders】Shader学习资源和Surface Shader概述

    写在前面 写这篇文章的时候,我断断续续学习Unity Shader半年了,其实还是个门外汉.我也能体会很多童鞋那种想要学好Shader却无从下手的感觉.在这个期间,我找到一些学习Shader的教程以及 ...

  8. 关于Unity中表面着色器的使用

    写shader其实就是在两个工位顶点shader工位和着色shader工位插入代码,供GPU使用运行 表面着色器四个函数的入口 1:表面着色器包括4个函数: (1): 顶点变换函数; (2): 表面着 ...

  9. unity3d游戏开发学习分享之表面着色器讲解

    一.三种着色器的书写格式: 1.surface shaders, 指的是表面着色器 2.vertex and fragment shaders and 指的是顶点和片段着色器 3.fixed func ...

随机推荐

  1. 不设置JAVA_HOME运行eclipse

    编辑eclipse目录下的eclipse.ini 在第一行加入下面那句话,实际路径按照系统中的jdk目录设置.这样设置后可以省了环境中的JAVA_HOME像myeclipse一样.   -vm C:\ ...

  2. GitHub Pages搭建博客HelloWorld版

    1.原理 GitHub作为博客相关文件的托管方,你把按照jekyll规定的目录及文件上传至github库中,通过约定的库名称即可访问到经过jekyll渲染后的博客页面. 2.搭建过程 2.1.注册Gi ...

  3. python 全局搜索路径

    在~/.bachrc中添加 export PYTHONPATH=$PATHONPATH:[需要添加的路径]

  4. android中SharedPreferences 读取不到数据的问题

    在两个不同的 Activity中,A中SharedPreferences保存了数据,在A中可以读取到,但是在 B中却读取不到了,一直是空值,好是不爽,由于是按照书本上的例子写的, 怎么也找不到原因,后 ...

  5. CefSharp49.0.1 SetZoomLevel

    SetZoomLevel(double zoomLevel)   -8<= zoomLevel <=9 Each zoom level increases the zoom by 20%. ...

  6. 「BZOJ 3529」「SDOI 2014」数表「莫比乌斯反演」

    题意 有一张 \(n\times m\) 的数表,其第\(i\)行第\(j\)列的数值为能同时整除\(i\)和\(j\)的所有自然数之和. \(T\)组数据,询问对于给定的 \(n,m,a\) , 计 ...

  7. 第一次接触C++------感触

    2018/09/24 上大学第一次接触C++,感觉还挺有趣的. C语言是计算机的一门语言,顾名思义,语言嘛,有它自己独特的语法. 第一次用C++敲代码,觉得还挺不错的,可以从中找到乐趣.咏梅老师布置的 ...

  8. [51nod1238] 最小公倍数之和 V3(杜教筛)

    题面 传送门 题解 懒了--这里写得挺好的-- //minamoto #include<bits/stdc++.h> #define R register #define ll long ...

  9. HTTP基本认证和JWT鉴权

    一.HTTP基本认证 Basic Authentication——当浏览器访问使用基本认证的网站的时候, 浏览器会提示你输入用户名和密码. http auth的过程: · 客户端发送http请求 ·  ...

  10. spring中IOC容器注册和获取bean的实例

    spring中常用的功能主要的是ioc和aop,此处主要说明下,实例注册和使用的方法,此为学习后的笔记记录总结 1.使用xml文件配置 在idea中创建maven工程,然后创建实例Person,然后在 ...