2.初识ShaderLab

Unity ShaderLab 是渲染抽象层;
具体结构:

Shader "ShaderName" {
	Properties{
	属性
	}
	SubShader{
	//显卡A使用的子着色器
	}
	SubShader{
	//显卡B使用的子着色器
	}
	Fallback"VertexLit"
}
命名:Shader "Custom/GameNose"

1.属性Properties{:
在这里插入图片描述
在这里插入图片描述

2.SubShader:
在这里插入图片描述

SubShader
{
	Tags{ "RenderType" = "Opaque"} 
}

(这里提到了一个Projector,找到了一个有趣的用法:http://www.dreamfairy.cn/blog/2018/11/19/unity-projector-opmize/)

Pass语块

Pass{
	[Name]
	[Tags]
	[Render]

这里的Pass指的是渲染通道(渲染通道在unity Shader中就是SubShader中的Pass。之前的shader中都只有一个Pass,也就是单通道渲染,这样的话如果要对同一个RenderTexture在不同的时刻进行不同的渲染效果输出就需要不停的更换shader。当然,也可以使用多重渲染,但是如果一次只用一个效果,用多重渲染则有些浪费。这个时候就需要多通道渲染。多通道渲染就是在一个shader中有多个Pass,玩家可以根据需求设定通过哪个Pass来进行渲染,从而实现在不同的时候对使用同一个shader对同一个对象进行不同的效果处理。)
这里要注意U3D会将Pass名字转换为大写字母的模式

在这里插入图片描述
UsePass; GrabPass:负责抓取屏幕并将结果存储在一张纹理中,
——————————————————————————————————————————
Fallback 指令: 一般在SubShader后写,SubShader指令无法在显卡上运行时候 Fallback"name" or Fallback Off

3.4.1表面着色器(Surface Shader):
当给U3D提供一个表面着色器的时候,它在背后仍然转换成对应的 顶点/片元着色器
就相当于 UNITY 为用户处理了许多光照细节;

SubShader{
	Tags { "RaenderType" = "Opaque"}
	CGPROGRAM //nvidia cg
	#pragma surface surf Lambert
	struct Input {
		float4 color : COLOR;
		};
	void surf (Input IN, inout SurfaceOutput o) {
		o.Albedo = 1'
		}
		ENDCG
	}
	Fallback"Diffues"
	}	

表面着色器写在CGPROGRAM 和 ENGCG 之间 是用CG/HLSL编写的
在这里插入图片描述

3.4.3 固定函数着色器略【P35】

着色器的选择:
1、一般使用 表面着色器 或 顶点/片元着色器
2、光源效果 使用 表面着色器
3、光照较少,比如只有一个平行光 或 多 自定义渲染效果 使用 顶点/片元着色器
4、固定函数一般用于老旧设备

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值