Unity Shader 学习笔记(一)

Unity Shader 学习笔记(一)——Shader基础 一、什么是Shader? 简单来说shader就是一个告诉计算机以某种方式描绘物体的程序。 二、编写语言 使用Nvidia CG语言、微软HLSL语言编写,但都包含在Unity的 ShaderLab 语言中。 三、常用的Shader类型 Vertex&Fragment Shader(顶点片元着色器):是最基本的,也是非常强大的一种类型。一般用于2D的物体以及场景或者做一些特效。 Surface Shader:在系统编译后是一个复杂的Vertex&Fragment .. 阅读详情

 _MainTex_ST

(1)简单来说,TRANSFORM_TEX(tex,name) (tex.xy * name##_ST.xy + name##_ST.zw)主要作用是拿顶点的uv去和材质球的tiling和offset作运算, 确保材质球里的缩放和偏移设置是正确的。(v.texcoord就是顶点的uv)下面这两个函数是等价的。

o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);
o.uv = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw;
(2)而_MainTex_ST的ST是ScaleTransform的缩写,声明_MainTex是一张采样图,也就是会进行UV运算。如果没有这句话,是不能进行TRANSFORM_TEX的运算的。_MainTex_ST.xy为 Tiling,zw为offset.如果Tiling 和Offset你留的是默认值,即Tiling为(1,1) Offset为(0,0)的时候,可以不用o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);换成o.uv = v.texcoord.xy;也是能正常显示的;相当于Tiling 为(1,1)Offset为(0,0),但是如下图自己填的Tiling值和Offset值就不起作用了

SV_POSITION和POSITION

SV_前缀的变量代表system value,在DX10以后的语义绑定中被使用代表特殊的意义,和POSITION用法并无不同。唯一区别是 SV_POSTION一旦被作为vertex shader的输出语义,那么这个最终的顶点位置就被固定了(不能tensellate,不能再被后续改变它的空间位置?),直接进入光栅化处理,如果作为fragment shader的输入语义那么和POSITION是一样的,代表着每个像素点在屏幕上的位置(这个说法其实并不准确,事实是fragment 在 view space空间中的位置,但直观的感受是如括号之前所述一般) 

在DX10版本之前没有引入SV_的预定义语义,POSITION被用作vertex shader的输入,输出,fragment shader的输入参数。但DX10之后就推荐使用SV_POSITION作为vertex shader的输出和fragment shader的输入了,注意vertex shader的输入还是使用POSITION!切记。但是DX10以后的代码依旧兼容POSITION作为全程表达,估计编译器会自动判断并替换的吧。

顶点转换函数
函数:描述:
float4 UnityObjectToClipPos(float3 pos)将一个点从object空间转换成相机在均匀坐标下的剪辑空间。这就相当于 mul(UNITY_MATRIX_MVP, float4(pos, 1.0)), 应该在它的位置上使用。
float3 UnityObjectToViewPos(float3 pos)将一个点从object空间转换为view空间。这就相当于mul(UNITY_MATRIX_MV, float4(pos, 1.0)).xyz, 应该在它的位置上使用。
通用的辅助函数
函数:描述:
float3 WorldSpaceViewDir (float4 v)输入一个给定的object空间顶点位置,返回世界空间中从该点到摄像机的观察方向。
float3 ObjSpaceViewDir (float4 v)输入一个给定的object空间顶点位置,返回object空间中从该点到摄像机的观察方向。
float2 ParallaxOffset (half h, half height, half3 viewDir)计算UV相对法线贴图的偏移量。
float3 WorldSpaceLightDir (float4 v)仅用于前向渲染,输入一个object空间顶点的位置,返回世界空间中从该点到光源的光照方向(不是标准化)。
float3 ObjSpaceLightDir (float4 v)

仅用于前向渲染,输入一个object空间顶点的位置,返回object空间中从该点到光源的光照方向(不是标准化)。

CCC数字钥匙Release 3实战:如何用BLE/UWB实现无钥匙进入(附避坑指南) 本文深入解析CCC数字钥匙Release 3标准下BLE/UWB无钥匙进入系统的开发实践,涵盖硬件选型、安全测距协议、时序同步等关键环节,并提供实战调试技巧与安全攻防案例。特别针对BLE芯片配置、UWB模块选型等常见陷阱给出解决方案,帮助开发者高效实现厘米级精度的数字钥匙系统。 阅读详情

