自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 unityshader自己学习笔记--光照--不同世界向量导致的bug

可以看到,N使用的是模型空间的法向量,L是世界空间的光照方向。两个向量不在一个坐标。

2023-04-18 14:52:49 85

原创 unityshader自己学习笔记--光照--2.漫反射与环境光.md

法向量和顶点指向光源的向量的点积(dot)== cos角度。

2023-04-18 14:50:46 95

原创 unityshader自己学习笔记--光照--法向量与光照

可以根据向量点乘计·算出两条向量的夹角,再通过jcos夹角计算出三角面的颜色。向量的叉乘可以求出平面的垂直法向量。法向量根据左手螺旋定则判断正方向。法向量对于计算光照是至关重要的。而且叉乘时要注意左手螺旋定则。

2023-04-18 14:44:15 116

原创 unityshader自己学习笔记--vertex shader--顶点转换

将顶点转为视口需要注意的是,unity的矩阵顺序是反的,也就是:视口–相机—世界验证猜想,脚本中模型可以着色。

2023-04-18 14:37:21 118

原创 unityshader自己学习笔记--vertex shader--顶点转换

将顶点转为视口需要注意的是,unity的矩阵顺序是反的,也就是:视口–相机—世界验证猜想,脚本中模型可以着色。

2023-04-18 14:36:35 86

原创 unityshader自己学习笔记--vertex shader--uniform

注意,效果需要运行起来才能看到。将shader和脚本连接起来。

2023-04-18 14:20:36 69

原创 unityshader自己学习笔记--vertex shader--1.顶点数据的输入输出

而且,从顶点到线段的过程中,所需要的数据是无法确定的,所以没有v2f的模板,但是模型到顶点的模板是有的。而且下面即使没有导入该结构体,只要有相关语义,就可以。可以将objPos的语义改成任何没有重复的语义比如。但是这样写不是很优雅,此时,我们就可以用到结构体。要注意的是,如果选择return,那么必须带。如果想返回多个数据,比如我想将模型坐标输出。没有使用和初始化的参数,它自己会有默认值。此时不能简单的写成下面的样子。因为使用了相同的语义。,所以无法正常使用了。而且可以给结构体别名。

2023-04-18 14:08:47 263 1

原创 unityshader自己学习笔记--基础知识--光照算法演变过程

不同的光照shader,同条件下会有不一样的结果。

2023-04-18 14:06:46 49

原创 unityshader自己学习笔记--基础知识--5.if判断和不规则炫彩球案例

pass已经是循环,不用再写for。

2023-04-18 14:04:28 185

原创 unityshader自己学习笔记--基础知识--顶点着色器输出和片元着色器输入

顶点着色器需要输出顶点的最终裁剪空间位置,以便 GPU 知道屏幕上的栅格化位置以及深度。此输出需要具有 语义,并为 类型。顶点着色器生成的所有其他输出(“插值器”或“变化”)都是您的特定着色器需要的。从顶点着色器输出的值将在渲染三角形的面上进行插值,并且每个像素的值将作为输入传递给片元着色器。许多现代 GPU 并不真正关心这些变量的语义;然而,一些旧系统(最主要的是 Direct3D 9 上的着色器模型 2 GPU)存在关于语义的特殊规则:为了获得最佳的跨平台支持,应将顶点输出和 片元输入标记为 语义

2023-04-18 14:02:54 386

原创 unityshader自己学习笔记--基础知识--float4和散开正方体案例

HLSH的基本数据类型定义了float、int和bool等非向量类型,但是它们实际上都会被Complier转换成float4的向量, 只要把float4向量的其中3个数值忽略,就可以把float4类型作为标量使用。注意,Shader中的所有的变量都使用寄存器,没有其他内存空间可以使用,所以越大的数组会占用越多的寄存器,甚至会超出寄存器的数量限制。在unity内部,通过矩阵的方式来描述这些点,一般情况下我们觉得 3*3的矩阵就能够描述一个点了,但是这样的点是没有办法进行变换的 : 旋转、缩放还有平移。

2023-04-13 03:13:20 514

原创 unityshader自己学习笔记--基础知识--VScode

编译一般选择VScode这种轻量级别的IDE。

2023-04-13 03:13:15 109

原创 unityshader自己学习笔记--基础知识--surface实现颜色改变

POSITION 表示模型空间顶点位置SV_POSITION 表示投影空间的顶点位置下方顶尖函数的意思是:传入一个模型空间的函数,转出一个投影空间的函数片元函数的为:颜色乘亮度值//直接调用Unity提供的函数转换到投影空间 return UnityObjectToClipPos(v);} //指定的片元着色器 //SV_Target 表示最后输出的颜色 fixed4 frag() : SV_Target {这个shader的效果为颜色的变化跟着亮度走。

2023-04-13 03:12:17 245

原创 unityshader自己学习笔记--基础知识--surface

分别为颜色,主纹理,高光度,金属光泽度surface不需要pass,因为surface本来就死打包好的一种形式,pass也被打包了为调整透明度,如果是透明物体会先渲染为代码块,代表在ENDCG前,都使用的CG语言为指令,后面跟着surface代表这个shaderlab的编译方式为可以随意起名,代表后面的函数名称(surfFuction)Standard为光照模型的一种,也是一种函数,是基于物理的光照计算为生成阴影的一种选择之一3.0使用硬件的等级,等级越高越好看声明_MainTex纹理的结构体。

