表面着色器案例分析
来源:互联网 发布:淘宝助理修改宝贝描述 编辑:程序博客网 时间:2024/06/06 01:53
下面是表面着色器案例分析,主要是自己学习,其实就是抄写一遍
首先是一个比较简单的例子
Shader"Example/Diffuse"//漫反射
{
SubShader
{
Tags{"RenderType"="Opaque"}//渲染模式为透明物体,也就是场景中的透明物体使用该shader
CGPROGRAM
#pragma surface surf Lambert//内置光照模式
struct Input//输入结构体,该例子中,只有颜色值
{
float4 color:Color;
};
void surf (Input IN,inout SurfaceOutPut o)//表面函数,IN是输入结构体类型,SurfaceOutPut为输出类型,默认的
{
o.Albedo=1;//其实Albedo为float3 类型,该句的意思就是o.Albedo=(1,1,1);//全白
}
ENDCG
}
FallBack“Diffuse”//俗称备胎
}
加上纹理
Shader"Example/Diffuse Texture"
{
Properities
{
_MainTex("Texture",2D)="White"{}//注意属性中的每一行的结尾并没有顿号结束——MainTex为变量名字,Texture为在检视面板现实的名字,任意
}
SubShader
{
Tags{"RenderType"="Opaque"}//只有一个SubShader时,该行卸载;里面与外边效果是一致的,当两个SubShader时,若写外边就是说明两个SubShader都使
CGPROGRAM
#pragma surface surf Lambert
struct
{
float2 uv_MainTex;
};
Sample2D _MainTex;//该处的声明与属性一一对应
void surf (Input IN,SurfaceOutPut o)
{
o.Albedo=tex2D(_MainTex,IN.uv_MainTex).rgb;//漫反射贴图为在uv_MainTex坐标所对应的——MainTex图像
}
ENDCG
FallBack"Diffuse"
}
}
加上法线贴图,使纹理更有立体感,在属性中增加一个属性,即法线贴图_BumpMap("BumpMap",2D)="White"{}
在输入结构体中,将纹理坐标及法线坐标都传递近表面函数中
struct
{
float2 uv_MainTex;
float2 uv_BumpMap;
};
表面函数
void surf (Input IN,inout SurfaceOutPut o)
{
o.Albedo=tex2D(_MainTex,IN.uv_MainTex);
o.Normal=UnpackNormal(tex2D(_BumTex,IN.uv_BumpTex));
}
- 表面着色器案例分析
- UnityShader官方案例之表面着色器光照示例
- 表面着色器
- 表面着色器笔记
- 表面着色器Surface Shader2
- [UnityShader2]表面着色器基础
- Unity Shaders表面着色器
- Shader(表面着色器)
- Unity3d Shader动态表面效果着色器
- 表面着色器的顶点动画
- Unity Shader 表面着色器(Surface Shader)
- Unity3d 表面着色器学习笔记
- [UnityShader2]表面着色器实例(一)
- [UnityShader2]表面着色器实例(二)
- [UnityShader2]表面着色器实例(三)
- 表面着色器示例 Surface Shader Examples
- 边缘发光的表面着色器
- 介绍了表面着色器的基本概念和一些写法
- 向量处理机
- 华为2014机试题-等式变换
- 剑指offer-算法整理
- Certification、Provisioning、Keychain、APP IDs概述
- 第五周项目体验常成员函数
- 表面着色器案例分析
- A*算法
- 二叉搜索
- JS读取XML文件(兼容浏览器)
- HDU - 5203 Rikka with wood sticks 分析
- 第五周项目四静态成员应用
- Java生产者-消费者模式的阻塞队列实现
- 顶层const与底层const
- MFC(5) GetMessage和PeekMessage的区别