Unity Shader 入门精要 第3章 学习记录

        在没有Unity这类编辑器的情况下,如果我们想要对某个模型设置渲染状态,可能需要类似下面的代码:

//初始化渲染设置
void Initialization ( )  {
    //从硬盘上加载顶点着色器的代码
    string vertexShaderCode = LoadShaderFromFile(vertexShader.shader);
    //从硬盘上加载片元着色器的代码
    string fragmentShaderCode = LoadShaderFromFile (FragmentShader.shader) ;
    //把顶点着色器加载到GPU中
    LoadVertexshaderFromstring ( vertexShaderCode) ;
    //把片元着色器加载到GPU中
    LoadFragmentShaderFromString(fragmentShaderCode ) ;
    //设置名为"vertexPosition"的属性的输入,即模型顶点坐标
    SetVertexShaderProperty ( "vertexPosition", vertices);

    //设置名为"MainTex"的属性的输入,someTexture是某张已加载的纹理
    SetVertexShaderProperty ( "MainTex", someTexture) ;
    //设置名为"MVP"的属性的输入,MVP是之前由开发者计算好的变换矩阵
    SetVertexshaderProperty ( "MVP",MVP);
    //关闭混合
    Disable (Blend) ;
    //设置深度测试Enable (ZTest) ;
    SetZTestFunction ( LessOrEqual) ;

    //其他设置
    ...
}

    //每—帧进行渲染
    void OnRendering () {
        //调用渲染命令
         DrawCall();
    //当涉及多种渲染设置时,我们可能还需要在这里改变各种渲染设置
        ...
    }

 VertexShader.shader:

//输入:顶点位置、纹理、MVP变换矩阵
in float3 vertexPosition;
in sampler2D MainTex;
in Matrix4x4 MVP;
//输出:顶点经过MvP变换后的位置
out float4 position;
void main(){
    //使用MVP对模型顶点坐标进行变换
    position =MVP * vertexPosition;
}

FragmentShader.shader:

//输入:VertexShader输出的position、经过光栅化程序插值后的该片元对应的position
in float 4 position;

//输出:该片元的颜色值
out float4 fragColor;

void main() {
    //将片元颜色设为白色
    fragcolor = float4 (1.0,1.0,1.0,1.0);
}

        上述伪代码仅仅是简化后的版本,当渲染的模型数目、需要调整的着色器属性不断增多时,上述过程将变得更加复杂和冗长。而且,当涉及透明物体等多物体的渲染时,如果没有编辑器的帮助,我们要非常小心如渲染顺序等问题。
        Unity 的出现改善了上面的状况。它提供了一个地方能够让开发者更加轻松地管理着色器代码以及渲染设置(如开启/关闭混合、深度测试、设置渲染顺序等),而不需要像上面的伪代码一样,管理多个文件和函数等。Unity提供的这个“方便的地方”,就是 Unity Shader。

3.1 unity shader概述

        3.1.1 材质和unity shader

 3.1.2 unity中的材质

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值