2023-04-13 03:10:49 166

原创 unityshader自己学习笔记--基础知识--固定管线刨析

需要注意,如果想将外部的颜色直接赋值给shader的color,要使用。上,它是代表顶点着色后光照的颜色,不包括贴图,所以这里应该使用。此时虽然可以改颜色,但是看起来只是个简单的二维球形。可以看到,大面积的反射高光明显不是我们想要的。该纹理使用时没用到之前设置的光照数值,是因为。都是0-1的数值,所以最后的显示颜色灰暗一些。只能加载一个纹理,所以多纹理混合可以多写几个。此时发现无论改什么颜色,球体都是纯白色。此时所看到的颜色就是物体自身的颜色。但是可以看到没有任何反应,问题出在。加上double会改善。

2023-04-13 03:06:30 82

原创 unityshader自己学习笔记--基础知识--shaderLab

使用这种格式,可以让三种shader都适用。

2023-04-13 03:05:19 31

原创 unityshader自己学习笔记--CG语言--CG函数库

当你使用的纹理函数允许你指定一个深度比较值的时候,与之相关联的纹理单元必须被设置成深度比较纹理。否则,深度比较实际上不会被执行。

2023-04-13 03:00:08 136

原创 unityshader自己学习笔记--CG语言--CG函数

在CG中,所有的传参都是浅拷贝因为所有形参都是浅拷贝,所以最简单的操作就是使用out,意思是这个运算结果直接在原函数中输出。

2023-04-06 14:45:38 73

原创 unityshader自己学习笔记--CG语言--CG语法

循环不能超过1024次。

2023-04-06 14:44:57 33

原创 unityshader自己学习笔记--CG语言--CG数据结构

一般来说,cg的源代码都会在文件首部定义两个结构体,分别用于定义输入和输出的类型,这两个结构体定义与普通的c结构定义不同,除了定义结构体成员的数据类型外,还定义了该成员的绑定语义类型,所谓绑定语义类型是为了与宿主环境进行数据交换的时候识别不同数据类型的。结构体的声明以关键字struct开始,然后紧跟结构体的名称,接下来是一个大括号,并以分毫结尾(不要忘了分号)。例如,定义一个名为myAdd的结构体,包含一个成员变量,和一个执行相加的功能的成员函数,然后声明一个该结构体类型的变量。不过目前的Cg 语言中的。

2023-04-06 14:36:41 119

原创 unityshader自己学习笔记--CG语言--CGprofile

一个 Cg profile定义了一个“被特定图形硬件或API不同的图形硬件对应着不同的功能子集。这些可选的语言功能包括某些控制结构和标准函数库。profile还定义了数据类型的精度,并且指定数据类型是否全部或仅部分支持。profile按住功能可以划分为顶点profile和片段profile,而顶点profile和片段profile又基于opengl和directx的不同版本或扩展,划分为各种版本。从某种意义上而言,opengl和dirextx的发展历程成就了cg语言。

2023-04-06 14:36:39 85

原创 unityshader自己学习笔记--CG语言--CG框架

可以看到,vert的POSITION输出在frag中没有使用,是因为POSITION作为顶点语义输出,是一个非常特殊的语义,不需要直接在片段程序中直接使用它,它会被图形硬件直接做一个正确的处理和显示,所以在frag中我们只需要区关注颜色。此时的shader没有任何意义,是因为数据需要进入顶点shader计算过后,输出到片元shader进行最终的计算,而此时没有任何数据输入输出。正常代码入口都有main函数,而CG中,这个main函数名字不固定,可以自己起名,但是需要在前部分声明。表述引擎为我们的输入。

2023-04-06 14:31:22 121

原创 unityshader自己学习笔记---shader扫盲---什么是unityshader

从生成的代码上来看,也全部是用的Vertex/Fragment Shader,那是不是可以理解为在今后的可编程渲染管线中,Unity自己也抛弃了Surface Shader,而全部采用了Vertex/Fragment Shader。但是Surface Shader也有它的局限性,就是Vertex/Fragment Shader能实现的效果,Surface Shader不一定能实现,反过来则成立,Surface Shader能实现的Vertex/Fragment Shader则一定可以实现。

2023-04-06 14:26:03 59

原创 unityshader---shader扫盲---GPU发展史

2023-04-06 14:22:38 29

原创 unityshader---shader扫盲---材质与贴图的关系

2023-04-06 14:15:22 36

原创 unityshader---shader扫盲---unity渲染流程

2023-04-06 14:13:53 42

原创 unityshader学习笔记shader扫盲---什么是shader

Shader其实就是专门用来。

2023-04-06 14:09:01 817 1

原创 指针的初讲

初步讲解指针

2022-05-27 23:31:51 73

原创 2.地址的初步认识

地址的小知识

2022-05-26 01:04:37 317

原创 变量的深入了解

对于变量在内存中的变化 进行一个较深度的刨析

2022-05-25 00:24:00 52

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除