[DeadWind] UnityShader学习笔记(一)
本帖最后由 DeadWind 于 2019-7-24 14:11 编辑

一、什么是Shader?

shader中文名叫着色器,顾名思义就是给物体着色。那给什么物体着色呢?显而易见就是给屏幕上的物品着色。



二、为什么要学习shader?

相信大家都玩过游戏,游戏中的各种技能特效、河上的水波纹、以及游戏场景中仿真的一草一木那全都是由shader渲染而来的。

许多公司美术在需要某个效果的shader时,他们使用工具拖动来完成shader编写以达到他们想要的效果,但是通常这种shader如果不优化的话就会很消耗游戏性能。而我们学会shader后,在优化游戏时就可以对shader进行优化,以及编写美术需要的shader。

鼎盛彩票网手机版最最最重要的是:加薪工具,加薪工具,加薪工具!!!




三、UnityShader种类

通常来说unity分为三种:

1. Surface Shader(表面着色器)

2. Vertex/Fragment Shader(顶点/片元着色器)

3. Fixed Function Shader(固定函数着色器)


四、三种Shader的区别以及相同点区别:

鼎盛彩票网手机版1. Surface Shader(表面着色器)是unity自己创造的一种着色器代码类型。它需要的代码量很少, 但渲染的代价比较大。本质上与顶点/片元着色器是一样的。


2. Vertex/Fragment Shader(顶点/片元着色器)当unity提供一个表面着色器时,它在背后仍然把 它转换成顶点/片元着色器。顶点/片元着色器与表面着色器的不同之处在于前者的代码是写在Pass 语义块内而非CGPROGRAM和ENDCG之间。

3. Fixed Function Shader(固定函数着色器)为固定功能渲染管线的具体表现。通常作用于功能较 简单兼容比较老的机器。.2后,所有固定函数着色器都会被unity编译成对应的顶点/片元着 色器,因此真正意义上的固定函数着色器已经不存在了。



相同点:

1. 都必须从唯一一个根Shader开始。

2. Prooerties参数部分,作用以及语法完全相同。

3. 具体功能都在SubShader里。

4. 都可以打标签和Fallback。

鼎盛彩票网手机版5. 表面着色器与顶点/片元着色器中CGPROGRAM和ENDCG之间的代码都是用CG/HLSL编写

6. .......


五、代码示例
1、Surface Shader示例代码

[mw_shl_code=csharp,true]Shader "Example/Surface Shader" {
        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
        }
        Fallback "Diffuse"
}[/mw_shl_code]


2、Vertex/Fragment Shader示例代码
[mw_shl_code=csharp,true]Shader "Example/Vertex Fragment Shader"
{
    SubShader{
        Pass{
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            float4 vert(float4 v : POSITION) :SV_POSITION{
                return mul(UNITY_MATRIX_MVP,v);
            }
            float4 frag() : SV_TARGET{
                return fixed4(1.0,0.0,0.0,1.0);
            }
            ENDCG
        }
    }
}[/mw_shl_code]


3、Fixed Function Shader示例代码
[mw_shl_code=csharp,true]Shader "Example/Fixed Function Shader"{
    Properties
    {
        _MainColor("Main Color", Color) = (1,1,1,1)
    }
    SubShader
    {
         Pass
            {
                Color[_MainColor]
            }
        }
        Fallback "Diffuse"
}[/mw_shl_code]



路过~~楼主加油
nfzzdgnetnetnetnet
为什么不能收藏?
shader真的会把人磨练的不像人很痛苦的,大家一起加油
謝謝樓主分享
好东西,顶一个
很棒,很精辟。。。
  • 9# sunkai
  • 2019-7-25 11:36:25
Shader 从入门到放弃。。
  • 10# yanis
  • 2019-7-25 14:07:19
应该有专门写shader的吧,反正我从来就没用上
谢谢死风作家分享
引用: killerLi 发表于 2019-7-25 15:45
谢谢死风作家分享

是“逆风”
  • 13# misuki
  • 2019-7-25 17:27:07
感谢分享~
66666666666
希望写通俗易懂的系列教程出来!!!!!!!!
12下一页