冯乐乐之三,SHADERLAB入门

本文介绍了Unity中ShaderLab的基础语法及使用方法,包括材质属性设置、SubShader结构、Pass定义等内容,并详细解析了表面着色器、顶点片元着色器等不同类型的Shader实现。

Shader Lab 是shader language的抽象,只能在unity中使用.

语义syntax是其基本结构,{}内的内容。

Shader "ShaderName"//shader的名字以及在材质面板的显示

{
//材质和shader的沟通
Properties
{
    //NameInShader("NameInMaterial",Propertype) = DefaultValue;
    //Properties只有一下几种,声明方式固定
    // Numbers and Sliders
		_Int ("Int", Int) = 2
		_Float ("Float", Float) = 1.5
		_Range("Range", Range(0.0, 5.0)) = 3.0
		// Colors and Vectors
		_Color ("Color", Color) = (1,1,1,1)
		_Vector ("Vector", Vector) = (2, 3, 6, 1)
		// Textures
		_2D ("2D", 2D) = "" {}
		_Cube ("Cube", Cube) = "white" {}
		_3D ("3D", 3D) = "black" {}
}

//最重要的模块,包含至少一个subshader,unity扫描所有subshader找到第一个能在目标平台使用的shader,没有就使用Fallback。
SubShader
{
    //RenderSetup
    //Cull,Ztest,ZWrite,Blend
    //Tags{"TagName1 = "Value1"}
    //SubShade的Tags是一组键值对
    //Queue队列,RenderType渲染类别,DisableBatching关闭批处理
    //ForceNoShadowCasting关闭阴影,IgnoreProjector无视投影(用于透明物体)
    //CanUseSpriteAtlas,PreviewType材质框中预览模型,可以是"Plane""Sphere"
    //一个Pass是一个完整渲染流程,Pass过多影响性能。
    Pass{}
}

SubShader
{
    //真正的Shader代码
    //表面着色器Surface Shader
    //顶点片元着色器
    //固定函数着色器
}
//最后一道防线,如果以上SubShader都不能用就只能用最低级的。不写就是不管了
Fallback "VertexLit"
}

 

表面着色器Surface Shader

这是Unity独创的shader类型,本质上还是顶点片元着色器,在其基础上进行抽象。

代码量少,Unity处理了许多细节。

SubShader
{
    Tags{"RenderType" = "Opaque"}
    CGPROGRAM
    #Pragma surface surf Lambert
    struct Input{float4 color : COLOR;};
    void surf(Input IN, inout SurfaceOutput o){o.Albedo = 1;}
    ENDCG
}

Surface Shader中的语义块在CGPROGRAM和ENDCG之间,而不是Pass。CGPROGRAM和ENDCG之间使用CG/HLSL。

 

顶点片元着色器Vertex/Fragment Shader

SubShader
{
    Pass
    {
        CGPROGRAM
        #pragma vertex vert;
        #pragma fargment frag;
        float4 vert(float4 v : POSITION) : SV_POSITION
        {
            return mul (UNITY_MATRIX_MVP,v);
        }
        fixed4 frag() : SV_Target
        {
            return fixed4(1,0,0,1);
        }
        ENDCG
    }
}

Pass{}中实现。CGPROGRAM和ENDCG之间使用CG/HLSL。灵活性更高。

固定函数Fixed Function Shader

时代眼泪,不写了。

 

 

 

冯乐乐是著名的计算机图形学专家,他的研究领域主要是实时渲染和着色器编程。对于想要学习shader入门的人来说,以下是一些冯乐乐推荐的书籍资源: 1.《GPU Gems》系列 这是一系列由冯乐乐等人共同编写的图形编程经典书籍之一,涵盖了很多与shader相关的主题,例如高级光照、阴影算法等。这些书籍从实践的角度深入讲解了如何优化和实现各种shader效果。 2.《Real-Time Rendering》 这是一本权威的实时渲染书籍,由Tomas Akenine-Möller、Eric Haines和冯乐乐等人合著。书中包括了许多关于shader编程的内容,如基本着色原理、渲染技术和最新的图形硬件特性等。 3.《Unity Shader 全方位深入解析》 这是一本讲解Unity引擎着色器编程的书籍,由冯乐乐亲自编写。书中通过实例和案例详细介绍了Unity Shader的基础知识和高级技巧,适合对Unity引擎感兴趣的开发者入门学习。 4.《OpenGL着色器语言概念与实践》 这是一本介绍OpenGL着色器语言(GLSL)的书籍,由Randi J. Rost、Bill Licea-Kane和冯乐乐等人合著。书中详细讲解了GLSL的语法和应用,以及如何使用GLSL实现各种shader效果。 除了以上推荐的书籍资源,冯乐乐还经常在学术会议和论坛上发布最新的研究成果。如果想要深入了解他的工作,可以关注他的论文和演讲录像。同时,还可以通过参加相关的培训课程和在线教育平台上的课程来学习shader编程,不断加强自己的实践能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值