【UnityShader】游戏人物角色捏脸妆容亮片

RPG游戏里现在基本都会有捏脸功能,捏脸也肯定会有妆容的选择。而在妆容上,比如眼妆,或者唇彩,加上blingbling的亮片效果会出色不少。

亮片效果:
亮片

材质面板

主要实现思路就是用视角与法线的点积作为offset去干扰noise贴图的采样,这样noise贴图就会随着视角而变化了。

float ndotv = dot(normal, viewDir);
half noise0 = tex2D(_NoiseTex, half2(i.uv.x + ndotv, i.uv.y)).r;
half noise1 = tex2D(_NoiseTex, half2(i.uv.x, i.uv.y + ndotv)).r;

把两次求得的noise相乘,并做幂运算,使亮片更精细,得到亮度值

float sparkle = pow(noise0 * noise1, _Sparkle); 

除此之外,注视中心的范围的亮片也会更亮。通过视角与法线的点积的幂运算,简易求得高光范围。

float highlight = pow(ndotv, _HighlightRange);

最后把亮片颜色与亮度值以及高光范围相乘,并加上初始颜色即可。

half3 sparkleColor = sparkle * _SparkleColor.rgb * highlight;
half3 finalColor = _Color.rgb + sparkleColor;

亮片效果所使用的noise贴图:
noise贴图

Shader全部代码:

Shader "Custom/Actor/Sparkle"
{
    Properties
    {
		_NoiseTex ("Noise Tex", 2D) = "white" {}
        _Color ("Color", Color) = (1,1,1,1)
		_Sparkle ("_Sparkle", Range(0.75, 5)) = 1
		_HighlightRange ("Highlight Range", Range(0, 5)) = 1 
		[HDR]_SparkleColor ("Sparkle Color", Color) = (1,1,1,1)
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }

        LOD 200

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

			sampler2D _NoiseTex;
			float4 _NoiseTex_ST;
			half4 _Color;

			float _Sparkle;
			half4 _SparkleColor;
			float _HighlightRange;

            struct appdata
            {
                float4 vertex	: POSITION;
				float3 normal	: NORMAL;
				float2 texcoord : TEXCOORD0;
            };

            struct v2f
            {
                float4 pos		: SV_POSITION;
				float3 normal	: TEXCOORD0;
				float3 worldPos	: TEXCOORD1;
				float2 uv		: TEXCOORD2;
            };

            v2f vert (appdata v)
            {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
				o.normal = UnityObjectToWorldNormal(v.normal);
				o.worldPos = mul(unity_ObjectToWorld, v.vertex);
				o.uv = TRANSFORM_TEX(v.texcoord, _NoiseTex);

                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
				half3 normal = normalize(i.normal);
				half3 viewDir = normalize(UnityWorldSpaceViewDir(i.worldPos));
				float ndotv = dot(normal, viewDir);
				half noise0 = tex2D(_NoiseTex, half2(i.uv.x + ndotv, i.uv.y)).r;
				half noise1 = tex2D(_NoiseTex, half2(i.uv.x, i.uv.y + ndotv)).r;

				float sparkle = pow(noise0 * noise1, _Sparkle); 
				float highlight = pow(ndotv, _HighlightRange);

				half3 sparkleColor = sparkle * _SparkleColor.rgb * highlight;

                return half4(_Color.rgb + sparkleColor, _Color.a);
            }
            ENDCG
        }
    }
}
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unity美妆游戏源码是一种基于Unity引擎开发的源码,旨在实现虚拟试妆功能的游戏。它具备了许多美妆游戏常见的特点和功能。 首先,该源码提供了丰富的美妆选择,包括口红、眉毛、眼影等不同类型的化妆品。用户可以根据自己的喜好和需求选择不同的美妆物品进行试妆,从而快速找到最适合自己的妆容。 其次,美妆游戏源码具备了实时编辑和调整的功能。用户可以通过拖拽、点击等操作,对所选化妆品进行位置、大小和颜色的调整,以便更好地适应自己的脸部特征和风格。这个功能更进一步提高了游戏的互动性和个性化。 此外,美妆游戏源码还可以结合相机功能,实现将虚拟试妆应用到真实人脸上的效果。用户可以使用手机摄像头或者上传自己的照片,然后在屏幕上进行虚拟试妆,以便更真实地了解自己的妆容效果。 最后,美妆游戏源码还可以提供妆容分享和保存的功能。用户可以将自己的试妆效果保存并分享到社交媒体上,与朋友们一起交流和对比。这种互动性能够增加用户的参与度和粘性,从而提高游戏的用户体验。 总的来说,Unity美妆游戏源码是一种能够满足用户美妆试妆需求的源码,并且通过其丰富的功能和互动性,不仅可以为用户提供乐趣和娱乐体验,还能够帮助用户更好地了解和尝试不同的妆容风格。 ### 回答2: Unity是一款流行的游戏开发引擎,提供了丰富的功能和工具,可以用来制作各种类型的游戏,包括美妆游戏。美妆游戏是一种让玩家能够尝试不同化妆样式和美妆产品的游戏,可以提供给用户一个虚拟的化妆体验。 在Unity美妆游戏源码中,通常会包含以下内容: 1. 用户界面:游戏界面需要直观且易于使用,包括各种功能按钮和选项,例如化妆品选择、化妆技巧指导等。 2. 化妆品库:游戏需要包含各种类型的化妆品,如口红、眼影、腮红等。每个化妆品应该有自己的属性,如颜色、贴图等。 3. 人脸识别和追踪:为了让玩家能够在游戏中虚拟尝试化妆品,需要使用人脸识别和追踪技术,实时追踪玩家的面部表情和特征。 4. 化妆技巧指导:游戏可以提供化妆技巧和步骤的指导,帮助玩家学习正确的化妆方法。 5. 美妆效果展示:游戏需要提供实时的美妆效果展示,让玩家可以在完成化妆后查看自己的形象。 美妆游戏源码可以为开发者提供一个完整的基础框架,包含了上述功能的实现代码,可以大大加快游戏开发的过程。开发者可以根据自己的需求和创意,对源码进行二次开发和定制,以创建出独特的美妆游戏。总结起来,Unity美妆游戏源码为开发者提供了一个快速制作美妆游戏的起点,让他们能够专注于游戏逻辑和设计,而不用从零开始构建整个游戏框架。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值