- 博客(25)
- 收藏
- 关注
原创 学习100个Unity Shader (18) --- 几何着色器(Geometry Shader)
几何着色器是图形渲染管线中的可选阶段,位于顶点着色器和片段着色器之间,用于处理图元并生成新的图元。其编写格式包括指定最大顶点数、输入图元类型和输出流类型。几何着色器可以输出不同类型的图元,如点、线、三角形等。通过Append函数将输出数据追加到流中,并使用RestartStrip重置输出流。举例中,几何着色器将每个顶点扩展为一个立方体,展示了其在实际应用中的强大功能。
2024-05-27 21:15:06
1369
原创 学习100个Unity Shader (17) --- 深度纹理
本文介绍了在Unity中如何通过摄像机生成深度纹理,并利用Shader进行后处理。首先,在C#脚本中通过cam.depthTextureMode = DepthTextureMode.Depth;启用深度纹理。接着,在Shader中使用_CameraDepthTexture访问深度纹理,并通过SAMPLE_DEPTH_TEXTURE对深度纹理进行采样。Linear01Depth函数将深度值转换为0到1之间的线性深度。C#脚本需要挂载在相机上,确保深度纹理的生成和处理。本文还提供了相关代码示例和参考文档,帮助
2024-05-09 17:32:44
530
原创 学习100个Unity Shader (16) --- 程序纹理简述
程序纹理是通过代码生成的纹理,用于在材质中生成图像。在Unity中,可以通过C#脚本将程序生成的纹理传递给Shader中的纹理属性,如_MainTex。具体步骤包括获取渲染器组件、创建Texture2D对象、生成纹理数据,并通过material.SetTexture方法将纹理应用到材质上。这种方法允许开发者动态生成和修改纹理,适用于各种视觉效果和实时渲染需求。参考书籍《Unity Shader入门精要》提供了更深入的学习资源。
2024-04-29 17:02:25
421
1
原创 学习100个Unity Shader (15) ---透明+双面渲染
本文介绍了一个名为“AlphaBlendBothSided”的Shader示例,用于实现透明度混合效果。该Shader通过两个Pass分别渲染物体的背面和正面,确保透明度混合的正确显示。第一个Pass使用Cull Front剔除正面,仅渲染背面;第二个Pass使用Cull Back剔除背面,仅渲染正面。通过_AlphaScale参数可以控制透明度。由于关闭了深度写入,因此需要两个Pass来确保渲染顺序。此外,文中还解释了Cull命令的三种状态:Back(默认剔除背面)、Front(剔除正面)和Off(不剔除
2024-04-26 09:40:29
867
原创 ShaderLab的混合命令
混合因子的命令:Blend SrcFactor DstFactor, (SrcFactorA) (DstFactorA),当只有前两项命令时,认为SrcFactorA = SrcFactor 和 DstFactorA = DstFactor。混合需要使用两个等式,通过Blend命令开启混合,并设置混合等式中的【操作】和【因子】。表格引用自——冯乐乐《Unity Shader入门精要》表格引用自——冯乐乐《Unity Shader入门精要》冯乐乐《Unity Shader入门精要》
2024-04-25 20:24:37
519
1
原创 学习100个Unity Shader (14) ---透明效果
本文介绍了渲染队列、透明度测试和透明度混合的概念及其在Shader中的实现。渲染队列通过索引号决定渲染顺序,索引号越小越早渲染。透明度测试通过舍弃透明度低于阈值的片元,保留高于阈值的片元进行深度测试和写入。透明度混合则通过混合当前片元的透明度与颜色缓冲中的颜色,实现半透明效果,需关闭深度写入但保持深度测试。文中还提供了透明度测试和透明度混合的Shader代码示例,展示了如何通过Shader实现这些效果。
2024-04-25 14:44:43
1262
1
原创 学习100个Unity Shader (13) ---遮罩纹理(mask texture)
通常用于法线映射,存储模型顶点的法线,模型的每个顶点,它都有一个属于自己的切线空间 这个切线空间的原点就是该顶点本身,而轴是顶点的法线方向 (n) 轴是顶点的切线方向 (t),可由法线和切线叉积而得,也被称为是副切线 bitangent, b) 或副法线对应的纹理的叫切线空间的法线纹理。在不同变换中使用的顶点变换矩阵Ma,不能直接用于顶点的法线,两个变换矩阵的关系为,新的矩阵为Ma的转置逆矩阵。让一些地方免于修改,比如不是所有地方都用同样的高光反射。《Unity Shader入门精要》冯乐乐。
2024-04-22 20:27:04
941
原创 学习100个Unity Shader (12) --- 高光反射光照模型
本文介绍了Unity中的高光反射和漫反射光照模型,并提供了逐顶点和逐像素光照的Shader实现。高光反射模型通过反光度和视角方向计算镜面反射效果,反光度越大亮点越小。漫反射模型则通过顶点法线和入射光方向计算漫反射光。逐顶点光照在顶点着色器中计算光照效果,逐像素光照则在片元着色器中进行计算,后者通常能提供更细腻的光照效果。文章还展示了如何在Shader中使用Unity内置变量和函数来实现这些光照模型。
2024-04-17 19:39:05
333
2
原创 Unity Shader的类型
光线追踪着色器是一种实验性的程序,其扩展名为“.raytrace”。我们可以使用这种类型的程序来替代处理光线投射算法的“.compute”类型着色器,例如全局光照、反射、折射或焦散。“Lit”一词指的是受到照明影响的材料,“Unlit”则相反。Unlit shader指的是基本的颜色模型,通常是我们创建效果的基础结构。这种类型的程序的特点是在图形卡上运行,不在正常的渲染管线中,其结构与先前提到的着色器非常不同。与普通着色器不同,它的扩展名是“.compute”,其编程语言是HLSL。
2024-04-15 17:14:46
846
原创 学习100个Unity Shader (11) --- 滚动纹理(通过修改UV值)
本文介绍了一个名为“ScrollingUVs”的Shader,用于在Unity中实现纹理的滚动效果。Shader通过_ScrollXSpeed和_ScrollYSpeed参数控制纹理在X和Y轴上的滚动速度,利用_Time变量随时间改变UV坐标,从而实现动态滚动效果。tex2D()函数用于采样纹理颜色。该Shader适用于简单的贴图纹理效果,相关代码和解释可参考Unity Shader编程资料。
2024-04-11 20:21:07
860
1
原创 学习100个Unity Shader (10) --- 全息效果(透明)
本文介绍了一个名为“Holograhic”的Shader,用于实现全息效果。Shader的主要属性包括颜色、主纹理和边缘效果参数。通过Tags标签,Shader被配置为透明渲染队列,并忽略投影器的影响。在surf函数中,通过计算视角方向与法线的点积,确定边缘的透明度,从而实现全息效果。越接近边缘,透明度越高。该Shader适用于需要半透明效果的渲染场景,参考了Unity官方文档和相关书籍。
2024-04-11 19:16:04
674
原创 学习100个Unity Shader (9) --- 自定义雾效(finalcolor)
本文介绍了一种通过Shader实现雾效的方法。使用Unity的Shader语言,通过finalcolor指令在表面着色器中添加雾效。顶点着色器myvert计算顶点在裁剪空间中的位置,并生成雾的强度值fog,该值随顶点靠近屏幕边缘而增大。片段着色器mycolor利用线性插值(lerp)将原始颜色与雾颜色混合,混合系数由fog值决定。最终,Shader通过_FogColor属性控制雾的颜色,实现了根据屏幕位置动态调整的雾效。
2024-04-10 19:00:33
1543
原创 学习100个Unity Shader (8) ---法线挤出
v) 提供顶点的位置、切线、法线、四个纹理坐标和颜色数据。所有顶点朝法线方向移动_Amount。
2024-04-10 14:49:02
260
原创 学习100个Unity Shader (7) ---切片Shader
这篇文章介绍了一个名为“Slices”的Shader示例,展示了如何在Unity中使用表面着色器实现切片效果。Shader代码中定义了_MainTex和_BumpMap两个纹理属性,并通过clip()函数根据顶点的世界坐标worldPos进行片段裁剪,生成切片效果。frac()函数用于获取数值的小数部分,结合worldPos的Y和Z坐标,生成一个0到1的值,并通过减去0.5将其范围调整为-0.5到0.5。最终,Shader通过tex2D函数将纹理和法线贴图应用到表面。文章还提供了Unity官方文档的参考链接
2024-04-10 13:45:41
362
原创 学习100个Unity Shader (6) --- 立方体纹理Cubemap
在图形学中,立方体纹理(Cubemap)是环境映射(Environment Mapping)的一种实现方法。环境映射可以模拟物体周围的环境,而使用了环境映射的物体可以看起来像锁了层金属一样反射出周围的环境。
2024-04-09 15:53:28
363
原创 学习100个Unity Shader (5) --- 细节纹理Detail Texture
细节纹理 (Detail texture) 是一种细小精致的纹理图案,主纹理上覆盖第二组纹理,这样做的原因是允许材质在近距离观察时具有清晰的细节,同时在从更远处观察时具有正常的细节级别,而不必使用单个极高的纹理贴图来实现两个目标。细节纹理的典型用途为:为角色的皮肤添加皮肤细节,如毛孔和毛发在砖墙上添加微小的裂缝和地衣生长效果为大型金属容器添加小划痕和磨损。
2024-04-09 13:58:03
806
原创 学习100个Unity Shader (4) ---边缘光照Rim Lighting
的区别,Albedo 是指表面的基础颜色,也称为漫反射颜色,Emission 是指表面的自发光属性。其原理是,点积等于视角和法线夹角的cos值,cos的值域是1-0,1-cos就成了0-1,在夹角90度时达到最大值,其实就是,当视线看向物体边缘的时候,视线与边缘的顶点法线是垂直的,这个值越大,边缘光越明显。这一过程的目的是得到视线和表面法线之间的夹角,然后将其映射到 0 到 1 的范围内,再取反,得到的值表示了视线与表面法线之间的夹角的补角,即边缘光的强度。属性,从而让该表面产生边缘光的效果。
2024-04-08 19:16:21
719
原创 学习100个Unity Shader (3) ---法线纹理实现凹凸效果
为UnityCG.cginc内置的函数,用于将压缩的法线向量解压缩为一个三维向量。法线向量通常用来描述表面的法线方向,即表面垂直于其上的方向。在3D图形学中,法线向量通常是单位长度的向量,用于计算光照和阴影等效果。其他部分解释参考:[学习100个Unity Shader (2) —实现最简单贴图纹理],(https://blog.youkuaiyun.com/weixin_43975743/article/details/137469104)。Unity中,法线向量可以使用特殊的纹理格式进行压缩存储,以减少内存消耗。
2024-04-08 16:44:14
589
原创 学习100个Unity Shader (2) ---实现最简单贴图纹理
记录自己学习unity shader的记录,学习shader道阻且长,贵在坚持。
2024-04-07 19:05:18
500
原创 Unity3D项目集成Android原生工程进行App开发(二)
文章目录前言一、Unity项目与Android工程的集成二、Android与Unity工程通讯1.编写Unity端通信接口总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。一、Unity项目与Android工程的集成 将Unity3D项目集成Android原生工程进行App开发(一)中生成的两个(Unity2019)或一个(Unity2018)Unity工程.aar文件拷贝
2021-08-17 09:08:30
769
原创 Unity3D项目集成Android原生工程进行App开发(一)
文章目录前言一、Unity项目导出为安卓工程二、Unity工程导出为aar总结参考前言 Unity3D在三维显示,AR开发上都有很多工具而且很方便,有一个App开发项目需要用Unity3D负责三维显示部分功能。本方法使用将Unity项目以.arr文件集成安卓原生工程。本文涉及的软件版本为:Android Studio 4.1.1 和Unity2018.3.14f1 / Unity2019.4.16f1c1一、Unity项目导出为安卓工程 假设Unity已经配置好了Andro
2021-03-16 08:08:52
2776
原创 使用Matlab根据灰度图阈值生成三维图
使用Matlab根据灰度图阈值生成三维图代码结果参考代码function grayto3d() figure(1) imshow('1.jpg') %900 X 600 X 3 hold on img=imread('1.jpg'); img=rgb2gray(img); img=double(img(1:900,1:600)); x=1:1:600; y=900:-1:1; %一开始使用1:1:900,后发现图上下颠倒了,因为Matlab
2020-06-18 10:49:39
1863
1
原创 在Linux服务器安装Unity3D
在Linux服务器安装Unity3D说明Unity Hub功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入说明我想通...
2020-05-28 22:09:40
1768
原创 学习笔记C#实现UDP通讯
学习笔记C#实现UDP通讯准备Server端代码Client端代码注意最后效果准备使用VS2019新建两个工程,名为“Server”和“Client”。Server端代码namespace Server{ class Program { static void Main(string[] args) { string recevieString = null; byte[] recevieData =
2020-05-28 21:56:01
365
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