
unity_shader
Shadowrabbit
与其解决bug不如先解决发现bug的人
展开
-
shader入门1 了解表面着色器
shader类型①Fixed function shader :属于固定渲染管线 Shader, 基本用于高级Shader在老显卡无法显示时的回滚。使用的是ShaderLab语言,语法与微软的FX files 或者NVIDIA的 CgFX类似。②Vertex and Fragment Shader:最强大的Shader类型,属于可编程渲染管线. 使用的是CG/HLSL语法。③Surface ...原创 2019-05-27 16:10:51 · 323 阅读 · 0 评论 -
shader入门16 立方体纹理
介绍1.什么是立方体纹理?简单的说就是6张纹理组成的一个方块形状的纹理.像骰子一样,有六个面.2.立方体纹理有什么用?立方体纹理通常用于作为反射源,以及环境反射来实现玻璃,金属的效果3.为什么立方体纹理要做成这个形状?以立方体的中心为原点,向任意方向投射射线,可以与立方体6个面相交,得到不同的采样值.可以根据方向对纹理进行采样,这就是立方体纹理的意义.天空盒天空盒是模拟游戏背景...原创 2019-06-26 15:48:25 · 438 阅读 · 0 评论 -
shader入门15 完整的光照处理
我们已经学习了所有相关的光照处理,尝试用前几篇的光照处理组合出一个标准的光照着色器.代码漫反射使用了兰伯特光照模型高光反射使用Blinn-Phong模型法线纹理是在切线空间计算的添加了多光照处理,光照衰减,阴影Shader "Unity/Custom/NewSurfaceShader" { Properties{ _TexColor("TexColor", Color) = (1...原创 2019-06-18 16:14:12 · 294 阅读 · 0 评论 -
shader入门14 统一管理光照衰减与阴影
通过前两篇的学习,我们知道如何计算光照衰减与阴影.我们知道每一次pass都是一次完整的渲染,unity为我们提供了一次pass同时计算光照衰减+光照的宏同时atten与shadow也合并为atten. (高光反射+漫反射)* 阴影系数 *光照衰减系数代码与阴影接收计算相似,最大的区别在于阴影计算的部分fixed shadow = SHADOW_ATTENUATION(f);替换为UN...原创 2019-06-18 14:16:58 · 360 阅读 · 0 评论 -
shader入门13 阴影
原理阴影渲染的原理是将相机放在光源的位置,相机看不到的地方也就是光源无法照射的地方,即阴影.我们有两个步骤需要实现,分别是1.向物体投射阴影2.接收其他物体投射的阴影阴影投射我们首先需要打开光源的阴影投射,和物体的阴影投射,组件中的设置会影响shader中是否计算阴影.我们以普通的高光反射为基础,测试阴影投射细心的人一定发现了我注释了Fallback,这是因为即便是我们没写阴影...原创 2019-06-18 11:16:21 · 599 阅读 · 0 评论 -
shader入门12 多光源与光照衰减
渲染路径渲染路径的作用是准备光照相关的属性,如果没有指定渲染路径,相关的属性例如_LightColor0,_WorldSpaceLightPos0将无法正常使用.目前unity中主要使用前向渲染路径,延迟渲染路径,两种渲染路径. 本篇中主要使用前向渲染路径.在pass中使用了标签Tags{ “LightMode” = “ForwardBase” }指定前向渲染路径.另外还有一种标签Tags...原创 2019-06-17 18:03:15 · 473 阅读 · 0 评论 -
shader入门11 透明效果2
开启深度写入的半透明有时遇到复杂的模型,自身的部分之间就存在遮挡,用上一篇的方法是无法完成透明度混合的.我们需要先开启一个pass写入深度,但不写入颜色.然后根据深度进行透明度混合.代码Shader "Custom/NewSurfaceShader"{ Properties{ _Color("Color",Color) = (1,1,1,1)//贴图颜色 _MainTex("M...原创 2019-06-17 14:32:56 · 219 阅读 · 0 评论 -
shader入门10 透明效果1
实现透明效果的方法在Unity中我们通常有两种方法可以实现透明效果1.透明度测试透明度测试只能控制物体完全透明或者完全不透明,所以大部分情况下使用的都是透明度混合的效果2.透明度混合透明度混合需要考虑渲染顺序.之前从来没考虑过渲染顺序的问题是因为对于不透明物体,有深度缓冲这种机制的存在.深度缓冲会对物体进行深度测试,原理利用缓存中的深度判断物体与摄像机之间的距离.渲染一个片元时,如果...原创 2019-06-17 11:15:48 · 258 阅读 · 0 评论 -
shader入门7 法线贴图
简介法线贴图用来使模型更加细致.把一个模型做的十分精细非常难,用法线贴图替换原纹理的法线,改变漫反射使我们产生模型凹凸面更多,更细致的错觉.代码Shader "Custom/NewSurfaceShader"{ Properties{ _Color("Color",Color) = (1,1,1,1)//贴图颜色 _MainTex("Main Tex",2D) = "white...原创 2019-06-04 13:20:56 · 373 阅读 · 0 评论 -
shader入门9 遮罩纹理
简介遮罩纹理为了更准确的控制某些区域的光照强弱对遮罩纹理采样,得到每个点的值,用这个值与高光反射的补偿相乘如果为0则没有效果,不为0时有增强或者减弱的效果代码Shader "Custom/NewSurfaceShader"{ Properties{ _Color("Color",Color) = (1,1,1,1)//贴图颜色 _MainTex("Main Tex",2D)...原创 2019-06-14 18:22:03 · 184 阅读 · 0 评论 -
shader入门6 贴图
简介给物体换个贴图素材,这本应该是个很简单的问题,由于萌新常识不足,掉进深坑纠结了很久.最后还是大佬同事帮我指了出来… 感谢 感谢代码和上一篇相比 只多了贴图相关的几行代码.有几点需要注意一下1._MainTex_ST在计算uv偏移量时,有以下两个表达式可以得到偏移后的uv,但你都需要声明一个_MainTex_ST,不论你是否用到这个变量uv = TRANSFORM_TEX(v.t...原创 2019-06-03 17:14:37 · 1400 阅读 · 0 评论 -
shader入门8 渐变纹理
简介渐变纹理是通过对半兰伯特光照模型进行改良,让漫反射光照更加明显,从而达到一种插画,卡通的渲染风格代码Shader "Custom/NewSurfaceShader"{ Properties{ _Color("Color",Color) = (1,1,1,1)//贴图颜色 _RampTex("Main Tex",2D) = "white"{}//渐变纹理 _Sepcula...原创 2019-06-14 16:16:18 · 292 阅读 · 0 评论 -
shader入门5 高光反射
介绍高光反射一般用于实现金属光泽的效果,原理是反射光与物体朝相机的方向的夹角cos值为标准进行光照补偿,夹角越小补偿值越高.代码其实现原理与在漫反射基础上加了高光补偿的部分,要注意的是世界坐标系中的光照与入射角方向是相反的Shader "Custom/NewSurfaceShader"{ Properties{ _Diffuse("Diffuse Color",Color) = (...原创 2019-06-03 11:23:08 · 1000 阅读 · 0 评论 -
shader入门4 漫反射
代码Shader "Custom/NewSurfaceShader"{ Properties{ _Diffuse("Diffuse Color",Color) = (1,1,1,1) } SubShader { pass { Tags{ "LightMode" = "ForwardBase" } CGPROGRAM #include "Lighti...原创 2019-05-28 18:18:31 · 265 阅读 · 0 评论 -
shader入门3 使用结构体
代码我们把上一篇的代码,复制粘贴改一改瞧,它变成了新的代码Shader "Custom/NewSurfaceShader"{ Properties{ } SubShader { pass { CGPROGRAM //定义一个顶点处理函数 #pragma vertex vert //定义一个片段处理函数 #pragma fragme...原创 2019-05-28 17:11:15 · 317 阅读 · 0 评论 -
shader入门2 了解顶点片段着色器
代码结构先贴一下代码,看一眼大概的结构,之后再慢慢解释Shader "Custom/NewSurfaceShader"{ Properties{ } SubShader { pass { CGPROGRAM //定义一个顶点处理函数 #pragma vertex vert //定义一个片段处理函数 #pragma fragment ...原创 2019-05-28 16:38:10 · 374 阅读 · 0 评论 -
自发光shader模拟游戏中的显示器发光
要实现的效果如下,让电视机旁的场景(那个cube)接收电视机的光照原理unity为我们提供了emission自发光的效果,在一些表面着色器里,比如standard.我们也可以编写表面着色器调用这些封装好的参数.emission可以定义发光颜色,也可以根据光照贴图发光.我们把播放器中当前帧的纹理传给emission作为光照贴图,并且实时渲染就可以达到上面的效果了.代码首先先编写一个s...原创 2019-07-11 14:49:06 · 463 阅读 · 0 评论