相关推荐

Excel曲线拟合实战:从基础趋势线到高级回归分析

本文系统介绍了Excel曲线拟合的完整工作流,从基础的散点图与趋势线应用,到利用Solver插件进行自定义高级回归分析。文章详细讲解了线性、多项式、指数、对数等六大常用数学模型的适用场景与选择方法,并强调了通过R²值、残差图评估拟合效果、避免过拟合与外推风险的关键步骤,帮助读者掌握从数据探索到预测评估的实战技能。

weixin_29280219的博客 531

Unity_Shader_纹理贴图

tex2D(sampler2D samp, float2 s) 2D纹理采样,CG内置函数。 内部实现分为以下几步: 1. 用图片的宽高度乘以uv数值,得到像素坐标。widthPixel=samp.x*s.x;heightPixel=samp.y*s.y; 2. 因为取到的数值基本上都是带有小数点的,也就是说不是一个整数,这个时候,需要看图片的过滤设置了。也就是Unity3d的图片设置中...

9624 1570

R 绘制环形树状图

按大类小类的从属关系绘制环形图,并把不同值的节点设置为相应大小。要求同一类的节点应为同一颜色。 按照输入,处理代码和输出记录

weixin_43718786的博客 1872

(转)TRANSFORM_TEX详解

原创文章如需转载请注明:转载自风宇冲Unity3D教程学院                                特别讲:常见问题回答   本讲会陆续补充一些问题的解答。问: (1) TRANSFORM_TEX是做什么的 (2)float4 _MainTex_ST 中的_MainTex_ST变量也没有用到,为啥非要声明一下?     答: (1)简单来说,T...

weixin_34242658的博客 1086

3DSlicer冠脉分割实战:从DICOM导入到三维重建的完整流程(附常见问题解决)

本文详细介绍了使用3DSlicer进行冠脉分割的完整流程,从DICOM数据导入到三维重建,涵盖环境配置、视图优化、心脏区域分割及冠脉精细分割等关键步骤。针对常见问题提供实用解决方案,帮助医学影像从业者高效完成心血管结构分析,提升诊断准确性。

weixin_29271053的博客 627

matsim教程及其案例

MATSim 是一个强大的交通仿真工具,适合研究交通政策、出行行为优化和城市规划。建议从官方示例入手,逐步尝试修改参数和扩展功能。遇到问题时,优先查阅官方文档和社区讨论。(Multi-Agent Transport Simulation Toolkit)的教程和案例资源整理,涵盖基础入门、核心概念、实际应用案例及学习路径。MATSim 是一个开源的、基于多智能体的交通仿真框架,用于模拟城市交通系统中的出行行为、交通流量和交通政策影响。

weixin_70682362的博客 1092

关于Unity中的_MainTex_ST的一些疑惑

本文转载于:http://blog.sina.com.cn/s/blog_471132920101dayd.html 问: (1) TRANSFORM_TEX是做什么的 (2)float4 _MainTex_ST 中的_MainTex_ST变量也没有用到,为啥非要声明一下? 答: (1)简单来说,TRANSFORM_TEX主要作用是拿顶点的uv去和材质球的ti

大头狗的专栏 1万+

【Latex】【附安装文件】Miktex和TexStudio的安装与配置

这代表“构建并运行”,一般来说,我们只需要点这个按钮来运行Latex代码。保存一下代码文件,再运行一次,PDF文件会出现在与代码文件相同的文件夹下。安装完成后,你可能会跳转到一个页面中,你看到这个页面就意味着安装成功了。其实不需要你敲,你只要将下面的代码复制粘贴到你刚刚的文件中即可。成功安装MikTex后,我们需要进行更新,减少后续使用的麻烦。如果懂得将安装路径设置在你想要的盘中,你可以自己设置。双击上文的.exe文件后,你会看到如下画面。如果不懂,为避免不必要的麻烦,请直接点击“

未来就在脚下。 1万+

Unity Shader入门学习(1):基础shader

