• 和Keyle一起学ShaderForge


    sf_logo

    学Shader是不是很枯燥?

    如果你和我一样觉得用手写shader这种已经OUT的学习方式来学习Shader,那就和我一起一个换个角度来从ShaderForge学起吧。

    我后面的教程路线是这样的 SharderForge学习中穿插《unity shader and effects cookbook》一书中的概念与实践。

    欢迎你和我一起探讨这个话题,这是关于一个程序猿如何去学习的方法论。

    Email: keyle_xiao@hotmail.com  QQ群: 137728654 StrangeIOC

    1.Shader在游戏中的运用如图,我们创建了一个Shaer将其赋予一个Material(材质),然后将一些Texture(贴图)赋予这个材质上的对应Shader(在这个Shader内部对贴图与光照等因素做调整),最终将Material赋予对应的游戏物体,呈现出我们看到样子,这是我们对Shader应用最直观的认识

    material_diagram

    2.Shader示例

    这是一个最简陋的Unity ShaderLab

    Shader "MyShader" {
        Properties {
            _MyTexture ("My Texture", 2D) = "white" { }
            // other properties like colors or vectors go here as well
        }
        SubShader {
            // here goes the 'meat' of your
            // - surface shader or
            // - vertex and fragment shader or
            // - fixed function shader
        }
        SubShader {
            // here goes a simpler version of the SubShader above that
            // can run on older graphics cards
        }
    }

    这里我推荐阅读下 李剑英的 剑英陪你玩转图形学 系列博文

    3.使用ShaderForge创建一个Shader

    创建一个基本Shader,点击Complie进行语法检查

    image

    生成Shader文件如下,红色底的是ShaderForge的配置信息可以忽略,或是在Shader写完之后删掉

    // Shader created with Shader Forge Beta 0.36 
    // Shader Forge (c) Joachim Holmer - http://www.acegikmo.com/shaderforge/
    // Note: Manually altering this data may prevent you from opening it in Shader Forge
    /*SF_DATA;ver:0.36;sub:START;pass:START;ps:flbk:,lico:1,lgpr:1,nrmq:1,limd:1,uamb:True,mssp:True,lmpd:False,lprd:False,enco:False,frtr:True,vitr:True,dbil:False,rmgx:True,rpth:0,hqsc:True,hqlp:False,tesm:0,blpr:0,bsrc:0,bdst:0,culm:0,dpts:2,wrdp:True,ufog:True,aust:True,igpj:False,qofs:0,qpre:1,rntp:1,fgom:False,fgoc:False,fgod:False,fgor:False,fgmd:0,fgcr:0.5,fgcg:0.5,fgcb:0.5,fgca:1,fgde:0.01,fgrn:0,fgrf:300,ofsf:0,ofsu:0,f2p0:False;n:type:ShaderForge.SFN_Final,id:1,x:32719,y:32712;pass:END;sub:END;*/
    
    Shader "Shader Forge/NewShader" {
        Properties {
        }
        SubShader {
            Tags {
                "RenderType"="Opaque"
            }
            Pass {
                Name "ForwardBase"
                Tags {
                    "LightMode"="ForwardBase"
                }
                
                
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
                #define UNITY_PASS_FORWARDBASE
                #include "UnityCG.cginc"
                #pragma multi_compile_fwdbase_fullshadows
                #pragma exclude_renderers xbox360 ps3 flash d3d11_9x 
                #pragma target 3.0
                struct VertexInput {
                    float4 vertex : POSITION;
                };
                struct VertexOutput {
                    float4 pos : SV_POSITION;
                };
                VertexOutput vert (VertexInput v) {
                    VertexOutput o;
                    o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
                    return o;
                }
                fixed4 frag(VertexOutput i) : COLOR {
    ////// Lighting:
                    float3 finalColor = 0;
    /// Final Color:
                    return fixed4(finalColor,1);
                }
                ENDCG
            }
        }
        FallBack "Diffuse"
        CustomEditor "ShaderForgeMaterialInspector"
    }

    4.ShaderForge能满足我们大多数对于Shader的需求甚至是动画效果

    image

    是不是感觉这种东西简单爆了,太容易了?   嗯 对的,可视化操作大大提高了人工编写的效率,变得容易调试了(主要是现在没有什么好的IDE用)

    本系列博文并不在Shader的文法上过分深究,而是带入一个轻松愉快的学习环境,先学会如何通过ShaderForge实现,再对比实际文法,祝你玩的愉快!

  • 相关阅读:
    小程序 wx.navigateTo和 wx.redirectTo区别
    小程序返回上一级页面背景音乐报错 setBackgroundAudioState:fail title is nil!;
    centos7 安装RabbitMQ3.6.15 以及各种报错
    MYSQL创建分区时候报错
    scrapy操作mysql/批量下载图片
    深入浅出TCP与IP协议笔记
    python反射详解
    python迭代器
    python生成器
    loggong模块
  • 原文地址:https://www.cnblogs.com/Keyle/p/4444217.html
Copyright © 2020-2023  润新知