shader 初期学习总结

显示主材质:half4 c = tex2D(_MainTex , uv)
显示颜色:half4 c = tex2D(_MainTex , i.uv) * _Color;
显示纹理贴图:o.Normal = UnpackNormal(tex2D(_Bump, IN.uv_Bump));
显示光照贴图:half3 l = 2.0 * tex2D(_LightMap, i.uvLM).rgb; c.rgb *= l;
旋转UV:移动UV点
缩放:放大或缩小UV点 i.uv * float2(_ColorU, _ColorV)
高光和玻璃:
void surf (Input IN, inout SurfaceOutput o) {
fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);
o.Albedo = tex.rgb * _Color.rgb;
o.Gloss = tex.a;
o.Alpha = tex.a * _Color.a;
o.Specular = _Shininess;
}
表面着色器不写在Pass里,顶点/片段着色器必须写在Pass里。

Culling & Depth Testing:
Cull Back | Front | Off:
Back Don’t render polygons facing away from the viewer (default).剔除背面
Front Don’t render polygons facing towards the viewer. Used for turning objects inside-out.剔除正面
Off Disables culling - all faces are drawn. Used for special effects.都绘制
ZWrite On | Off:打开或关闭深度测试
Controls whether pixels from this object are written to the depth buffer (default is On). If you’re drawng solid objects, leave this on. If you’re drawing semitransparent effects, switch to ZWrite Off. 
ZTest  Less(Z小于对象的呗绘制) | Greater(大于) | LEqual (小等于,默认)| GEqual | Equal | NotEqual | Always

Blending:
Blend Off: Turn off blending (this is the default)
Blend SrcFactor DstFactor: Configure and enable blending. The generated color is multiplied by the SrcFactor原因子. The color already on screen is multiplied by DstFactorand the two are added together.原颜色*原因子 + 目标颜色*目标因子。

Alpha testing:通过透明度决定像素是否被渲染
AlphaTest Off 渲染所有像素
AlphaTest comparison AlphaValue

AlphaTest Greater 0.5

SetTexture:设置图片,只能用于表面着色器,可用于图片的叠加、混合。
SetTexture commands have no effect when fragment programs are used; 
SetTexture [TexturePropertyName] { Texture Block }
combine src1 * src2: Multiplies src1 and src2 together. The result will be darker than either input.
combine src1 + src2: Adds src1 and src2 together. The result will be lighter than either input.
combine src1 - src2: Subtracts src2 from src1.
combine src1 lerp (src2) src3: Interpolates between src3 and src1, using the alpha of src2. Note that the interpolation is opposite direction: src1 is used when alpha is one, and src3 is used when alpha is zero.使用源2的透明度通道值在源3和源1中进行差值,注意差值是反向的:当透明度值是1是使用源1,透明度为0时使用源3
combine src1 * src2 + src3: Multiplies src1 with the alpha component of src2, then adds src3.
所有源属性都可以是previous, constant, primary or texture其中的一个。
Previous is the the result of the previous SetTexture.
Primary来自光照计算的颜色或是当它绑定时的顶点颜色
Texture is the color of the texture specified by TextureName in the SetTexture (see above).当前对象进行混合
Constant is the color specified in ConstantColor.自定义颜色进行混合

SetTexture [_MainTex] {
                constantColor [_IlluminCol]
                combine constant lerp(texture) previous
 差值
            }

表面着色器:#pragma surface surfaceFunction lightModel [optionalparams]
定义一个“表面着色器函数(surface function)”,输入所需要的UV或数据,并在输出结构中填充SurfaceOutput。SurfaceOutput基本上描述了表面的特性(光照的颜色反射率、法线、散射、镜面等)。

void surf (Input IN, inout SurfaceOutput o)
{
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
 }

可以在输入结构中附加一些值:
float3 viewDir - will contain view direction, for computing Parallax effects, rim lighting etc.
float3 viewDir - 视图方向( view direction)值。为了计算视差效果(Parallax effects),边缘光照(rim lighting)等,需要包含视图方向( view direction)值。
float4 with COLOR semantic - will contain interpolated per-vertex color.
float4 with COLOR semantic -每个顶点(per-vertex)颜色的插值。
float4 screenPos - will contain screen space position for reflection effects. Used by WetStreet shader in Dark Unity for example.
float4 screenPos - 屏幕空间中的位置。 为了反射效果,需要包含屏幕空间中的位置信息。比如在Dark Unity中所使用的 WetStreet着色器。
float3 worldPos - will contain world space position.
float3 worldPos - 世界空间中的位置。
float3 worldRefl - will contain world reflection vector if surface shader does not write to o.Normal. See Reflect-Diffuse shader for example.
float3 worldRefl - 世界空间中的反射向量。如果表面着色器(surface shader)不写入法线(o.Normal)参数,将包含这个参数。 请参考这个例子:Reflect-Diffuse 着色器。
float3 worldNormal - will contain world normal vector if surface shader does not write to o.Normal.
float3 worldNormal - 世界空间中的法线向量(normal vector)。如果表面着色器(surface shader)不写入法线(o.Normal)参数,将包含这个参数。
float3 worldRefl; INTERNAL_DATA - will contain world reflection vector if surface shader writes to o.Normal. To get the reflection vector based on per-pixel normal map, use WorldReflectionVector (IN, o.Normal). See Reflect-Bumped shader for example.
float3 worldRefl; INTERNAL_DATA - 世界空间中的反射向量。如果表面着色器(surface shader)不写入法线(o.Normal)参数,将包含这个参数。为了获得基于每个顶点法线贴图( per-pixel normal map)的反射向量(reflection vector)需要使用世界反射向量(WorldReflectionVector (IN, o.Normal))。请参考这个例子: Reflect-Bumped着色器。
float3 worldNormal; INTERNAL_DATA - will contain world normal vector if surface shader writes to o.Normal. To get the normal vector based on per-pixel normal map, use WorldNormalVector (IN, o.Normal). 
float3 worldNormal; INTERNAL_DATA -世界空间中的法线向量(normal vector)。如果表面着色器(surface shader)不写入法线(o.Normal)参数,将包含这个参数。为了获得基于每个顶点法线贴图( per-pixel normal map)的法线向量(normal vector)需要使用世界法线向量(WorldNormalVector (IN, o.Normal))。