1.基础光照shader+贴图 Shader "01"{//这里指定的路径与名字与文件名名不要求一致 Properties{//属性 //格式:属性名(显示出来的属性名,类型)=默认值 _Color("Color",Color) = (1,1,1,1)//颜色 _Specular("Specular",Color) = (1,1,1,1)//高光颜色 _Gloss("Gloss",Range(8.0,256)) = 20//光泽度。(cos角的指数)。一般大于10 _MainT.

ljylmly的博客 7183

动态视频目标追踪系统:基于YOLOv11+DeepSORT的从入门到实战全流程指南

仅保留车辆类别(假设车辆类别ID为2)if det.class_index == 2: # 车辆类别ID通过本指南,你已完成从环境搭建数据准备模型训练到追踪系统与UI界面的全流程,搭建了一套完整的动态视频目标追踪系统。该系统在安防监控、交通管理等场景中具有实用价值,可实现目标的实时稳定追踪。未来,你可尝试结合多模态特征(如目标外观+运动特征)提升追踪鲁棒性,或探索轻量化模型部署(如TensorRT加速),让系统在边缘设备上也能高效运行。

LXY_LOVE36的博客 142

提交 ieee 手稿出现:Do not include the Reviewer PDF with my submission 怎么办

IEEE投稿Reviewer PDF选项说明 投稿时出现的"Do not include the Reviewer PDF with my submission"选项控制是否附带评审专用PDF文件。Reviewer PDF是系统自动生成包含所有投稿材料的完整PDF,用于同行评审。建议保持默认不勾选状态,除非确认编辑部不需要该文件,否则可能影响审稿流程。勾选表示不附带此PDF,不勾选则会正常生成并提交该评审文件。

ZhangJiqun&191cm&85kg 2170

shader基础知识之TRANSFORM_TEX和_MainTex_ST

我们在变量声明中是float4 _MainTex_ST _MainTex_ST.xy对应的是tiling 复制粘贴 _MainTex_ST.zw对应的是offset 位移 我们拿序列帧来举例 在一个贴图上有很多小的贴图 在unity中我们将tiling的uv设置为0.5 0.5 移动offset中的uv值,实现序列帧的移动 而TRANSFORM_TEX则是拿顶点的uv和材质球中的tiling和offset作运算,确保材质球中的缩放和偏移是正确的v.uv是顶点的uv 在vert函数中, o.u

vickieyy的博客 1496

【制作100个unity游戏之28】花半天时间用unity复刻童年4399经典小游戏《黄金矿工》(附带项目源码)

在游戏发展史上,有些游戏以其简单而耐玩的特性,深深地烙印在了玩家的记忆中。《黄金矿工》就是其中之一,它曾经在4399等游戏平台上掀起了一股游戏热潮。这款游戏不仅给无数玩家带来了欢乐,还让他们体验到了挖掘金矿的刺激与乐趣。在这个项目中,我们将花费半天的时间,利用Unity引擎,重新打造这款经典小游戏。通过复刻《黄金矿工》,我们不仅是在向童年的回忆致敬,更是在挖掘游戏设计的精髓。在这个过程中,我们将学习如何实现游戏的核心玩法,设计简洁而有效的游戏机制。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2900

【Unity】Unity Shader学习笔记(一)Unity Shader基础

Shader(着色器):是用来实现图像渲染的,用来替代固定渲染管线的可编辑程序,可以实现3D图形学计算中的相关计算,由于其可编辑性,可以实现各种各样的图像效果而不用受显卡的固定渲染管线限制。...

一个普普通通的游戏开发者 2420

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Shader学习笔记(一)认识Unity Shader,Unity Shader的基本结构

认识unity Shader,Unity Shader的基本结构

henger_的博客 934

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

unity之shader学习笔记(一)

unity shader学习笔记01篇

tong_fly的博客 9470

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

《Unity Shader入门精要》学习笔记一

本文介绍了Unity Shader的基础知识,包括渲染流水线、ShaderLab语法、数学基础和使用案例。主要内容包括:1. 渲染流水线分为应用阶段、几何阶段和光栅化阶段,说明了DrawCall、顶点着色器和片元着色器的作用。2. ShaderLab语法结构,包括Properties、SubShader、Pass等模块,以及四种Shader模板。3. 必要的数学知识,包括坐标系变换、矩阵运算和齐次坐标等。4. 实际编写案例,展示了顶点/片元着色器的基本结构、数据传递方式,以及如何使用属性参数和内置函数。

benben044的专栏 1572

Unity-shader学习笔记(一)

文章目录Unity-shader学习笔记(一)1 顶点着色器(Vertex Shader)2 片元着色器(Fragment Shader)3 逐片元操作(Per-Fragment Operation)3.1 模板测试3.2 深度测试3.3 合并4 CPU与GPU的并行工作5 Unity Shader5.1 使用Shader的常见流程5.2 在Unity中官方为我们提供了4种shader5.3 Unity Shader的基本结构5.3.1 命名规则5.3.2 Properties属性5.3.3 SubSha

weixin_45720322的博客 1228

【Unity Shaders】学习笔记之Shader简介(一)

一、Shader简介   Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出。绘图单元可以依据这个输出将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的Shader,以及对Shader的特定的参数设置,将这些内容(Shader及输入参数)打包存储在一起,得到的就是一个Material(材质)。之后,我们便可以将

程序员小毛驴的博客 2890

Unity Shader入门精要 学习笔记一

Unity Shader入门精要 学习笔记一前几章预计都是理论知识。涉及代码的也应该是很小一部分,在我想来。先把理论搞搞清楚。再去理解shader会好很多。所以祝福诸君程运昌荣!好了。开始记录学习笔记1.渲染流水线是什么?和shader有什么关联? “渲染流水线的最终目的是生成或者说是渲染一张二维纹理(2D图片),并显示在我们得屏幕上“ 以上实在某本资料上看到的说明。以下是个人理解 渲染流水线

东皇如是的博客 1219

Unity Shader学习笔记(一)

一、一个简单的顶点/片段着色器 (Unity2017)// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Custom/Chapter5-MyTest"{ Properties { //_MainTex ("Texture", 2D) = "white" {} } Su...

luojian200的博客 1240

Unity Shader学习笔记(一) shader的基础结构

Shader "Unlit/Shader_1" //shader 路径 { Properties //在这里写的东西都会呈现在Unity检视面板中,可在外部调节 格式:_Name("显示名称",Type) = defaultValue { _MainTex ("Texture", 2D) = "white" {} } //一个Shader中可以有多个SubShad

zjw1349547081的专栏 696

unity shader 学习笔记(一)

Unity3D Shader 可编程着色器 常用模板:(这里说明Unlit,standard surface 另算) 这里的着色器只能实现最基本的功能,即放置贴图Texture,以及通过Tiliing和Offset进行调整 // Unlit类型的着色器写在 Pass 通道内,一个显示效果可用多个 Pass 通道叠加表示 Shader "MyShader/NewUnlitShader" { Properties { _MainTex ("Texture", 2D) = "whi

weixin_48309738的博客 427

Unity:Shader学习笔记(一)——Shader Lab基础语法

一、Shader Lab语法基础 (一) Shader"name"{//name shader名字//定义的一些属性,定义在这里的会在属性查看器里面显示; //子着色器列表,一个Shader必须至少有一个子着色器; Subshaders:{...} //如果子着色器显卡不支持,就会降级,即Fallback操作; [Fallback] } (二)Properties定义 name(“display name”,type)=值; name:指的是属性的名字,Unity中用下划线开始_Name; displ

cHeShirE_的博客 439

Unity学习笔记-shader基础学习(一)

最近在看一个大佬的知乎专栏,并且自己跟着大佬的代码做了一遍,文章主要是关于图文混排的,所以写下这篇文章做个笔记。代码主要包括两部分,一部分是shader的,用来生成材质,另一部分是C#代码,使用shader,做一定修改之后,两者结合能够在屏幕上生成任意颜色、任意大小的纯色区域。首先是生成纯黑区域:shader部分:Shader "Custom/Learn" { Properties { _...

weixin_42275416的博客 491

Unity Shader unity文档学习笔记(一):了解顶点片元shader构造以及写第一个shader

首先创建一个shader 点击Create > Shader > Unlit Shader 创建顶点片头shader Shader "Unlit/NewUnlitShader" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Ta...

qq_43204246的博客 286
上一篇: Unity 滚轮实现UGUI ScrollView的缩放
下一篇: Unity Shader常见指令和标签
AdvancePikachu
博客等级 码龄10年 10粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值