UntiyShader(五)属性、内置文件和变量

news2024/11/28 19:40:15

目录

一、如何使用属性

例子

ShaderLab中的属性的类型和Cg中的变量的类型之间的匹配关系

二、Unity提供的内置文件和变量

内置的包含文件

内置的变量


一、如何使用属性

在一开始我们提到过,材质和UnityShader之间有着密切的练习,我们可以通过材质面板调节属性来达到我们需要的效果,而这些属性就需要写在Properties语义块中。

例子

在上一节的例子基础上,现在我们有这样一个需求,需要在材质面板中显示一个颜色拾取器来调节模型在屏幕上显示的颜色,我们修改上一节的代买如下:

Shader "Unity Shaders Book/Simple Shader"{
    Properties{
    //声明一个Color类型的属性
    _Color("Color Tint",Color)=(1.0,1.0,1.0,1.0)
    }
    SubShader{
        Pass{
            CGPROGRAM

            #pragma vertex vert
            #pragma fragment frag

            //在Cg代码中我们需要定义一个与属性名称和类型都匹配的变量
            fixed4 _Color;

                        //使用一个结构体来定义顶点着色器的输入
            struct a2v {
                //POSITION语义告诉Unity用模型空间的顶点坐标填充vertex变量
                float4 vertex:POSITION;
                //NORMAL语义告诉Unity用模型空间的法线方向填充normal变量
                float3 normal:NORMAL;
                //TEXCOORF0语义告诉Unity用模型的第一套纹理坐标填充texcoord变量
                float4 texcoord:TEXCOORD0;
            };

            //使用一个结构体来定义顶点着色器的输入
            struct v2f{
            //SV_POSITION语义告诉Unity,pos里包含了顶点在裁剪空间中的位置信息
            float4 pos:SV_POSITION;
            //COLOR0语义可以用于存储颜色信息
            fixed3 color:COLOR0;
            };

            v2f vert(a2v v){
            //声明输出结构
                v2f o;
                o.pos=UnityObjectToClipPos(v.vertex);
            //v.normal包含了顶点的法线方向,其分量范围在【-1.0,1.0】
            //下面的代码把分量范围映射到了[0.0,1.0]
            //存储到o.color中传递给片元着色器
               o.color=v.normal*0.5+fixed3(0.5,0.5,0.5);
               return o;

            }

            float4 frag(v2f i):SV_Target{
               fixed3 c=i.color;
               //使用_Color属性来控制输出颜色
               c*=_Color.rgb;
               return fixed4(c,1.0);
            }
            
            ENDCG
        }
    }
    }

效果:

代码解释:

在上面的代码中,我们先添加了Properties语义块,在里面声明了一个属性_Color,它的类型是Color类型,默认值是(1.0,1.0,1.0,1.0),即为白色。为了在Cg代码中访问它,我们还需要在Cg代码片段中提前定义一个新的变量,这个变量的名称和类型必须与Properties语义块中的属性定义相匹配

ShaderLab中的属性的类型和Cg中的变量的类型之间的匹配关系

ShaderLab属性类型Cg变量类型
Color,Vectorfloat4,half4,fixed4
Range,Floatfloat,half,fixed
2Dsampler2D
CubesamplerCube
3Dsampler3D

有时候Cg变量前面会有一个uniform关键字,如:

uniform fixed4 _Color;

uniform关键字是Cg中修饰变量和参数的一种修饰词,它仅仅用于提供一些关于该变量的初始值是如何指定和存储相关信息,在UnityShader中它可以省略。

二、Unity提供的内置文件和变量

顶点/片元着色的复杂之处在于很多事情需要我们自己动手,例如我们需要自己转换法线方向,自己处理光照、阴影等,为了便利开发,Unity内置了很多文件,这些文件包含了很多提前定义好的变量、函数和宏等。

内置的包含文件

包含文件(include file),这是类似于C++中头文件的一种文件。在Unity中,它们的后缀是.cginc。在编写Shader时,我们可以使用#include指令把这些文件包含进来,这样就可以使用Unity为我们提供的一些非常有用的变量和帮助函数。

如:

CGPROGRAM

//...

#include "UnityCG.cginc"

//...

ENDCG

内置的变量

之前在坐标变换中给出的一些内置变量(点击查看),同样也有一些摄像机参数的内置变量,后续遇到时会进行讲解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1348797.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前后台分离开发

前后台分离开发 简介 前后台分离开发,就是在项目开发过程中,对于前端代码的开发由专门的前端开发人员负责,后端代码则由后端开发人员负责,这样可以做到分工明确、各司其职,提高开发效率,前后端代码并行开…

OpenOCD简介和下载安装(Ubuntu)

文章目录 OpenOCD简介OpenOCD软件模块OpenOCD源码下载OpenOCD安装 OpenOCD简介 OpenOCD(Open On-Chip Debugger)开放式片上调试器 OpenOCD官网 https://openocd.org/,进入官网点击 About 可以看到OpenOCD最初的设计是由国外一个叫Dominic Ra…

Qt高质量的开源项目合集

文章目录 1.Qt官网下载/文档2.第三方开源 1.Qt官网下载/文档 Qt Downloads Qt 清华大学开源软件镜像站 Qt 官方博客 2.第三方开源 记录了平常项目开发中用到的第三方库,以及一些值得参考的项目! Qt AV 基于Qt和FFmpeg的跨平台高性能音视频播放框…

这本书没有一个公式,却讲透了数学的本质

这本书没有一个公式,却讲透了数学的本质! 《数学的雨伞下:理解世界的乐趣》。一本足以刷新观念的好书,从超市到对数再到相对论,娓娓道来。对于思维空间也给出一个更容易理解的角度。 作者:米卡埃尔•洛奈 …

