【Unity】Unity Shader学习笔记(四)创建和使用、基本语法、属性基本类型、数值精度

这篇具有很好参考价值的文章主要介绍了【Unity】Unity Shader学习笔记(四)创建和使用、基本语法、属性基本类型、数值精度。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


创建Shader

由于着色器是依赖于材质的,所以创建着色器之前通常要先创建一个材质(Material)。然后再创建一个Shader。
unity新建shader,Unity,Unity Shader,unity,学习,游戏引擎
结果如下:
unity新建shader,Unity,Unity Shader,unity,学习,游戏引擎
然后给材质指定Shader,再给物体指定材质。
unity新建shader,Unity,Unity Shader,unity,学习,游戏引擎
unity新建shader,Unity,Unity Shader,unity,学习,游戏引擎

基本语法

建好Shader后双击打开,通常默认使用vs studio开发shader。一个Shader主要的内容都是写在 Shader {} 代码块中,其中包含一个 Properties (属性)代码块和一到数个 SubShader (子着色器)代码块。

Shader "MyShader/S_Test1" // 不要求与文件名一致
{

    // 属性,只能有一个Properties
    Properties {
    }

    // SubShader可以有多个,显卡运行效果时从第一个SubShader开始
    // 如果第一个SubShader中的效果都可以实现,就使用第一个,如果显卡发现SubShader里面的某些效果实现不了,会自动运行下一个SubShader
    SubShader {
        // pass相当于方法,至少要有一个pass
        Pass {
            // CGPROGRAM和ENDCG形成代码块,在这里编写shader代码,也可以用HLSLPROGRAM
            CGPROGRAM
            // 使用CG语言编写shader代码
            ENDCG
        }
    }

    FallBack "VertexLit"
}

属性基本类型

// 属性,只能有一个Properties
Properties {
    _Color("MyColor", Color) = (1, 1, 1, 1)
    _Vector("MyVector", Vector) = (1, 2, 3, 4)
    _Int("MyInt", Int) = 123
    _Float("MyFloat", Float) = 1.5
    _Range("MyRange", Range(1, 11)) = 6
    _2DTexture("Texture", 2D) = "white"{}
    _Cube("MyCube", Cube) = "white"{}
    _3DTexture("My3DTexture", 3D) = "white"
}

unity新建shader,Unity,Unity Shader,unity,学习,游戏引擎

使用属性

Shader的属性是不能直接使用的,需要在 CGPROGRAM 代码段中重新声明一下才能使用,代码如下:

SubShader {
    Pass {
        CGPROGRAM
        
        fixed4 _Color;
        float4 _Vector;
        float _Int;
        float _Float;
        float _Range;
        sampler2D _2DTexture;
        samplerCUBE _Cube;
        sampler3D _3DTexture;

        ENDCG
    }
}

正常情况下只需声明要使用的属性即可,不需要全部声明。属性的值会自动从Inspector面板中获取。

数值类型精度

shader根据不同的精度设计了float、half、fixed三种类型,其中float精度最高,共32位,几乎适用于任何情况,但内存占用也较高。half的精度是16位的,理论值域是 [ -65536 ~ 65535 ](实际值域好像是65504)。fixed精度最低,只有11位,值域是 [ -2 ~ 2 ]。因为颜色的值域是 [ 0 ~ 1 ] ,所以通常颜色是使用 fixed4来定义的。

SubShader {
    Pass {
        CGPROGRAM
        
        float _myFloat1;
        half _myHalf1;
        fixed _myFixed1;

        float2 _myFloat2;
        half2 _myHalf2;
        fixed2 _myFixed2;

        float3 _myFloat3;
        half3 _myHalf3;
        fixed3 _myFixed3;

        float4 _myFloat4;
        half4 _myHalf4;
        fixed4 _myFixed4;

        ENDCG
    }
}

更多内容请查看总目录【Unity】Unity学习笔记目录整理文章来源地址https://www.toymoban.com/news/detail-576348.html

