织梦网站图片修改/上海seo排名

织梦网站图片修改,上海seo排名,门户网站建设目标,太原制作网站的公司Shader初学者的学习笔记 第二天 开始Unity Shader的学习之旅之熟悉顶点着色器和片元着色器 文章目录 Shader初学者的学习笔记前言一、顶点/片元着色器的基本结构① Shader "Unity Shaders Book/Chapter 5/ Simple Shader"② SubShader③ CGPROGRAM和ENDCG④ 指明顶点…

Shader初学者的学习笔记

第二天 开始Unity Shader的学习之旅之熟悉顶点着色器和片元着色器


文章目录

  • Shader初学者的学习笔记
  • 前言
  • 一、顶点/片元着色器的基本结构
    • ① Shader "Unity Shaders Book/Chapter 5/ Simple Shader"
    • ② SubShader
    • ③ CGPROGRAM和ENDCG
    • ④ 指明顶点着色器和片元着色器函数名称
    • ⑤ 顶点着色器
    • ⑥ 片元着色器
  • 二、模型数据从哪来?
    • ① a2v
    • ② 语义中的数据从何而来
    • ③ v2f
    • ④ 如何使用属性
  • 总结


前言

今天对入门精要第五章进行一个小小的总结和归纳,主要是学习顶点着色器和片元着色器的结构.


一、顶点/片元着色器的基本结构

