
Shader
nicolelili1
这个作者很懒,什么都没留下…
展开
-
Fragment shader---纹理法线与凹凸贴图3
Fragment shader---纹理法线与凹凸贴图3转载 2018-01-08 23:40:55 · 333 阅读 · 0 评论 -
Fragment shader---片段颜色混合(接收阴影)
遇到的问题:forwardbase通道代码太长,没有下载源码,所以没有完成代码,实现功能1、使用默认的material是可以接收到阴影的2、当时用默认的着色器接收不到阴影‘3、解决办法:添加forwardbase通道,并且修改下面的tag着色后的效果:阴影出现了,但是着色不对4、原因:一个pass渲染一次,转载 2018-01-07 01:19:51 · 812 阅读 · 0 评论 -
Fragment shader---片段级光照3(投射阴影)
1、三个球体,第一个使用的是自定义的shader,后两个使用的是系统默认的shader,一个是5.0之前的,一个是5.0之后的。开启平行光的阴影,自定义的shader没有投影添加点光源后,平面使用standard着色器,可以同时接收点光源和平行光的阴影,就是有两个影子但是当平面改为以前4.0之前的Legacy着色器之后,平面就只能接收到平行光的影子。就是虽然有两个光转载 2018-01-06 23:06:46 · 502 阅读 · 0 评论 -
Fragment shader---片段级光照2
遇到的问题:同样的代码,添加镜面反射光specular后,模型着色如下,不知道什么原因,而且最右边使用的自定义着色器的小球着色比系统的暗1、添加specular镜面反射光Shader "Custom/s_frag_diffuse_two" { Properties{ _SpecularColor("Specular",color) = (1,1,1,1) _Sh转载 2018-01-06 22:36:02 · 268 阅读 · 0 评论 -
Fragment shader---片段级光照1
1、将法向量和光向量从顶点函数vert移动到片段函数fragShader "Custom/f_diffuse" { SubShader{ pass { tags{ "LightMode" = "ForwardBase" } CGPROGRAM #pragma vertex vert #pragma fragment frag #include "unitycg.转载 2018-01-06 21:52:24 · 300 阅读 · 0 评论 -
图形学入门---半角向量与BlinnPhong
遇到的问题:当法向量使用UnityObjectToWorldNormal()方法后,一直报如下的错1、向量L:从顶点指向光源并经过正规化后的向量,向量R是反射向量,中间N是顶点的法向量2、x的值为r乘以a角的余弦值3、由于r的值是1,所以x就是a的余弦值4、使用公式R=2*Dot(N,L)*N-L// Upgrade NOTE:转载 2018-01-06 20:45:32 · 4488 阅读 · 0 评论 -
图形学入门--实现phong光照
1、镜面反射模型光入射的角度L向量与向量N之间的夹角与反射光R向量与向量N之间的夹角是相同的,当向量R与相机向量V重合的时候,就说明光线被全部照进了人眼。入射光线L与反射光线R、向量N之间的交点是最亮的,如果稍微偏离,亮度会衰减。所以要求得镜面反光,不仅要求得R向量,还要求得V向量,相机的向量。求得R和V之间的角度,就可以求得L、V、R、N交界处是否应该高亮。如果使用点积来计算,当R向量远离V转载 2018-01-06 19:16:24 · 1749 阅读 · 1 评论 -
图形学入门---反射向量与Cg reflect函数
1、添加点光源后,右侧的系统内嵌的小球被点光源照亮了,左侧的自定义的shader小球没有被照亮2、辅助光照函数ShadeVertexLightsFull只能使用在pass通道的Vertext中,tags标签必须修改成下面的值3、添加代码o.color.rgb = ShadeVertexLights(v.vertex,v.normal);Shader "C转载 2018-01-06 18:09:11 · 2558 阅读 · 0 评论 -
图形学入门---实现漫反射Diffuse shader2
1、发现自定义的shader,当旋转过后,原来的暗面依旧是暗面,没有随着旋转被光照射到原因:某一顶点的法向量和光向量一直不变解决办法:点积的两个向量必须处于同一个坐标空间①让法向量也在世界坐标中做一个旋转,然后再计算点积,采用的是世界空间坐标系②不去改变法向量,让法向量处在物体的坐标空间,但是需要把指向光的向量放在模型空间当中,再来计算2、将法向量旋转载 2018-01-06 04:34:43 · 525 阅读 · 0 评论 -
图形学入门---实现漫反射
1、diffuse漫反射包含两个部分:一部分是环境光照,一部分是漫反射2、3、将小球着为蓝色Shader "Custom/s_diffuse" { SubShader{ pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "unitycg.cginc" stru转载 2018-01-06 02:47:26 · 1609 阅读 · 0 评论 -
图形学入门---法向量与光照
1、法向量:垂直于平面的向量,包括两个方向2、光的方向是相反的,一定是从模型指向光3、向量的点积4、左手坐标法得到法向量N5、向量计算,得到的结果是错误的,是相反的,在世界坐标系中是向下的,应该v2乘以v16、转载 2018-01-06 02:28:05 · 2848 阅读 · 0 评论 -
Vertex Shader几何变换---波
1、上下波动,但是是所有的点都跟着一起波动// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Custom/wave" { SubShader{ pass { CGPROGRAM#pragma vertex vert#pragma fragmen转载 2018-01-06 01:45:26 · 387 阅读 · 0 评论 -
Vertex Shader几何变换---扭曲
1、顶点的旋转// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Custom/ls_ten" { SubShader{ pass { CGPROGRAM#pragma vertex vert#pragma fragment frag#in转载 2018-01-05 19:10:19 · 961 阅读 · 0 评论 -
Vertex Shader几何变换---顶点位移
1、抬升地面Shader "Custom/s_ten" { Properties{ _R("R",range(0,5))=1 } SubShader{ pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "unitycg.cginc" float dis; float转载 2018-01-05 18:30:26 · 2727 阅读 · 0 评论 -
Fragment shader---边缘泛光shader1
1、遇到的问题:Shader warning in 's_rm': Shader is not supported on this GPU (none of subshaders/fallbacks are suitable)相同的代码,但是在我的电脑上报GPU不支持,代码虽然不报错,但是不能正常显示2、3、4、5、转载 2018-01-07 03:14:35 · 566 阅读 · 0 评论 -
Fragment shader---边缘泛光2
遇到的问题:Shader "Custom/s_edge" { Properties{ _MainColor("MainColor",color)=(1,1,1,1) _Scale("Scale",range(1,8)) = 2 _Outer("Outer",range(0,1))=0.2 } SubShader{ Tags{ "queue" = "transp转载 2018-01-07 04:16:52 · 428 阅读 · 0 评论 -
Fragment shader---片段级模型动态变色1
1、在顶点中设置颜色Shader "Custom/s_f_color" { Properties { _MainColor ("_MainColor", Color) = (1,1,1,1) _SecondColor("SecondColor",color)=(1,1,1,1) } SubShader{ pass { CGPROGRAM #pragma v转载 2018-01-07 05:56:01 · 581 阅读 · 0 评论 -
Fragment shader---纹理法线与凹凸贴图1
Fragment shader---纹理法线与凹凸贴图1转载 2018-01-08 23:39:32 · 365 阅读 · 0 评论 -
Fragment shader---实现半透明着色
1、当墙体是透明的时候,物体都被着色成非遮盖部分2、通过置换shader得到深度纹理挂载到胶囊体:using System.Collections;using System.Collections.Generic;using UnityEngine;public class SetReplacementShader : MonoBehaviour { //转载 2018-01-08 23:18:09 · 890 阅读 · 0 评论 -
Fragment shader---实现半透明着色(物体遮住与非遮住部分都显示,并显示不同的颜色)
1、显示被遮挡住的部分// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Custom/s_transp" { SubShader{ tags{ "queue" = "transparent" } pass { blend srcalpha one转载 2018-01-08 22:32:32 · 2738 阅读 · 0 评论 -
Fragment shader--- Alpha与blend运算
可能是unity版本的问题遇到的问题:当加上透明的tag后,视频中的两个物体重叠在一起是不透明的,但是我的代码中物体是正常显示的Shader "Custom/s_alpha_two" { SubShader{ tags{ "queue" = "transparent" } pass { blend srcalpha oneminussrcalpha CGPROG转载 2018-01-08 20:30:42 · 775 阅读 · 0 评论 -
Fragment shader---纹理混合动画2
两张纹理混合混合前的次级纹理天空混合前的主纹理地平线Shader "Custom/s_mohu" { Properties{ _MainTex("MainTex", 2D) = ""{} _SecondTex("SecondTex", 2D) = ""{} _F("F",range(1,10)) = 4 } SubShad转载 2018-01-08 06:44:04 · 341 阅读 · 0 评论 -
Fragment shader---纹理混合动画1
1、让星空运动起来Shader "Custom/s_mohu" { Properties{ _MainTex("MainTex", 2D) = ""{} _F("F",range(1,10)) = 4 } SubShader{ pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #incl转载 2018-01-08 05:27:18 · 292 阅读 · 0 评论 -
Fragment shader---UV动画3
1、对UV进行多次采样,每次都对U或V进行稍微的偏转,然后再做一个叠加Shader "Custom/s_mohu" { Properties{ _MainTex("MainTex", 2D) = ""{} _F("F",range(1,30)) = 10 _A("A",range(0,0.1)) = 0.01 _R("R",range(0,1)) = 0 }转载 2018-01-08 04:37:19 · 291 阅读 · 0 评论 -
Fragment shader---UV动画2
利用uv的连续的偏移,就可以形成一个动画1、通过时间的不断变化Shader "Custom/s_uv_animation1" { Properties{ _MainTex("MainTex", 2D) = ""{} } SubShader{ pass { CGPROGRAM #pragma vertex vert #pragma fragment fr转载 2018-01-08 02:30:26 · 323 阅读 · 0 评论 -
Fragment shader---UV动画1
Fragment shader---UV动画1转载 2018-01-07 23:20:20 · 266 阅读 · 0 评论 -
Fragment shader---2D纹理采样3
Fragment shader---2D纹理采样3转载 2018-01-07 23:19:39 · 295 阅读 · 0 评论 -
Fragment shader---2D纹理采样2
1、Tiling:x:在x上的平铺数 y:在y方向的平铺数Offset: x:在x方向上的偏移量 y:在y方向的偏移量使用自定义的着色器,并没有进行平铺改为系统默认的着色器,立方体进行了平铺2、平铺textureShader "Custom/s_texture_two" { Properties{ _MainTex("MainTe转载 2018-01-07 21:58:00 · 385 阅读 · 0 评论 -
Fragment shader--2D纹理采样1
1、采样坐标为(0.5,0.5)Shader "Custom/s_texture" { Properties{ _MainTex("MainTex", 2D) = ""{} } SubShader{ pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "unitycg.cgi转载 2018-01-07 21:56:22 · 638 阅读 · 0 评论 -
Fragment shader---片段级模型动态变色2
1、不用if...else...语句返回颜色值// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Custom/s_f_color" { Properties { _MainColor ("_MainColor", Color) = (1,1,1,1)转载 2018-01-07 19:23:33 · 490 阅读 · 0 评论 -
Vertex Shader几何变换---顶点颜色变换2
1、在最左边是一个颜色值,在最右边又是另一个颜色值2、3、4、转载 2018-01-05 16:56:58 · 392 阅读 · 0 评论 -
Vertex Shader几何变换---顶点颜色变换1
1、顶点颜色变换// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Custom/s_nine" { SubShader{ pass { CGPROGRAM#pragma vertex vert#pragma fragment frag#inc转载 2018-01-05 06:17:49 · 564 阅读 · 0 评论 -
Cg语言入门四之流程控制
未解决的问题:当颜色值只在vert函数中声明后,颜色不显示,球体是黑色的一、switch..case语句Shader "Custom/process_control" { SubShader { pass{ CGPROGRAM #pragma vertex vert #pragma fragment frag void vert(in floa转载 2018-01-03 17:38:59 · 488 阅读 · 1 评论 -
Cg语言入门三数据类型和swizzle操作
一、swizzle操作1、布尔类型。int类型在很多时候也会被当做布尔类型布尔值为true时,球体的颜色值布尔值为false时,球体的颜色值2、向量的赋值3、类型转换4、切换取值的顺序,球体颜色由上面的红色变成了绿色5、可以任意颠倒向量的顺序6、向量的位数不够,则用已有的位数补齐,重复其中某一个位转载 2018-01-03 14:09:18 · 926 阅读 · 1 评论 -
CG语言入门二之 profile和基本数据类型
一、1、cg作为一个类c的语言,基本数据类型也有float,2、还有half类型,精度是float的一半3、fiexed,在Cg中还有一个数据类型fixed,它实际上是一个定点数二、Cg Profile一个 Cg profile定义了一个“被特定图形硬件或API所支持的Cg语言子集”,任意一种shader language都是基于可编程图转载 2018-01-03 12:55:22 · 542 阅读 · 0 评论 -
CG语言入门一输入输出和语义
一、顶一个简单的shadershader代码:Shader "Custom/surface_shader_custom" { SubShader { //surface shader是对顶点和片段的封装,所以不需要pass通道,但是片段着色器必须有pass通道 //在CGPROGRAM与ENDCG之间可以嵌入CG代码断 pass{ CGPROGRAM //v转载 2018-01-03 02:20:47 · 1836 阅读 · 2 评论 -
表面着色器二
一、surf函数void surf (Input IN, inout SurfaceOutputStandard o) { // Albedo comes from a texture tinted by color fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color; o.Albedo = c.rgb; // Met转载 2018-01-02 23:51:24 · 241 阅读 · 0 评论 -
表面着色器一
在surface shader当中不需要编写pass通道,surface shader就是对vertex shader和fragment shader的一种包装。它主要可以用来生成代码,所以生成的过程不需要进行干预,因此pass通道也能够帮我们自动生成,不需要去添加pass通道。一、创建的shader的代码Shader "Custom/surface_shader_one" {转载 2018-01-02 23:46:29 · 561 阅读 · 0 评论 -
固定管线shader二(Fixed function shader)
1、纹理settextureShader "Custom/fixed_function_two" { properties{ //_Color:属性名称 //Main Color:显示的名称 //color:类型 //=:赋值号 //(内容):小括号中为默认的值 _Color("Main Color",color)=(1,1,1,1)转载 2018-01-02 19:32:50 · 577 阅读 · 0 评论 -
固定管线shader一(Fixed function shader)
一、properties属性二、material材质三、lighting光照四、settexture设置纹理五、pass通道1、创建一个shader并重命名,2、打开后默认的是下面的内容,是一个surface shadder。默认生成的shader在subshader中没有pass通道,原因是surface shader是对vertex and fragment shadder的一种包装,在这种情转载 2018-01-02 14:42:35 · 480 阅读 · 0 评论