• 总结


    1.我图中采用的模型是使用单模型多材质球,所以只展示了一个身体,单模型但材质直接赋值材质球就好,如果是单模型多材质的需要多创建几个材质球,因为每一部分的发现切图和Albedo图是不一样的。
    2.这里就不展示Demo了,东西比较简单,感兴趣的可以研究一下这个插件Amplify Shader Editor,我用的是1.6.1版本
    3.源码我也附上在下面

    源码:
    Shader “ASE/Ray”
    {
    Properties
    {
    _ASEOutlineWidth( “Outline Width”, Float ) = 0
    _Albedo(“Albedo”, 2D) = “white” {}
    _Normalmap(“Normal map”, 2D) = “white” {}
    _Color0(“Color 0”, Color) = (1,0,0,0)
    _Alpha(“Alpha”, Float) = 0
    _Bias(“Bias”, Range( 0 , 1)) = 0
    _Scale(“Scale”, Range( 0 , 1)) = 0
    _Power(“Power”, Range( 0 , 1)) = 0
    [HideInInspector] _texcoord( “”, 2D ) = “white” {}
    [HideInInspector] __dirty( “”, Int ) = 1
    }

    SubShader
    {
    Tags{ "RenderType" = "Transparent" "Queue" = "Transparent+0"}
    ZWrite Off
    ZTest Always
    Cull Front
    CGPROGRAM
    #pragma target 3.0
    #pragma surface outlineSurf Outline nofog alpha:fade keepalpha noshadow noambient novertexlights nolightmap nodynlightmap nodirlightmap nometa noforwardadd vertex:outlineVertexDataFunc



    struct Input
    {
    float3 worldPos;
    float3 worldNormal;
    INTERNAL_DATA
    };
    uniform float4 _Color0;
    uniform float _Bias;
    uniform float _Scale;
    uniform float _Power;
    uniform float _Alpha;
    uniform half _ASEOutlineWidth;

    void outlineVertexDataFunc( inout appdata_full v, out Input o )
    {
    UNITY_INITIALIZE_OUTPUT( Input, o );
    v.vertex.xyz += ( v.normal * _ASEOutlineWidth );
    }
    inline half4 LightingOutline( SurfaceOutput s, half3 lightDir, half atten ) { return half4 ( 0,0,0, s.Alpha); }
    void outlineSurf( Input i, inout SurfaceOutput o )
    {
    float3 ase_worldPos = i.worldPos;
    float3 ase_worldViewDir = normalize( UnityWorldSpaceViewDir( ase_worldPos ) );
    float3 ase_worldNormal = WorldNormalVector( i, float3( 0, 0, 1 ) );
    float fresnelNdotV7 = dot( ase_worldNormal, ase_worldViewDir );
    float fresnelNode7 = ( _Bias + _Scale * pow( 1.0 - fresnelNdotV7, _Power ) );
    float lerpResult18 = lerp( ( 1.0 - (_Color0).a ) , fresnelNode7 , (-2.0 + (_Alpha - 0.0) * (0.0 - -2.0) / (1.0 - 0.0)));
    o.Emission = _Color0.rgb;
    o.Alpha = lerpResult18;
    o.Normal = float3(0,0,-1);
    }
    ENDCG

    Tags{ "RenderType" = "Opaque" "Queue" = "Geometry+1" }
    Cull Back
    ZWrite On
    ZTest LEqual
    CGPROGRAM
    #pragma target 3.0
    #pragma surface surf Standard keepalpha addshadow fullforwardshadows vertex:vertexDataFunc
    struct Input
    {
    float2 uv_texcoord;
    };

    uniform sampler2D _Normalmap;
    uniform float4 _Normalmap_ST;
    uniform sampler2D _Albedo;
    uniform float4 _Albedo_ST;

    void vertexDataFunc( inout appdata_full v, out Input o )
    {
    UNITY_INITIALIZE_OUTPUT( Input, o );
    v.vertex.xyz += 0;
    }

    void surf( Input i , inout SurfaceOutputStandard o )
    {
    float2 uv_Normalmap = i.uv_texcoord * _Normalmap_ST.xy + _Normalmap_ST.zw;
    o.Normal = UnpackNormal( tex2D( _Normalmap, uv_Normalmap ) );
    float2 uv_Albedo = i.uv_texcoord * _Albedo_ST.xy + _Albedo_ST.zw;
    o.Albedo = tex2D( _Albedo, uv_Albedo ).rgb;
    o.Alpha = 1;
    }

    ENDCG
    }
    Fallback "Diffuse"
    CustomEditor "ASEMaterialInspector"
    --------------------- 

  • 相关阅读:
    jmeter如何引用自己编写的java文件编译的jar包
    Vue+Django REST framework 打造生鲜电商项目(学习笔记二)
    mysql笔试题
    面试遇到的问题
    Idea中maven项目pom文件中已引入testng但项目文件中无法引入@Test
    记录一次TestNg+MyBatis中的SqlSession出现的问题,问题虽然解决了但尚未明白问题原因
    PyMySQL的基本操作
    MySQL循环语句
    Vue父子组件和非父子组件间的通信
    Python的静态方法和类成员方法
  • 原文地址:https://www.cnblogs.com/hyhy904/p/11329138.html
Copyright © 2020-2023  润新知