Unity3D Shaderlab 学习记录
2015-10-13 21:24
459 查看
原文地址:Unity3D Shaderlab 学习记录作者:木木小麻烦
1. shader
lab 学习笔记
2. unity3d
Build in shader 详解
3. Unity的shader帮助手册(一)
4. Unity的shader帮助手册(二)
5. 编写表面着色器
Writing Surface Shaders
unity3d 定制的表面着色器(Surface Shader)的标准输出结构是这样的:
struct SurfaceOutput
{
half3 Albedo; //反射率
half3 Normal; //法线
half3 Emission; //自发光,用于增强物体自身的亮度,使之看起来好像可以自己发光
half Specular; //镜面
half Gloss; //光泽
half Alpha; //透明
};
Surface Shader compile directives 表面着色器编译指令
Surface shader is placed inside CGPROGRAM..ENDCG block, just like any other shader. The differences are:
表面着色器放在CGPROGRAM .. ENDCG块里面,就像其他的着色器一样。区别是:
It must be placed inside SubShader block, not inside Pass. Surface shader will compile into multiple passes itself.
它必须嵌在子着色器(SubShader)块里面。而不是Pass块里面。表面着色器( Surface shader)将在多重通道(multiple passes)内编译自己。
It uses #pragma surface ... directive to indicate it's a surface shader.
它使用的 #pragma surface...指令,以声明它是一个表面着色器(surface shader)。
The #pragma surface directive is:
#pragma surface 这个指令是:
#pragma surface surfaceFunction lightModel [optionalparams]
Required parameters:
所需参数:
surfaceFunction - which Cg function has surface shader code. The function should have the form of void surf (Input IN, inout SurfaceOutput
o), where Input is a structure you have defined. Input should contain any texture coordinates and extra automatic variables needed by surface function.
surfaceFunction - 表示Cg函数中有表面着色器(surface shader)代码。这个函数的格式应该是这样:void surf (Input IN,inout SurfaceOutput o), Input是你自己定义的结构。Input结构中应该包含所有纹理坐标(texture
coordinates)和和表面函数(surfaceFunction)所需要的额外的必需变量。
lightModel - lighting model to use. Built-in ones are Lambert (diffuse) and BlinnPhong (specular). See Custom Lighting Models page for how
to write your own.
lightModel -在光照模式中使用。内置的是Lambert (diffuse)和 BlinnPhong (specular)。如果想编写自己的光照模式,请参考:自定义光照模式。
Optional parameters:
可选参数:
alpha - Alpha blending mode. Use this for semitransparent shaders.
alpha -透明( Alpha)混合模式。使用它可以写出半透明的着色器。
alphatest:VariableName - Alpha testing mode. Use this for transparent-cutout shaders. Cutoff value is in float variable with VariableName.
alphatest:VariableName -透明( Alpha)测试模式。使用它可以写出 镂空效果的着色器。镂空大小的变量(VariableName)是一个float型的变量。
vertex:VertexFunction - Custom vertex modification function. See Tree Bark shader for example.
vertex:VertexFunction - 自定义的顶点函数(vertex function)。请参考范例:树皮着色器(Tree Bark shader)。
finalcolor:ColorFunction - Custom final color modification function. See Surface Shader Examples.
finalcolor:ColorFunction - 自定义的最终颜色函数(final color function)。 请参考范例:表面着色器例子(Surface Shader Examples)。
exclude_path:prepass or exclude_path:forward - Do not generate passes for given rendering path.
exclude_path:prepass 或者 exclude_path:forward - 使用指定的渲染路径,不需要生成通道。
addshadow - Add shadow caster & collector passes. Commonly used with custom vertex modification, so that shadow casting also gets any procedural
vertex animation.
addshadow - 添加阴影投射 & 收集通道(collector passes)。通常用自定义顶点修改,使阴影也能投射在任何程序的顶点动画上。
dualforward - Use dual lightmaps in forward rendering path.
dualforward - 在正向(forward)渲染路径中使用 双重光照贴图(dual lightmaps)。
fullforwardshadows - Support all shadow types in Forward rendering path.
fullforwardshadows - 在正向(forward)渲染路径中支持所有阴影类型。
decal:add - Additive decal shader (e.g. terrain AddPass).
decal:add - 添加贴花着色器(decal shader) (例如: terrain AddPass)。
decal:blend - Semitransparent decal shader.
decal:blend - 混合半透明的贴花着色器(Semitransparent decal shader)。
softvegetation - Makes the surface shader only be rendered when Soft Vegetation is on.
softvegetation - 使表面着色器(surface shader)仅能在Soft Vegetation打开时渲染。
noambient - Do not apply any ambient lighting or spherical harmonics lights.
noambient - 不适用于任何环境光照(ambient lighting)或者球面调和光照(spherical harmonics lights)。
novertexlights - Do not apply any spherical harmonics or per-vertex lights in Forward rendering.
novertexlights - 在正向渲染(Forward rendering)中不适用于球面调和光照(spherical harmonics lights)或者每个顶点光照(per-vertex lights)。
nolightmap - Disables lightmap support in this shader (makes a shader smaller).
nolightmap - 在这个着色器上禁用光照贴图(lightmap)。(适合写一些小着色器)
nodirlightmap - Disables directional lightmaps support in this shader (makes a shader smaller).
nodirlightmap - 在这个着色器上禁用方向光照贴图(directional lightmaps)。 (适合写一些小着色器)。
noforwardadd - Disables Forward rendering additive pass. This makes the shader support one full directional light, with all other lights computed
per-vertex/SH. Makes shaders smaller as well.
noforwardadd - 禁用正向渲染添加通道(Forward rendering additive pass)。 这会使这个着色器支持一个完整的方向光和所有光照的per-vertex/SH计算。(也是适合写一些小着色器).
approxview - Computes normalized view direction per-vertex instead of per-pixel, for shaders that need it. This is faster, but view direction
is not entirely correct when camera gets close to surface.
approxview - 着色器需要计算标准视图的每个顶点(per-vertex)方向而不是每个像索(per-pixel)方向。 这样更快,但是视图方向不完全是当前摄像机(camera) 所接近的表面。
halfasview - Pass half-direction vector into the lighting function instead of view-direction. Half-direction will be computed and normalized
per vertex. This is faster, but not entirely correct.
halfasview - 在光照函数(lighting function)中传递进来的是half-direction向量,而不是视图方向(view-direction)向量。 Half-direction会计算且会把每个顶点(per vertex)标准化。这样做会很快,但不完全准确。
1. shader
lab 学习笔记
2. unity3d
Build in shader 详解
3. Unity的shader帮助手册(一)
4. Unity的shader帮助手册(二)
5. 编写表面着色器
Writing Surface Shaders
unity3d 定制的表面着色器(Surface Shader)的标准输出结构是这样的:
struct SurfaceOutput
{
half3 Albedo; //反射率
half3 Normal; //法线
half3 Emission; //自发光,用于增强物体自身的亮度,使之看起来好像可以自己发光
half Specular; //镜面
half Gloss; //光泽
half Alpha; //透明
};
Surface Shader compile directives 表面着色器编译指令
Surface shader is placed inside CGPROGRAM..ENDCG block, just like any other shader. The differences are:
表面着色器放在CGPROGRAM .. ENDCG块里面,就像其他的着色器一样。区别是:
It must be placed inside SubShader block, not inside Pass. Surface shader will compile into multiple passes itself.
它必须嵌在子着色器(SubShader)块里面。而不是Pass块里面。表面着色器( Surface shader)将在多重通道(multiple passes)内编译自己。
It uses #pragma surface ... directive to indicate it's a surface shader.
它使用的 #pragma surface...指令,以声明它是一个表面着色器(surface shader)。
The #pragma surface directive is:
#pragma surface 这个指令是:
#pragma surface surfaceFunction lightModel [optionalparams]
Required parameters:
所需参数:
surfaceFunction - which Cg function has surface shader code. The function should have the form of void surf (Input IN, inout SurfaceOutput
o), where Input is a structure you have defined. Input should contain any texture coordinates and extra automatic variables needed by surface function.
surfaceFunction - 表示Cg函数中有表面着色器(surface shader)代码。这个函数的格式应该是这样:void surf (Input IN,inout SurfaceOutput o), Input是你自己定义的结构。Input结构中应该包含所有纹理坐标(texture
coordinates)和和表面函数(surfaceFunction)所需要的额外的必需变量。
lightModel - lighting model to use. Built-in ones are Lambert (diffuse) and BlinnPhong (specular). See Custom Lighting Models page for how
to write your own.
lightModel -在光照模式中使用。内置的是Lambert (diffuse)和 BlinnPhong (specular)。如果想编写自己的光照模式,请参考:自定义光照模式。
Optional parameters:
可选参数:
alpha - Alpha blending mode. Use this for semitransparent shaders.
alpha -透明( Alpha)混合模式。使用它可以写出半透明的着色器。
alphatest:VariableName - Alpha testing mode. Use this for transparent-cutout shaders. Cutoff value is in float variable with VariableName.
alphatest:VariableName -透明( Alpha)测试模式。使用它可以写出 镂空效果的着色器。镂空大小的变量(VariableName)是一个float型的变量。
vertex:VertexFunction - Custom vertex modification function. See Tree Bark shader for example.
vertex:VertexFunction - 自定义的顶点函数(vertex function)。请参考范例:树皮着色器(Tree Bark shader)。
finalcolor:ColorFunction - Custom final color modification function. See Surface Shader Examples.
finalcolor:ColorFunction - 自定义的最终颜色函数(final color function)。 请参考范例:表面着色器例子(Surface Shader Examples)。
exclude_path:prepass or exclude_path:forward - Do not generate passes for given rendering path.
exclude_path:prepass 或者 exclude_path:forward - 使用指定的渲染路径,不需要生成通道。
addshadow - Add shadow caster & collector passes. Commonly used with custom vertex modification, so that shadow casting also gets any procedural
vertex animation.
addshadow - 添加阴影投射 & 收集通道(collector passes)。通常用自定义顶点修改,使阴影也能投射在任何程序的顶点动画上。
dualforward - Use dual lightmaps in forward rendering path.
dualforward - 在正向(forward)渲染路径中使用 双重光照贴图(dual lightmaps)。
fullforwardshadows - Support all shadow types in Forward rendering path.
fullforwardshadows - 在正向(forward)渲染路径中支持所有阴影类型。
decal:add - Additive decal shader (e.g. terrain AddPass).
decal:add - 添加贴花着色器(decal shader) (例如: terrain AddPass)。
decal:blend - Semitransparent decal shader.
decal:blend - 混合半透明的贴花着色器(Semitransparent decal shader)。
softvegetation - Makes the surface shader only be rendered when Soft Vegetation is on.
softvegetation - 使表面着色器(surface shader)仅能在Soft Vegetation打开时渲染。
noambient - Do not apply any ambient lighting or spherical harmonics lights.
noambient - 不适用于任何环境光照(ambient lighting)或者球面调和光照(spherical harmonics lights)。
novertexlights - Do not apply any spherical harmonics or per-vertex lights in Forward rendering.
novertexlights - 在正向渲染(Forward rendering)中不适用于球面调和光照(spherical harmonics lights)或者每个顶点光照(per-vertex lights)。
nolightmap - Disables lightmap support in this shader (makes a shader smaller).
nolightmap - 在这个着色器上禁用光照贴图(lightmap)。(适合写一些小着色器)
nodirlightmap - Disables directional lightmaps support in this shader (makes a shader smaller).
nodirlightmap - 在这个着色器上禁用方向光照贴图(directional lightmaps)。 (适合写一些小着色器)。
noforwardadd - Disables Forward rendering additive pass. This makes the shader support one full directional light, with all other lights computed
per-vertex/SH. Makes shaders smaller as well.
noforwardadd - 禁用正向渲染添加通道(Forward rendering additive pass)。 这会使这个着色器支持一个完整的方向光和所有光照的per-vertex/SH计算。(也是适合写一些小着色器).
approxview - Computes normalized view direction per-vertex instead of per-pixel, for shaders that need it. This is faster, but view direction
is not entirely correct when camera gets close to surface.
approxview - 着色器需要计算标准视图的每个顶点(per-vertex)方向而不是每个像索(per-pixel)方向。 这样更快,但是视图方向不完全是当前摄像机(camera) 所接近的表面。
halfasview - Pass half-direction vector into the lighting function instead of view-direction. Half-direction will be computed and normalized
per vertex. This is faster, but not entirely correct.
halfasview - 在光照函数(lighting function)中传递进来的是half-direction向量,而不是视图方向(view-direction)向量。 Half-direction会计算且会把每个顶点(per vertex)标准化。这样做会很快,但不完全准确。
相关文章推荐
- Unity Vector3.Slerp() 球形插值详解
- Unity Vector3.Lerp()与Vecotr3.MoveTowards()方法区别
- Unity接口函数Vector3.Project()
- 【Unity】【翻译搬运】使用WheelColliders做出稳定真实的车
- Unity内存申请和释放
- Cg shader using additive blending
- Unity (疑似)BUG LayerMask GetMask Default
- Unity3D 学习笔记2——“工具在手,天下我有”
- OSX平台下使用Jenkins自动发布Unity之iOS程序与补丁
- Windows平台下使用Jenkins自动发布Unity之Android程序与补丁
- Unity 编辑器中获取GameView的分辨率
- Unity3D 学习笔记1——序言(简称“废话”)
- Cg shader using discard
- unity Dotween插件的简单介绍及示例代码
- Cg shading in world space
- Cg shader for RGB cube
- Cg basic shader
- Unity之对象池(单例对象池和泛型对象池)
- 三消 图片高亮 添加离子效果
- Unity3D的两个坑