ShaderLab 入门实践 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
UNITY: Game Development Tool
License Comparisons
unn
V2EX    UNITY

ShaderLab 入门实践

  •  
  •   unn 2020-02-27 11:01:28 +08:00 2551 次点击
    这是一个创建于 2084 天前的主题,其中的信息可能已经有所发展或是发生改变。
    div class="topic_content">

    本文转自 Unity Connect 博主 汪汪

    从实践来认识 shaderlab 编程

    写这篇文章呢,主要是为了让想学习 shaderlab 编程的小伙伴们迅速了解 shaderlab 的的基本语法,和运用基本语句来实现一些简单的材质效果和动画。由于是实践入门,嘛,理论就会很少,偏向于出效果,更多的是从例子来一步一步的解析,理解,直到融会贯通。如果想深入学习的小伙伴,需要多多自己钻研,查阅资料哦。

    虽然本文不偏向于理论,但是基本的常识性问题希望大家了解。

    编写 shader 目前主流的三种高级语言有:HLSL、GLSL、CG

    HLSL 由微软推出,基于 DirectX,全名 High Level Shading Language

    GLSL 则基于 OpenGL,全名 OpenGL Shading Language

    CG 由 Nvidia 推出,全名 C for Graphic

    Shader 是 Material 的一部分,Material 是 Shader,纹理,颜色等的集合

    Shader 在 GPU 中运行

    ShaderLab 是由 Unity 封装,兼容 Unity 的着色器语言

    目前 Unity 下 Shader 的分类有三种,surface shaders,vertex and fragment shaders、fixed function shaders。

    本汪将侧重,或者只使用 vertex and fragment shaders 来进行案例的讲解

    Hello Shader!

    就像我们学习第一门编程一样,我们应该友好的对 Shaderlab 说一句:Hello!

    我们从 Unity 中创建一个 Unlit (不受光)模板看一下

    image

    “ ??汪汪你什么意思,一来就给我看这么多代码,不是说给想了解 shaderlab 的同学看吗?这么多我看得懂啊??”

    这。。。别急,别急,看本汪对上面的代码进行瘦身!

    image

    我们逐一来分析:

    首先是

    Shader"WangWang/HelloShader"

    上面我已经注释了,是对 shader 进行分组和取名,如果按照上图中的设定,那么在 Unity 里就会有如下效果哦:

    image

    在材质的 shader 选项里,出现了一个 Wangwang 的分组,接下来是 HelloShader 的材质名字

    Properties{}

    我们可以在函数体中,声明我们向外暴露的一些参数,比如贴图啊,颜色啊,数值啊等。

    下面我们在函数体中添加如下代码:


    Properties

    {

    //在此声明属性

    _BaseTex("MainTextrue",2D)="black"{}

    }


    编译成功后,我们查看一下结果:

    image

    出现了一张自定义贴图选项栏!!

    名字是:MainTextrue

    我们可以这样理解下面的代码

    _BaseTex("MainTextrue",2D)="black"{}

    **声明了一个叫做_BaseTex 的脚本内变量,并向外暴露,暴露出来的是一个“2D”类型的变量类型,名字叫做“MainTextrue”,如果没有给接口赋予任何贴图,则默认为黑色。

    SubShader{}

    上文中我们提到,编写 shader 可以有多种语言,然而这些语言其实是有局限性的。

    HLSL 只能运行在支持 DirectX 的的平台

    GLSL 只能运行在支持 OpenGL 的平台

    嘛,就是说他们两个谁都不喜欢谁,都不想和对方说话,所以无法沟通呢。≡()≡

    在这里如果是针对多个平台,多个硬件来编写的 shader,就很有可能需要多个 SubShader 哦。

    如果显卡 1 不支持第一个 SubShader 中的代码,那么就会跳到第二个 Subshader 中执行哦。就这样跳跳跳跳~

    万一都不支持怎么办呢?

    Fallback“Shader 名”

    这就是我们最后登场的角色,如果没有任何一个 Subshader 是支持这个硬件的,那就会调用 Fallback 后面的 shader。通俗的说呢,就是!!

    备胎吧。

    最后一个 Pass 因为是重点内容,这里一篇文章讲不完,会在后续详细介绍。

    好啦,本期 shaderlab 实践就到这里了,汪汪本人也是属于学习阶段,如果不足,错误之处,希望大家海涵。

    原文链接:https://connect.unity.com/p/shaderlab-ru-men-shi-jian?app=true

    欢迎戳上方原文链接,下载 Unity 官方技术社区 app,在线技术答疑,发现更多资源干货!

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3617 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 04:19 PVG 12:19 LAX 20:19 JFK 23:19
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86