汇川PLC(H5U):伺服电机点动控制

一、基本概念理解 伺服电机旋转一圈的脉冲数 伺服电机上都装有一个编码器,这个编码器用于产生脉冲,常见伺服电机转一圈一般是产生10000个脉冲。相当于电机转360,产生了10000个脉冲,那旋转1就产生10000/360 27.7个脉冲。同理&am…

SDG大数据平台简介

联合国可持续发展目标(Sustainable Development Goals)缩写SDGs,是联合国制定的17个全球发展目标,在2000-2015年千年发展目标(MDGs)到期之后继续指导2015-2030年的全球发展工作。(摘自百度&…

ROS安装PR2

一、PR2介绍 PR2是Willow Garage公司设计的机器人平台,也是目前科研领域经常用到的机器人之一。PR2有两条手臂,每条手臂七个关节,手臂末端是一个可以张合的夹爪;PR2依靠底部的四个轮子移动,在头部、胸部、肘部、夹爪上…

第 378 场周赛 解题报告 | 珂学家 | 分类讨论场

前言 整体评价 感觉是分类讨论场,t3用二分,是因为二分不会错,直接分类讨论容易WA. t4一开始看错题了,T_T, 看成翻转,写了半天StringHash, 还用上双hash,共8个StringHash。 重排的话,其实统计…

搜索引擎推广的实践技巧提升你的品牌影响力-华媒舍

搜索引擎推广是一种有效提升品牌影响力的推广策略。通过关键词优化、广告创意设计、定向投放和数据分析与优化等实践技巧,可以提高品牌的知名度、点击率和转化率。在实施引擎霸屏推广之前,还需对实践效果进行评估,以确保推广策略的有效性和适…

CMake入门教程【基础篇】在Windows、Linux上安装CMake

文章目录 windows平台第1步:下载CMake第2步:安装CMake第3步:验证安装第4步:初次使用第5步:构建和运行 Linux平台 windows平台 第1步:下载CMake https://cmake.org/ 首先,访问CMake官方网站。…

Python数据科学应用从入门到精通--Python读取、合并SPSS数据文件

在很多情况下,我们需要调用SPSS软件产生的数据,下面通过示例来进行讲解。首先需要将本书提供的数据文件存储在安装spyder-py3的默认路径位置(C:/Users/Administrator/.spyder-py3/,注意具体的安装路径可能与此不同)&am…

rsync的介绍与使用

rsync的介绍与使用 一、简介 rsync(remote synchronize)是Liunx/Unix下的一个远程数据同步工具。它能够以非常高效的方式传输和同步文件,它可以将一个目录的文件快速地同步到另一个目录,还可以通过网络快速同步多台主机间的文件…

2024年总结的前端学习路线分享(学习导读)

勤学如春起之苗,不见其增,日有所长 。辍学如磨刀之石,不见其损,日有所亏。 在写上一篇 2023年前端学习路线 的时候,时间还在2023年初停留,而如今不知不觉时间已经悄然来到了2024年,回顾往昔岁月…

基于Window下的Node.js安装教程

基于Window下的Node.js安装教程 1.安装包下载安装2.安装字蚁2.1压缩字体 写这篇文章,主要是方便自己以后再安装,容易查看,相关内容有参考网上内容和自己想法。 1.安装包下载安装 Node官网 进入终端查看: echo %PATH%ec…

【信息安全原理】——期末复习(冲刺篇)

📖 前言:快考试了,做篇期末总结,都是重点与必考点。 题型:简答题(45分)、协议分析题(210分)(给一个报文或工作流程,分析存在的问题)、…

【Leetcode】第 378 场周赛

文章目录 100166. 检查按位或是否存在尾随零题目题意代码 100185. 找出出现至少三次的最长特殊子字符串 I题目思路代码 100184. 找出出现至少三次的最长特殊子字符串 II 100166. 检查按位或是否存在尾随零 题目 题意 这里题目要求的是或运算,所以原数组中只需要有…

基于ssm的房屋租赁管理系统

功能介绍 房源信息模块: 房源信息展示、房源信息更新、房源信息增加、房源信息删除 账户管理模块: 账户登录、账户绑定、账户管理 租金结算模块: 每月租金信息、租金交付功能、月租金收入总额统计 房屋租赁合同管理模块: 房屋租赁…

LabVIEW开发滚动轴承故障诊断系统

LabVIEW开发滚动轴承故障诊断系统 在工业自动化和机械维护领域,滚动轴承的故障诊断是至关重要的。开发了一个基于LabVIEW的振动信号分析系统。这一系统集成了先进的信号处理技术,如经验模式分解(EMD)、Morlet小波滤波器和隐Marko…

Python 为UnityAndroid端自动化接入Tradplus广告SDK

Python 为UnityAndroid端自动化接入Tradplus广告SDK Tradplus介绍常规接入进入Android开发文档选择渠道配置生成接入代码人工依赖下载官网同版本的 Unity插件 使用自动化工具接入首次 你需要打两个标记来定位运行工具 控制台会列出最新的十个Tradplus版本 任选其一然后拖入项目…

OpenCV-Python(21):OPenCV查找及绘制轮廓

1.认识轮廓 1.1 目标 理解什么是轮廓学习掌握找轮廓、绘制轮廓等学习使用cv2.findContours()、cv2.drawContours()函数的用法 1.2 什么是轮廓 在OpenCV中,轮廓是图像中连续的边界线的曲线,具有相同的颜色或者灰度,用于表示物体的形状。轮廓…