UnityShader学习教程之<StandardShader>

这篇主要讲shader开发之StanderShader与自己项目的结合!

[Shader解读与结合]

[StandardShader]

这个shader我们可以在untiy官网上下载到:
在这里插入图片描述
这里我们可以下载unity自带的shader!
在这里插入图片描述
这里就是基于物理着色的shader!
在这里插入图片描述
这里可以看到两个入口函数可以在下面的cginc库里找到,然后打开库:
在这里插入图片描述
然后再UnityStandardCore库里面找到对应的函数名:
在这里插入图片描述

[ShaderForge中的基于物理的着色]

我们只是在ShaderFoge中调处基本的物理着色,因为StanderShader对于我们的可扩展性稍差,需要自己扩展的话我们简单的使用ShaderForge就行!
在这里插入图片描述
打开一个ShaderForge基于物理的着色shader,我们需要实现任何其他的效果,都第一个子着色器,的前置灯光通道里面实现!根据代码的标签,我们可以很清楚的知道每一步都做了什么内容,这里需要能读懂shader代码,需要一些代码基础!

实例:实现多带透明通道的图层叠加

1.在设置面板添加新的标签:

    Properties {
        _BumpMap ("Normal Map", 2D) = "bump" {}
        _Color ("Color", Color) = (0.5019608,0.5019608,0.5019608,1)
        _MainTex ("MainTex", 2D) = "white" {}
		_Character("Character",2D) = "white"{}
        _Metallic ("Metallic", Range(0, 1)) = 0
        _Gloss ("Gloss", Range(0, 1)) = 0.8
		_Specular("Specular",Range(0,1)) = 1
		_Saturation("Saturation",Range(0,1.5)) = 1
		_TimeA("TimeA",Range(0,2)) = 1
    }

2.加入unity的金属质感的光照处理:

	    CGINCLUDE
        #define UNITY_SETUP_BRDF_INPUT MetallicSetup
        ENDCG

3.加入透明通道的叠加处理:

           Blend SrcAlpha OneMinusSrcAlpha

4.在两个不同的通道处理两张不同的图片:

            Tags {
                "LightMode" = "ForwardBase"
            }
            Tags {
                "LightMode"="ForwardBase"
            }

5.找到diffuse标签,加入自己的逻辑处理:

/// Diffuse:
                NdotL = max(0.0,dot( normalDirection, lightDirection ));
                half fd90 = 0.1 + 1 * LdotH * LdotH * (1-gloss);
                float nlPow5 = Pow5(1-NdotL);
                float nvPow5 = Pow5(1-NdotV);
                float3 directDiffuse = ((1 +(fd90 - 1)*nlPow5) * (1 + (fd90 - 1)*nvPow5) * NdotL) * attenColor;
                float3 indirectDiffuse = float3(0,0,0);
                indirectDiffuse += gi.indirect.diffuse;
                float3 diffuse = (directDiffuse + indirectDiffuse) * diffuseColor;

/// Final Color:
                float3 finalColor = diffuse + specular;
                fixed4 finalRGBA = fixed4(finalColor,_MainTex_var.a);
                UNITY_APPLY_FOG(i.fogCoord, finalRGBA);
                return finalRGBA;

6.最后我们就能实现完美的贴图叠加效果了
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值