到了这里,关于【Unity】Unity Shader学习笔记(四)创建和使用、基本语法、属性基本类型、数值精度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity Shader 属性的定义

    人的衣服 决定材质跟灯光的作用 若是把shader看作class,那么Property就可以看成成员变量 属性定义的通用格式 Properites{ Property[Property…] } ep:定义一个int: name:变量的名字,正常以下划线开头 display name: 供外界使用的参考说明,显示在unity的属性页 number:表示默认值 颜色属性

    2024年01月20日
    浏览(26)
  • Python学习笔记—基本语法

    1、一般代码第一行会有#!/usr/bin/python3 这句注释是告诉操作系统执行该脚本时,调用/usr/bin目录下的Python 解释器。 在windows 下可以不写第一行注释 2、多行注释’’’和”””,用法类似verilog中的/**/ 如 ’’’ 第一行注释 第二行注释 ‘’‘ 3、多行语句表示 一般最好是一行

    2024年02月07日
    浏览(31)
  • 【UnityShader入门精要学习笔记】第三章(2)Unity Shader的形式,章节答疑

    本系列为作者学习UnityShader入门精要而作的笔记,内容将包括: 书本中句子照抄 + 个人批注 项目源码 一堆新手会犯的错误 潜在的太监断更,有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 (该系列笔记中大多数都会复习前文的知识,特别是前文知识非

    2024年02月02日
    浏览(34)
  • Unity Shader 学习笔记(4)URP渲染管线带阴影PBR-Shader模板 -- 新增可自定义阴影颜色

    材质面板截图 功能实现(URP渲染管线下): 1、进一步优化Shader结构和算法; 2、包含PBR材质; 3、投射和接收阴影,并升级 支持自定义阴影颜色 ; 4、支持点光源照射(但不支持点光源阴影)。 通用渲染截图 自定义阴影颜色截图 完整代码: 写在最后: 1、在我的上一篇文

    2024年02月12日
    浏览(27)
  • 【Unity 学习笔记】 Sprite的部分属性和功能

    在unity2D中,每导入一个图片资源,unity都会为其添加一些属性,这些属性可以在对应图片资源的Inspector中查看。在unity中,图片资源被称作sprite,翻译成中文就是“精灵”。精灵sprite指的是一张集成场景中的一部分图像,个人形象地理解就是unity中的图片资源都是游戏场景(或

    2024年02月07日
    浏览(23)
  • (五·二)计算机图形学 之 Unity代码调用Shader并修改属性值

    直接划重点: 在C#代码中,要先引用材质球(Material),然后通过材质球提供的方法比如: 我这里使用material.SetColor(\\\"_Color\\\", Color.red); 结构是SetColor(shader属性名称,属性值设置); _Color是在shader中,Properties{}里定义好的属性,名称要一直,然后就是给他赋值。 Shader代码: C#代码

    2024年02月15日
    浏览(26)
  • Unity编写Shader基本知识

    返回目录 大家好,我是阿赵。 这里通过手写一个最简单的shader,来介绍一下在Unity里面编写Shader的一些基础知识。 新建一个shader,把里面的内容都删掉,然后输入下面这些内容 可以发现,现在这个Shader就已经能运作了,新建一个材质球,使用刚才写的shader,然后赋给一个

    2024年02月07日
    浏览(27)
  • 【Unity Shader】从入门到着魔(1)基本概念:什么是网格?材质?Shader?

    如上图,模型的三角形面就叫做网格(Mesh),网格的本质是一堆顶点数据的规则排序,在Unity和UE中由三角形表示,Maya等DCC软件(Digital Content Creation)中则通常由四边形表示(俩个三角形刚好组成一个四边形)。 在Unity中我们新建一个Cube,

    2024年02月09日
    浏览(28)
  • 【Unity Shader】从入门到感慨(1)基本概念:什么是网格?什么是材质和Shader?

    如上图,模型的三角形面就叫做网格(Mesh),网格的本质是一堆顶点数据的规则排序,在Unity和UE中由三角形表示,Maya等DCC软件(Digital Content Creation)中则通常由四边形表示(俩个三角形刚好组成一个四边形)。 在Unity中我们新建一个Cube,

    2024年02月11日
    浏览(24)
  • 【Unity Shader】从入门到领悟(1)基本概念:什么是网格?什么是材质和Shader?

    如上图,模型的三角形面就叫做网格(Mesh),网格的本质是一堆顶点数据的规则排序,在Unity和UE中由三角形表示,Maya等DCC软件(Digital Content Creation)中则通常由四边形表示(俩个三角形刚好组成一个四边形)。 在Unity中我们新建一个Cube,

    2024年02月06日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包