原文地址:https://www.cnblogs.com/wang-jin-fu/p/8279707.html

时间: 2024-10-27 07:03:48

shader 初期学习总结的相关文章

开始shader的学习与探索

新人报到:) 开始shader的学习与探索! 开始shader的学习与探索,布布扣,bubuko.com

Unity Shader 效果学习

Unity上对于图像的处理,假设单纯使用代码.那么非常遗憾,程序基本会跑死,毕竟是直接对像素的操作,读取写入都是比較耗费CPU和内存的. 所以.这次由于项目须要想实现类似哈哈镜的效果.想来想去,还是认为用unity的Shader比較好,毕竟不须要CPU做什么,仅仅用GPU就能够了. 话说GPU也是非常强大的. 以下简单说一下Shader(事实上我也是新手,学习的话,參考http://blog.csdn.net/poem_qianmo/article/details/40723789 )这是位大牛

Shader编程学习笔记(三)——三大主流编程语言 HLSL/GLSL/Cg

三大主流编程语言 HLSL/GLSL/Cg Shader Language Shader Language的发展方向是设计出在便携性方面可以和C++.Java等相比的高级语言,“赋予程序员灵活而方便的编程方式”,并“尽可能的控制渲染过程”同时“利用图形硬件的并行性,提高算法效率”. Shader Language目前主要有3种语言:基于OpenGL的OpenGL Shading Language,简称GLSL;基于DirectX的High Level Shading Language,简称HLS

Shader编程学习笔记(一)—— 图形硬件简史与可编程管线

图形处理器(GPU)简史 GPU发展简史 GPU英文全称Graphic Processing Unit,中文翻译为“图形处理器”,在现代计算机系统中的作用变得越来越重要. 20世纪六.七十年代,受硬件条件的限制,图形显示器只是计算机输出的一种工具.限于硬件发展水平,人们只是纯粹从软件实现的角度来考虑图形用户界面的规范问题.此时还没有GPU的概念. GPU概念在20世纪70年代末和80年代初被提出,使用单片集成电路(monolithic)作为图形芯片,此时的GPU被用于视频游戏和动画方面,它能够很

Shader Forge学习

最近学习了一下shader forge,一个屌屌哒插件用来生成shader.尽管其降低了制作shader的难度,但是真的想做出满意的shader的话还是得有一定的CG基础.但是仅仅是做出一些简单的效果的话,这个攻击还是绰绰有余,挺好上手的.只要按下键盘按钮,它就可以换出快捷命令,单击鼠标便可以选取相应的命令,滚动滚轮则可以滚动命令.鼠标拖动拖动柄可以连接,Alt+右键拖过连线便可切断连接. 一.两个简单的效果:uv流动溶解,uv扭曲高光 流动溶解或遮罩 流动扭曲高光

Shader编程学习笔记(四)——Unity Shader的组织形式(ShaderLab)

Unity Shader的组织形式 Unity Shader的形态 Unity官方手册上讲Unity Shader有三种不同的编写方案,这三种编写方案分别是surface shaders.vertex and fragment shaders和fixed function shaders. 从前面几篇笔记中可以了解到,可编程图形管线中能够编写shader的主要是两个部分:vertex shader和fragment shader,但Unity还有surface shaders和fixed fun

Shader编程学习笔记(八)—— Surface Shader 2

Surface Shader 上一小结主要了解了Surface Shader使用了“#pragma surface surf Standard fullforwardshadows”指令的意义,这一小节主要了解“surf”surface函数. void surf (Input IN, inout SurfaceOutputStandard o) { // Albedo comes from a texture tinted by color fixed4 c = tex2D (_MainTex,

Shader入门学习手记

Shader程序的基本结构 在代码中学习吧,注释都写好了. Shader "First Fantasy/Water/Water Diffuse" { //定义着色器属性; Properties { /* 格式:_Name("Display Name", type) = defaultValue[{options}]; { _Name - 属性的名字,变量名. Display Name - 这个字符串将显示在Unity的材质编辑器中作为Shader的使用者可读的内容

Shader的学习

一.SnowTrack(雪跟踪) 前言 这篇小文简单介绍一下如何在Unity中利用shader很简单的实现雪地效果. 01 雪地痕迹的效果 实现雪地印痕的思路其实也很简单吗,既记录玩家移动过程中的位置,之后再根据这些数据修改雪地的mesh即可. 02 工程实现 所以,很简单的,我们在unity中只需要一个玩家头顶上的正交相机和一个rendertexture就可以记录玩家的移动过程中的位置了. 之后再shader文件中先用vs根据rendertexture的数据修改雪地mesh的相关顶点位置,同时