Shader
rrtt_2323
d=====( ̄▽ ̄*)b
展开
-
unity shader 里的那些流程控制宏
// HLSL attributes#if defined(UNITY_COMPILER_HLSL) #define UNITY_BRANCH [branch] #define UNITY_FLATTEN [flatten] #define UNITY_UNROLL [unroll] #define UNITY_LOOP [loop] #define UNITY_FASTOPT [fastopt]#else #define .原创 2022-03-22 12:24:01 · 5222 阅读 · 0 评论 -
法线变换需要右乘矩阵,顶点变换需要左乘矩阵
最近写shader,需要用到tbn矩阵变换法线,突然注意到一个问题,那就是为啥法线都要左乘矩阵,但是顶点变换都是右乘呢?之前也用,但是没有深入思考一下这个问题,结果就是一通猛查。这里也不秀自己一瓶子不满,半瓶子晃荡的数学功底了,放上一些大佬们的说明讲解。模型视图变换时,法线向量要乘模型视图矩阵的逆转置矩阵【转】 - 3D入魔 - 博客园法线变换矩阵_lawest的博客-CSDN博客_法线矩阵4.7 法线变换的疑惑 · Issue #17 · candycat1992/Unity_Shad原创 2022-03-19 15:07:11 · 875 阅读 · 2 评论 -
如何让 android 项目的 shader 可以被 RenderDoc 调试
这里只以我手上有的 android 手机举例,不排除不同版本的 android 系统,或是硬件有不一样的问题,当然解决这些问题,不正是干这一行的乐趣所在吗。首先我手上的这一台是 google 的 pixel3,android12大家一般都知道,一般要调试 android apk 有2种方式:1,apk AndroidManifest.xml 里面的 android:debuggable=”true”2,/default.prop 中 ro.debuggable=11相当于是解包再原创 2022-03-07 14:01:56 · 2776 阅读 · 0 评论 -
漫画中的速度线
偶然间看到的这个做法,当然不止可以用来表现速度线,甚至可以拿来当 Noise 用。效果如图Shader "Custom/ComicSpeedLine"{ Properties { _MainTex ("Texture", 2D) = "white" {} _LineCount ("线的数量", float) = 0 } SubShader { Cull Back ZWrite On原创 2022-02-26 23:16:08 · 677 阅读 · 0 评论 -
记录一种同事告诉我的,画描边的方法
直接上代码:float maxU = max(1 - i.uv.x, i.uv.x);float maxV = max(1 - i.uv.y, i.uv.y);float maxUV = max(maxU , maxV);float outlineFactor = pow(maxUV , _OutlineFactor);half4 finalRGBA = outlineFactor * _Color;原创 2021-07-09 18:55:38 · 143 阅读 · 0 评论 -
怎么在 Unity Shader 中自定义阴影的颜色
我们在大多数时候,是不需要考虑物体投射下来的影子是什么样的,但是难免会有这种情况。比如我需要改变某个物体影子的颜色,今天就来说说这个该怎么写。这里我们把关键的几段列举出来。首先是一定要有,否则光线的颜色可能不会正确的输出Tags { "LightMode"="ForwardBase" }使用前向光照中的阴影#pragma multi_compile_fwdbaseSHADOW_COORDS 用来装影子坐标struct VertexOutput { float4 pos原创 2020-11-13 17:07:15 · 2326 阅读 · 0 评论 -
Unity Shader 中 Offset 设置的作用
在Unity中,有一个 Offset 设置,它叫 z-fighting ,看名就知道了,是z值之间的战斗原因是因为我们的不同的多边形共面时,在光栅阶段生成的fragment的屏幕xy坐标一样,但depth值又不一样的浮点误差引起的问题,然后浮点round-off的四舍五入,导致z-fighting。其实就是2个z值一样,放在同一个平面下的多边形,因为他们的z值极其接近,所以会出现交替显示,闪...原创 2020-04-10 13:42:24 · 4050 阅读 · 3 评论 -
在 shader 里判断圆范围的方法
因为总忘,所以做下笔记fixed4 frag (v2f i) : SV_Target { // uv向量 float2 vectorUV = i.texcoord - _OriginUV; vectorUV.x *= _MainTex_TexelSize.y / _MainTex_TexelSize.x; // 斜边...原创 2018-12-26 16:38:27 · 1161 阅读 · 0 评论 -
unity在shader中获取当前摄像机的方向向量
内置的矩阵(float4x4): UNITY_MATRIX_MVP 当前模型视图投影矩阵 UNITY_MATRIX_MV 当前模型视图矩阵 UNITY_MATRIX_V 当前视图矩阵。 UNITY_MATRIX_P 目前的投影矩阵 UNITY_MATRIX_VP 当前视图*投影矩阵原创 2017-10-31 22:33:23 · 7692 阅读 · 0 评论 -
unity blend 笔记
blend 就是对透明的物体进行混合的,处于光栅化的最后阶段。例如我们给一个模型贴一个材质,那么在某个点计算出来颜色值称为源,而该点之前累积的颜色值,叫目标。当我们在显示这个点颜色值的时候,这个颜色的最终值,就是源和目标叠加出来的。但是这需要我们来规定到底要如何去叠加这个值。就需要 shader 中的 Blend 命令了。风宇冲的博客讲的很清楚: http://blog.sina.com.cn/s原创 2017-08-09 11:57:54 · 2553 阅读 · 0 评论 -
unity shader _MainTex_TexelSize 和 UNITY_UV_STARTS_AT_TOP 的作用
我们先来看一段代码:#if UNITY_UV_STARTS_AT_TOPif (_MainTex_TexelSize.y < 0){ o.uv.w = 1 - o.uv.w;}#endif_MainTex_TexelSize,这个变量的从字面意思是主贴图 _MainTex 的像素尺寸大小,是一个四元数,是 unity 内置的变量,它的值为 Vector4(1 / width, 1 /原创 2017-05-25 02:15:52 · 13158 阅读 · 0 评论 -
unity 让自定义 ui shader 支持 UGUI 的 Mask 功能
unity论坛原文: http://answers.unity3d.com/questions/980924/ui-mask-with-shader.html关键的支持代码:Shader "xxxxxx"{Properties{......//MASK SUPPORT ADD_StencilComp ("Stencil Comparison", Float) = 8_Stencil (原创 2017-05-05 20:35:15 · 14122 阅读 · 5 评论 -
unity shader lod 使用
LOD是 ( Level of Detail ) 的缩写,表示细节级别。Shader LOD - 这个是另外一种控制细节级别的技术 - 在一个 Shader 当中,可以给不同的 SubShader 指定不同的LOD属性,例如: SubShader { Tags{ "RenderType" = "Opaque" } LOD 100 }原创 2017-05-25 01:50:08 · 6891 阅读 · 1 评论 -
Unity 中用 Vertex & Fragment Shader 实现 surface shader 中的 Diffuse 和 Decal
自己体验了以后发现surface shader确实是隐藏了好多好多的内部实现呀,像我没有考虑的多光源,阴影,衰减等问题,在surface shader中都是被隐藏实现好了的,而且还是多平台适配的,Vertex & Fragment Shader则还要自己写,还好unity也给我们提供了一些现成方法可以调。 _(:зゝ∠)_ 所以总结一下,在写需要接收复杂光源信息的材质时,写surface原创 2016-05-14 00:17:58 · 2979 阅读 · 0 评论 -
unity 集成 RenderDoc 调试shader的方法
之前我是知道在Visual Studio里调试的方法的,但是不知道为什么,这个方法在unity5的环境下,各种报错,捕获不了,4的时候好好的。今天在翻文档时,发现又多了一种新的调试方法,就是用RenderDoc,下面来说说这个工具。RenderDoc调试的官方文档: http://docs.unity3d.com/Manual/RenderDocIntegration.html Visual S原创 2016-04-20 21:32:39 · 14786 阅读 · 13 评论 -
unity 替换渲染 ( Rendering with Replaced Shaders )
官方文档:file:///C:/Program%20Files/Unity/Editor/Data/Documentation/en/Manual/SL-ShaderReplacement.html圣典文档:http://www.ceeger.com/Components/SL-ShaderReplacement.html 功能: 先说说它能干什么。 有时候实现一些特效,尤其原创 2016-05-05 01:38:54 · 3909 阅读 · 0 评论 -
ShaderlabVS 作者的博客
http://blog.shuiguzi.com/2014/10/28/Release/原创 2016-05-05 16:19:52 · 6095 阅读 · 0 评论 -
shader 编程模块化开发的一些方法
创建一个.cginc后缀的cg文件,保存我们要重用的代码文件创建好以后,在shader文件里用 #include "xxx.cginc"的方法,去插入它。 有一点需要注意的,就是最好在我们自己建的.cginc文件的顶部创建一个宏出来,例:#ifndef MY_INCLUDE#define MY_INCLUDE// 你的cg代码内容#endif稍微对c++有点了解的人应该就会知道了,这在c++里是原创 2016-05-17 00:41:06 · 887 阅读 · 0 评论 -
unity shader 编辑器扩展类 ShaderGUI
这应该unity5才出的新功能了,今天看文档时刚巧看到了,就来尝试了一下。效果如图:shader 的编辑器扩展分为2种方法:是通过UnityEditor下的ShaderGUI类来实现的,形式比较近似于我们一般对unity编辑器的扩展方式。是通过直接在shader代码上通过unity为我们预定义好的一些命令来扩展。 个人比较推荐使用第一种方法,第二种在尝试时发现 ①是第二种控件的种类有原创 2016-04-22 00:38:49 · 10256 阅读 · 2 评论 -
关于unity中BindChannels的理解
官方文档:http://docs.unity3d.com/Manual/SL-BindChannels.html 一个博主的博客:http://blog.csdn.net/cubesky/article/details/38582283大家主要参考这2个文章就可以了,这里重点强调下这个命令的作用。其实 BindChannels 命令主要干的事情,就是可以重新映射绑定语义的数据源和目标硬件。 博客原创 2016-06-30 23:35:08 · 1746 阅读 · 0 评论 -
unity中的sun shafts(也称gay ray)的一种实现方法
这个方法是从圣典中一个大神的分享,链接:http://www.ceeger.com/forum/read.php?tid=12137#read_222385上次ShadowGun中的做法是用一个可以伸缩的mesh来模拟,这次的则是用屏幕特效来模拟。 外加其实unity自己也提供了一个现成的,可以直接用的效果,圣典的说明链接: http://www.ceeger.com/Components原创 2016-07-01 15:51:04 · 5076 阅读 · 0 评论 -
ShadowGun 的学习笔记 - GodRays
首先先贴一些参考文章,感谢这些人的分享精神。官方:http://blogs.unity3d.com/2012/03/23/shadowgun-optimizing-for-mobile-sample-level/一些分享: http://ravenw.com/blog/2012/03/30/shadowgun-shared-level-shaders-and-skills/http://blog.原创 2016-06-22 17:46:02 · 3616 阅读 · 1 评论 -
毛玻璃,磨砂玻璃材质,shader笔记
最近需要用到这个shader,就稍微研究了一下,这里做一下笔记,免得回来自己忘了~思路: 其实没什么好多的,看了不少文章,其实都是分为3步完成。 1,先建一个平面出来(也可以是个精灵),来显示效果。当然你要是准备做屏幕特效那就当我没说,这里不讨论了,只是用法不同。 2,建立我们的shader,我们先用 unity 自带的 GrabPass 采样到当前平面下的像素数据(你就可以想象成屏原创 2017-02-27 00:00:12 · 4779 阅读 · 1 评论 -
ARB_precision_hint_fastest,ARB_precision_hint_nicest 的意义,作用
首先必须吐槽一下,百度搜任何跟技术相关的东西,简直是辣鸡的不行,还是vpn翻墙google王道,分分钟找到想要的内容。。。 其实之前知道这2个命令是干什么的,但是总是会忘记,鉴于这个情况,所以决定还是做一下笔记了~首先,这2命令最权威解释的地方,肯定就是openGl官网了,以下是链接: https://www.opengl.org/registry/specs/NV/fragment_progr原创 2016-05-11 01:35:11 · 5549 阅读 · 0 评论