Shader "Unity Shaders Book/Chapter 5/ Simple Shader"{SubShader														②{Pass{CGPROGRAM												③#pragma vertex vert										④#pragma fragment fragfloat4 vert (float4 : POSITION) : SV_POSITION			⑤{return mul (UNITY_MATRIX_MVP, v):}fixed4 frag() : SV_Target								⑥{return fixed4 (1.0, 1.0, 1.0, 1.0);}ENDCG}}
}

① Shader “Unity Shaders Book/Chapter 5/ Simple Shader”

该语句定义了Unity Shader的语义 – “Unity Shaders Book/Chapter 5/ Simple Shader”,这个名字有利于我们快速选择到自定义的Shader.

② SubShader

你会发现,我们没有声明任何的材质属性,因为Properties不是必须的, 同时在这个SubShader中没有Tags, RenderSetup等,因此SubShader会使用默认的渲染设置和标签设置.
并且我们在SubShader中定义的Pass也没有设置Tags和RenderSetup.

③ CGPROGRAM和ENDCG

我们把cg代码片段放在CGPROGRAM和ENDCG中;

④ 指明顶点着色器和片元着色器函数名称

#pragma vertex name1
#pragma fragment name2

name1, name2是我们自己指定的函数名,可以告诉Unity,name1包含了顶点着色器的代码,name2包含了片元着色器的代码,这个函数的名字不一定要使用vertex和frag,但是我们一般用使用这两个来定义函数,因为他们很直观.

⑤ 顶点着色器

float4 vert (float4 : POSITION) : SV_POSITION
{return mul (UNITY_MATRIX_MVP, v):
}

需要再提一次,顶点着色器是逐顶点执行的, vert函数的输入是float4类型的顶点位置,这是通过POSITION语义指定的,vert函数的输出也是float4类型的,即顶点在裁剪空间的位置,由SV_POSITION的语义指定的;
POSITION 和 SV_POSITION都是Cg/HLSL的语义,他们是不可忽略的,他们会告诉Unity输入和输出,例如:POSITION告诉Unity,将模型的顶点坐标填充到参数v中,SV_POSITION告诉Unity,顶点着色器的输出是裁剪空间的坐标,所以使用这些语义现在输入输出参数是非常有必要的.
再看顶点着色器的代码,这一句代码的含义就是将顶点坐标从模型空间转换到裁剪空间.
补充:UNITY_MATRIX_MVP矩阵是Unity内置的模型观察投影矩阵.

⑥ 片元着色器

fixed4 frag() : SV_Target
{return fixed4 (1.0, 1.0, 1.0, 1.0);
}

在片元着色器中,frag函数没有任何输入,他的输出是一个fixed4类型的变量,并且使用了SV_Target语义进行限定,SV_Target也是HSLSL中的一个系统语义,他等同于告诉渲染器,把用户的输出颜色存储到渲染目标中,这里将输出到默认的帧缓存中.
片元着色器的代码也很简单,返回一个白色的fixed4变量.

二、模型数据从哪来?

我们如果想要得到模型上的每个顶点的纹理坐标和法线方向,那么我们就不能只是将float4作为顶点着色器的输入了,我们就需要自己定义一个结构体,如下:

Shader "Unity Shaders Book/Chapter 5/ Simple Shader"
{Properties{_Color ("Color Tint", Color) = (1.0, 1.0, 1.0, 1.0)}SubShader{Pass{CGPROGRAM#pragma vertex vert#pragma fragment fragfixed4 _Colorstruct a2v{float4 vertex : POSITION;float3 normal : NORMAL;float4 texcoord : TEXCOORD0;}struct v2f{float4 pos : SV_Position;								fixed3 color : COLOR0;}v2f vert (a2v v) : SV_POSITION							{v2f o;o.pos = mul(UNITY_MATRIX_MVP, v.vertex);o.color = v.normal * 0.5 + fixed3 (0.5, 0.5, 0.5);return o;}fixed4 frag(v2f i) : SV_Target{fixed3 c = i.color;c *= _Color.rgb;return fixed4(c, 1.0);}ENDCG}}
}

① a2v

在上面的代码中,我声明了新的结构体a2v,这里面包含很多数据:模型空间的顶点坐标,法线方向,以及模型的第一套纹理坐标,这些都是通过特定的语义进行修饰的,unity支持的语义有:POSITION, TANGENT, NORMAL, TEXCOORD0, TEXCOORD1, TEXCOORD2, TEXCOORD3, COLOR等
注意:语义是不可以被忽略的

是不是很疑惑为什么要起名字为a2v,因为a是应用,v表示顶点着色器,a2v的意思就是从应用阶段到顶点着色器.

② 语义中的数据从何而来

这些语义的数据是从哪来的呢?他们其实是由Mesh Render组件剔红的,在每帧调用Draw Call的时候, Mesh Render组件会把它负责渲染的模型数据发送给Unity Shader.
我们知道,一个模型通常包含一组三角面片,每个三角面片由三个顶点组成,每个顶点又包含一些数据:顶点位置,法线,切线,纹理坐标,顶点颜色等,通过上面的方法,我们就可以在顶点着色器中访问顶点的模型数据了.

③ v2f

我们在顶点着色器进行了一些变换之后,希望把模型的法线,纹理坐标等传递给片元着色器,那么这个传递过程是怎样的呢?
我们首先定义了一个v2f的结构体,用于在顶点着色器和片元着色器之前传递信息,为了将模型渲染到屏幕上,我们必须在顶点着色器的输出中定义一个变量,他的语义是SV_POSITION,COLOR0一般用于存储颜色,也可由用户自行定义.

④ 如何使用属性

在上面的代码中,我们声明了属性:_Color,为了可以在cg中访问它,我们需要在Cg代码片段中提前定义一个名称和类型与Properties中属性相匹配的变量.
下面表格记录了属性的类型和变量类型的匹配关系

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

补充

uniform fixed4 _Color;

在上述Cg变量前,有uniform变量进行修饰,他仅仅用于提供一些关于该变量的初始值是如何指定和存储的相关信息,在Unity Shader中是可以省略的.


总结

今天我对第五章的顶点着色器和片元着色器的知识进行了总结,为以后复杂的Unity Shader的学习打下了坚实的基础!!!

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

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

相关文章

浔川社团官方联合会维权成功

在2025.3.2日,我社团检测文章侵权中,检测出3篇文章疑似遭侵权,随后,总社团联合会立即联系CSDN版权,经过17天的维权,至今日晚,我社团维权成功!侵权文章全部被设置为转载。 在此&…

介绍一个测试boostrap表格插件的好网站!

最近在开发一个物业管理系统。用到bootstrap的表格插件bootstrap table,官方地址: https://bootstrap-table.com/ 因为是英文界面,对国人不是很友好。后来发现了小书童网站 IT小书童 - 为程序员提供优质教程和文档 网站: IT小…

钉钉机器人

准备 参考官方文档 已经完成成为钉钉开发者流程。已经完成创建应用流程。已经完成添加应用能力流程 企业内部需要企业管理员开通权限,我自己创建了一个组织,用自己的组织创建机器人就方便很多,很多权限无需单独去申请了。 创建机器人 进…

Androidstudio实现引导页文字动画

文章目录 1. 功能需求2. 代码实现过程1. 编写布局文件2. 实现引导页GuideActivity 3. 总结4. 效果演示5. 关于作者其它项目视频教程介绍 1. 功能需求 1、引导页具有两行文字(“疫情在前”和“共克时艰”),和向上的 图标。 2、进入【引导页】…

在线生成自定义二维码

在线生成自定义二维码 1. 引言 二维码已成为现代互联网的重要工具,广泛应用于链接分享、支付、身份认证等场景。然而,很多在线二维码生成工具功能有限,难以满足个性化需求。如果你需要 自定义颜色、Logo、不同形状的二维码,那么…

蓝桥杯 之 第27场月赛总结

文章目录 习题1.抓猪拿国一2.蓝桥字符3.蓝桥大使4.拳头对决 习题 比赛地址 1.抓猪拿国一 十分简单的签到题 print(sum(list(range(17))))2.蓝桥字符 常见的字符匹配的问题,是一个二维dp的问题,转化为对应的动态规划求解 力扣的相似题目 可以关注灵神…

C 语 言 --- 扫 雷 游 戏(初 阶 版)

C 语 言 --- 扫 雷 游 戏 初 阶 版 代 码 全 貌 与 功 能 介 绍扫雷游戏的功能说明游 戏 效 果 展 示游 戏 代 码 详 解game.htest.cgame.c 总结 💻作 者 简 介:曾 与 你 一 样 迷 茫,现 以 经 验 助 你 入 门 C 语 言 💡个 人 主…

车载以太网网络测试-21【传输层-DOIP协议-4】

目录 1 摘要2 DoIP entity status request/response(0x4001、0x4002)2.1 使用场景2.2 报文结构2.2.1 0x4001:DoIP entity status request2.2.2 0x4002:DoIP entity status response 3 Diagnostic power mode information request/…

CH347使用笔记:CH347结合STM32CubeIDE实现单片机下载与调试

目录 基于 STM32CubeIDE的 CH347 JTAG/SWD调试器使用说明1. CH347驱动安装与配置2. STM32CubeIDE调试器配置2.1 打开相关工程后,进行以下操作2.2 openocd.exe替换2.3 脚本添加2.4 更改调试器选择 3. 下载程序4. 使用过程中可能遇到的问题4.1 CH347未插入4.2 Openocd…

LVGL常用功能备忘

概述 本文选用LVGL 8.3版本 8.3版本实测帧率比起9版本高,多个GUI工具支持 相关链接 LVGL官网 https://lvgl.io/ LVGL 文档 https://docs.lvgl.io/8.3/ LVGL仓库 https://github.com/lvgl LVGL移植 获取源码 https://github.com/lvgl/lvgl/tree/release/v8.3 下载文件即可 文件…

k8s搭建kube-prometheus

后续再补一个k8s集群搭建的博客,从0开始搭建k8s集群。使用kube-prometheus非常方便,主要问题只在于拉取镜像。除了拉取镜像外其他时间5分钟即可。耐心等待拉取镜像。 一.kube-prometheus简介 kube-prometheus 是一个专为 Kubernetes 设计的开源监控解决…

vue3:十一、主页面布局(优化页面跳转方式)

:router"true" 一、参考文章 vue3:十一、主页面布局(实现基本左侧菜单右侧内容效果)-CSDN博客 参考上述文章可知,页面跳转是通过在js中定义的菜单中携带的path,然后通过菜单的点击事件完成的跳转,现在可以进行优化,直…

Etcd 服务搭建

💢欢迎来到张胤尘的开源技术站 💥开源如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 Etcd 服务搭建预编译的二进制文件安装下载 etcd 的…

EmbodiedSAM:在线实时3D实例分割,利用视觉基础模型实现高效场景理解

2025-02-12,由清华大学和南洋理工大学的研究团队开发 一种名为 EmbodiedSAM(ESAM)的在线3D实例分割框架。该框架利用2D视觉基础模型辅助实时3D场景理解,解决了高质量3D数据稀缺的难题,为机器人导航、操作等任务提供了高…

信创-人大金仓数据库创建

一. 官文 资源下载地址 https://download.kingbase.com.cn/xzzx/index.htm 下载安装文件 下载授权文件 产品文档地址:https://help.kingbase.com.cn/v8/index.html 二. 概念 2.1 体系结构 ‌ 实例结构 ‌:由数据库文件和 KingbaseES 实例组成。数据…

HCIA-AI人工智能笔记3:数据预处理

统讲解数据预处理的核心技术体系,通过Python/Pandas与华为MindSpore双视角代码演示,结合特征工程优化实验,深入解析数据清洗、标准化、增强等关键环节。 一、数据预处理技术全景图 graph TD A[原始数据] --> B{数据清洗} B --> B1[缺…

G-Star 校园开发者计划·黑科大|开源第一课之 Git 入门

万事开源先修 Git。Git 是当下主流的分布式版本控制工具,在软件开发、文档管理等方面用处极大。它能自动记录文件改动,简化合并流程,还特别适合多人协作开发。学会 Git,就相当于掌握了一把通往开源世界的钥匙,以后参与…

WEB攻防-PHP反序列化-字符串逃逸

目录 前置知识 字符串逃逸-减少 字符串逃逸-增多 前置知识 1.PHP 在反序列化时,语法是以 ; 作为字段的分隔,以 } 作为结尾,在结束符}之后的任何内容不会影响反序列化的后的结果 class people{ public $namelili; public $age20; } var_du…

把生产队的大模型Grok 3 beta用来实现字帖打磨

第一个版本,就是简单的田字格,Grok 3 beta 思考了15s就得到了html前端代码,javascript; 然而还不完美; 第二个版本,进一步,通过pinyin项目给汉字加上注音,米字格和四线格;&#xff…

windows+ragflow+deepseek实战之一excel表查询

ragflows平台部署参考文章 Win10系统Docker+DeepSeek+ragflow搭建本地知识库 ragflow通过python实现参考这篇文章 ragflow通过python实现 文章目录 背景效果1、准备数据2、创建知识库3、上传数据并解析4、新建聊天助理5、测试会话背景 前面已经基于Win10系统Docker+DeepSeek+…