zoukankan      html  css  js  c++  java
  • Unity3D Shaderlab 学习记录

    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)标准化。这样做会非常快,但不全然准确。


  • 相关阅读:
    以太坊学习笔记
    linux找不到动态链接库
    centos7 firewall指定IP与端口访问
    VMware Fusion 序列号
    mysql pxc无法启动
    vmware workstation许可证密钥
    Gradle上传依赖到私服(nexus)
    Java对象操作工具
    Java获取不到请求的真实IP
    java8+ Lambda表达式基本用法
  • 原文地址:https://www.cnblogs.com/mqxnongmin/p/10595783.html
Copyright © 2011-2022 走看看