Shader 基础使用(二) --- surface Shader

本文介绍了Unity中Shader的基础使用,特别是Surface Shader。讲解了基本数据类型,如float、half、int等,并阐述了CG语言的编写规则,包括CGPROGRAM、#pragma surface指令和surf函数。还列举了CG常用函数,如UnpackNormal、saturate和tex2D。通过实例展示了如何应用Surface Shader实现单一颜色、纹理贴图、法线贴图以及边缘发光效果,适合Shader初学者学习。
摘要由CSDN通过智能技术生成

基本数据类型

float 单个浮点数 (32位浮点数)
float2 两个浮点数 相当于 Vector2 (32位浮点数)
float3 三个浮点数 相当于 Vector3 (32位浮点数)
float4 四个浮点数 相当于 Vector4 (32位浮点数)
half half2 half3 half4 和float一样 只不过它是16位浮点数
int 整型 (32位整型)
fixed fixed2 fixed3 fixed4 和float一样 只不过它是12位浮点数
bool bool类型
sampler2D 纹理对象
string 字符串类型

表面着色器主要是渲染像素的 涉及到输入和输出

1. input saturate 
    float2
    --> uv_MainTex
    --> uv纹理贴图
    --> 命名方式必须为uv + 贴图变量名
    float3
    --> viewDir(视图方向)
    -->worldPos(世界坐标位置)
    float4
    --> screenPos(屏幕空间位置)
    -->color:COLOR(语义绑定 每个顶点的内插值颜色)
2.SurfaceOutput
    half3 
    --> Albedo(反射值,即颜色纹理rgb)
    -->Normal(法线,法向量)
    -->Emission(自发光颜色)
    half  
    -->Specular(镜面反射度)
    -->Gloss(光泽度)
    -->Alpha(透明度)

CG语言的编写规则

CGPROGRAM ——- CG语言开头
#pragma surface surf Lambert —– #pragma -> 预编译指令|surface -> 告诉编译器我的着色器类型(三种surface|vertex|fragment)|surf-> 着色器对应的函数名称|Lambert -> 光照模型(Lambert兰伯特光照模型)
//两个参数输入,输出 就是这个格式 不用改变
void surf(Input IN,inout SurfaceOutput o)
{
//在这里写我们的着色器代码
}
ENDCG ——- CG语言结尾

CG常用函数

1.UnpackNormal
传入的参数是fixed4 返回的是fixed3 也就是传入值对应的 法线
2.saturate
限制值的函数 限制值的范围为 0 - 1
3.dot
点乘的函数
4.tex2D
通过uv查找纹理的每个顶点的颜色值(也就是设置纹理贴图,传入参数是uv纹理)

应用案例
这里写图片描述
直接上代码来看一下具体的实现

  • 最简单的实现单一主颜色/添加纹理贴图
Shader "SurfaceShader/SurfaceShader_001" {
    Properties
    {
        _MainColor("主颜色",Color) = (1,0,0,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值