unity shader学习练笔日记(一)

1、简单顶点/片元着色器

Shader "Unity Shaders Study/Day One/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  用模型空间的顶点坐标填充vertex变量float4 vertex : POSITION;//NORMAL  用模型空间的法线方向填充normal变量float3 normal : NORMAL;//TEXCOORD0  用模型的第一套纹理坐标填充texcood变量float4 texcood : TEXCOORD0;};		//使用一个结构体来定义顶点着色器的输出struct v2f{//SV_POSITION  pos里包含了顶点在裁剪空间中的位置信息float4 pos : SV_POSITION;//COLOR0  存储颜色信息fixed3 color : COLOR0;};//顶点着色器  输出结构中必须包含一个变量  SV_POSITION//SV_POSITION  顶点着色器的输出是裁剪空间中的顶点坐标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;}//片元着色器//SV_Target  把输出颜色存储到一个渲染目标中fixed4 frag(v2f i) : SV_Target{fixed3 c = i.color;//使用_Color属性来控制输出颜色c *= _Color.rgb;//将插值后的颜色显示到屏幕上return fixed4(c, 1.0);}ENDCG}}
}

在这里插入图片描述
2、假彩色图像可视化模型数据

Shader "Unity Shaders Study/Day One/FalseColor"
{SubShader{Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct v2f{float4 pos : SV_POSITION;fixed4 color : COLOR0;};v2f vert(appdata_full v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);//可视化法线方向o.color = fixed4(v.normal * 0.5 + fixed3(0.5, 0.5, 0.5), 1.0);//可视化切线方向o.color = fixed4(v.tangent.xyz * 0.5 + fixed3(0.5, 0.5, 0.5), 1.0);//可视化副切线方向fixed3 binormal = cross(v.normal,v.tangent.xyz) * v.tangent.w;o.color = fixed4(binormal * 0.5 + fixed3(0.5, 0.5, 0.5), 1.0);//可视化第一组纹理坐标o.color = fixed4(v.texcoord.xy, 0.0, 1.0);//可视化第二组纹理坐标o.color = fixed4(v.texcoord1.xy, 0.0, 1.0);//可视化第一组纹理坐标的小数部分o.color = frac(v.texcoord);if(any(saturate(v.texcoord) - v.texcoord)){o.color.b = 0.5;}o.color.a = 1.0;//可视化顶点颜色o.color = v.color;return o;}fixed4 frag(v2f i) : SV_Target{return i.color;}ENDCG}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聚观早报 | 蔚来推出油车置换补贴;iPhone 16 Pro细节曝光

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 4月02日消息 蔚来推出油车置换补贴 iPhone 16 Pro细节曝光 小米SU7创始版第二轮追加开售 OpenAI将在日本设立办事…

二百二十九、离线数仓——离线数仓Hive从Kafka、MySQL到ClickHouse的完整开发流程

一、目的 为了整理离线数仓开发的全流程,算是温故知新吧 离线数仓的数据源是Kafka和MySQL数据库,Kafka存业务数据,MySQL存维度数据 采集工具是Kettle和Flume,Flume采集Kafka数据,Kettle采集MySQL数据 离线数仓是Hi…

分布式任务调度框架XXL-JOB

1、概述 XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 官方文档:https://www.xuxueli.com/xxl-job/#%E4%BA%8C%E3%80%81%E5%BF%AB%E9%80%9F%E…

ENSP DHCP 配置不同网段

配置不同网段。 配置:192.168.80.254 192.168.10.254 192.168.20.254 给绑定信息选择网卡,出端口编号改为2,勾选双向通道,点击增加。 接下来把vmnet 1和vmnet 2 都按上图所示。 打开路由器,就开始配置。

文本自动粘贴编辑器:支持自动粘贴并筛选手机号码,让信息处理更轻松

在信息时代的浪潮中,文本处理已成为我们日常工作与生活的重要组成部分。无论是商务沟通、社交互动还是个人事务处理,手机号码的筛选与粘贴都显得尤为关键。然而,传统的文本处理方式效率低下、易出错,已无法满足现代人的高效需求。…

MegaSeg Pro for Mac v6.3.1 注册激活版 音视频DJ混音工具

MegaSeg Pro for Mac是一款专业的DJ和广播自动化软件,旨在为音乐专业人士提供强大的音乐播放和演播功能。这款软件具有多种功能,包括强大的音乐库管理,支持导入和组织大量音乐文件,可以轻松管理你的音乐收藏。它支持广泛的音频格式…

将excel数据拆分成多个excel文件

一、背景: 平时在日常工作中,经常需要将excel的文件数据进行拆分,拆分成多个excel文件,然而用人工来处理这个既耗时,又费精力,眼睛会疲劳,时间长了操作上会出现失误,导致数据拆分错…

【嵌入式硬件】光耦

1.光耦作用 光耦一般用于信号的隔离。当两个电路的电源参考点不相关时,使用光耦可以保证在两边不共地的情况下,完成信号的传输。 2.光耦原理 光耦的原理图如下所示,其内部可以看做一个特殊的“三极管”; 一般的三极管是通过基极B和发射极E间的电流,去控制集电极C和发射极…

OpenHarmony实战:Combo解决方案之ASR芯片移植案例

本方案基于 OpenHarmony LiteOS-M 内核,使用 ASR582X 芯片的 DEV.WIFI.A 开发板进行开发移植。作为典型的 IOT Combo(Wi-FiBLE)解决方案,本文章介绍 ASR582X 的适配过程。 编译移植 目录规划 本方案的目录结构使用 Board 和 So…

Mac上怎么合并多张图片?

Mac上怎么合并多张图片?上班过的小伙伴都应该知道,合并拼接图片是一件非常重要且经常需要使用到的图片处理技术,将多张图片合并拼成一张之后能够展现出更多的图片内容。在Mac电脑上,合并多张图片是一项常见的任务,无论…

大话设计模式之抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种方式来创建一系列相关或依赖对象的家族,而无需指定其具体类。该模式通过提供一个抽象工厂接口,定义了一组可以创建不同类型对象的方法&#…

JavaScript_与html结合方式

JavaScript_语法 ECMAScript&#xff1a;客户端脚本语言的标准 1.基本语法 1.1 与html结合方式&#xff08;2种&#xff09; 1. 内部JS 定义<script>,标签体内容就是js代码 2. 外部JS 定义<script>,通过src属性引入外部的 js文件 注意&#xff1a; 1.<script>…

【opencv】教程代码 —videoio(2)将两个视频的每一帧逐一读取并计算其PSNR 和MSSIM...

本教程开始介绍的源代码将对每一帧执行PSNR测量&#xff0c;并且只对PSNR低于输入值的帧进行SSIM测量。为了可视化的目的&#xff0c;我们在OpenCV窗口中展示两幅图像&#xff0c;并将PSNR和MSSIM值打印到控制台。期望看到如下内容&#xff1a; video-input-psnr-ssim.cpp 将两…

【“状态机” 解析UART不定长度的协议帧】

【“状态机” 解析UART不定长度的协议帧】 1. 数据帧格式2. 状态机原理3. 代码实现 通信设计中考虑协议的灵活性&#xff0c;经常把协议设计成“不定长度”。如果一个系统接收上述“不定长度”的协议帧&#xff0c;将会有一个挑战–如何高效接收与解析。一个实例如下图&#xf…

Linux (Ubuntu)- mysql8 部署

1.基本部署 01》》先查看OS类型&#xff0c;如果是Ubuntu在往下边看 rootspray:/etc/mysql/mysql.conf.d# lsb_release -a LSB Version: core-11.1.0ubuntu2-noarch:security-11.1.0ubuntu2-noarch Distributor ID: Ubuntu Description: Ubuntu 20.04.6 LTS Release: …

Spring AOP + 自定义注解 实现公共字段的填充

Spring AOP 自定义注解 实现公共字段的填充 代码冗,不利于后期维护. 定义操作这些字段的方法类型 实现步骤&#xff1a; 自定义注解AutoFill,用于表示操作这些公共字段的方法自定义切面类AutoFillAspect,统一拦截&#xff0c;通过反射获取方法入参&#xff0c;并填充公共字段…

springboot之MybatisPlus

文章目录 一、ORM二、mybatis实际操作三、mybatis-plus 一、ORM 简单来说ORM就是一个能够帮我们把java中Bean类映射到数据库中。 使用mybatis-plus。 配置架包 <!-- MyBatisPlus依赖 --><dependency><groupId>com.baomidou</groupId><art…

多态--下

文章目录 概念多态如何实现的指向谁调谁&#xff1f;例子分析 含有虚函数类的大小是多少&#xff1f;虚函数地址虚表地址多继承的子类的大小怎么计算&#xff1f;练习题虚函数和虚继承 概念 优先使用组合、而不是继承; 继承会破坏父类的封装、因为子类也可以调用到父类的函数;…

MyBatis-Plus04(条件构造器)

条件构造器和常用接口 wrapper介绍 Wrapper &#xff1a; 条件构造抽象类&#xff0c;最顶端父类 AbstractWrapper &#xff1a; 用于查询条件封装&#xff0c;生成 sql 的 where 条件 QueryWrapper &#xff1a; 查询条件封装 UpdateWrapper &#xff1a; Update 条件封装 A…

源支付V7开源版2.99,修复各种提示错误

源支付V7开源版2.99&#xff0c;修复各种提示错误 加密说明&#xff1a;200拿来的&#xff0c;只有8.1这个文件加密&#xff0c;其他文件无任何加密&#xff0c;已修复各种提示错误 测试其他开源版安装提示错误&#xff0c;有几个文件是加密的 注&#xff1a;开发不易&#…