国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Unity制作二次元卡通渲染角色材質(zhì)——3、高光反射與ILM貼圖

這篇具有很好參考價(jià)值的文章主要介紹了Unity制作二次元卡通渲染角色材質(zhì)——3、高光反射與ILM貼圖。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Unity制作二次元材質(zhì)角色


回到目錄

大家好,我是阿趙。
這里繼續(xù)來(lái)講二次元角色的材質(zhì)。上次講了光影的色階化問(wèn)題,這次繼續(xù)講光照模型效果的問(wèn)題。
之前我們說(shuō)過(guò),光照模型的最后效果是:
環(huán)境色+漫反射+高光+反射。
這里我們可以先忽略環(huán)境光,然后之前做了漫反射,用的是HalfLambert,剩下的就是高光和反射了

一、高光

繼續(xù)套用之前學(xué)過(guò)的高光光照模型,習(xí)慣上是使用BlinnPhong。

//獲取BlinnPhong高光
float GetBlinnPhongSpec(float3 worldPos, float3 worldNormal)
{
float3 viewDir = normalize(UnityWorldSpaceViewDir(worldPos));
float3 halfDir = normalize((viewDir + _WorldSpaceLightPos0.xyz));
float specDir = max(dot(normalize(worldNormal), halfDir), 0);
float specVal = pow(specDir, _shininess);
return specVal;
}
half4 frag (v2f i) : SV_Target
{
    half4 col = tex2D(_BaseMap, i.uv);
	half4 sssCol = tex2D(_SSSMap, i.uv);

	//色階化
	half halfLambert = GetHalfLambertDiffuse(i.worldPos, i.worldNormal);
	half toonVal = smoothstep(_GradationMin, _GradationMax, halfLambert);
	//高光
	half specVal = GetBlinnPhongSpec(i.worldPos, i.worldNormal);	
	half3 finalRGB = col.rgb*toonVal + sssCol * (1 - toonVal) + _specColor * specVal;
	half alpha = col.a;
    return half4(finalRGB,alpha);
}

Unity制作二次元卡通渲染角色材質(zhì)——3、高光反射與ILM貼圖

加上高光之后,模型就變成這樣了,高光有點(diǎn)強(qiáng)過(guò)頭了。先不管,把效果都加上,最后再調(diào)。

二、反射

熟悉我的朋友都知道了,加反射效果,阿趙一般是推薦Matcap的,特別是這種不需要真反射,只是要一點(diǎn)環(huán)境假反射的情況。
于是又找到Matcap的代碼,加上去。

float2 GetMatCapUV(float3 normalWorld)
{
	float3 normalView = mul(UNITY_MATRIX_IT_MV, normalWorld);
	return normalView.xy*0.5 + 0.5;
}
half4 frag (v2f i) : SV_Target
{
    // sample the texture
    half4 col = tex2D(_BaseMap, i.uv);
	half4 sssCol = tex2D(_SSSMap, i.uv);

	//色階化
	half halfLambert = GetHalfLambertDiffuse(i.worldPos, i.worldNormal);
	half toonVal = smoothstep(_GradationMin, _GradationMax, halfLambert);

	//高光
	half specVal = GetBlinnPhongSpec(i.worldPos, i.worldNormal);
	//matcap
	float2 MatCapUV = GetMatCapUV(i.worldNormal)*_MatCapUVScale;
	float4 MatCapCol = tex2D(_MatCapTex, MatCapUV)*_MatCapIntensity;
	MatCapCol = pow(MatCapCol, _MatCapPow);
				

	half3 finalRGB = col.rgb*toonVal + sssCol  * (1 - toonVal)+_specColor* specVal;
	finalRGB = finalRGB * MatCapCol.rgb;

	half alpha = col.a;
    return half4(finalRGB,alpha);
}

Unity制作二次元卡通渲染角色材質(zhì)——3、高光反射與ILM貼圖

這個(gè)效果,已經(jīng)加上了BlinnPhong高光、Matcap反射。但明顯效果是不對(duì)的,角色像一個(gè)少林寺十八銅人似的。

三、ILM貼圖

上面把高光和反射加上去之后,發(fā)現(xiàn)效果不對(duì)。那么需要怎樣去修正呢?
我們可以分析一下,效果不對(duì)的原因是什么:
1、某些部位的反射強(qiáng)度不對(duì),比如皮膚,不應(yīng)該反射這么強(qiáng)烈
2、高光的范圍不對(duì),有些部位的高光范圍應(yīng)該被控制在一個(gè)局部
3、反射的范圍不對(duì),反射不應(yīng)該所有地方都一樣的強(qiáng)度,應(yīng)該根據(jù)實(shí)際的材質(zhì)來(lái)顯示,比如皮膚是不會(huì)反射的,皮衣可能有一點(diǎn),吉他的金屬漆部分應(yīng)該有比較強(qiáng)的反射。
那么,我們應(yīng)該怎樣去控制這些強(qiáng)度和范圍呢?這里我們需要回顧一下,之前分析資源時(shí),得到的ILM貼圖的實(shí)際情況:
由于已經(jīng)知道ILM貼圖的A通道是內(nèi)描線,所以這里先忽略,只看RGB三個(gè)通道:
首先是R通道:
Unity制作二次元卡通渲染角色材質(zhì)——3、高光反射與ILM貼圖

然后是G通道:
Unity制作二次元卡通渲染角色材質(zhì)——3、高光反射與ILM貼圖

然后是B通道:
Unity制作二次元卡通渲染角色材質(zhì)——3、高光反射與ILM貼圖

這里可以猜測(cè)一下,三個(gè)通道的作用了。
比較明顯的是R通道,他明顯是控制高光強(qiáng)弱的。
G通道的作用不是很明顯,只有臉部和身上某些部位是比較白,其他的顏色都一樣。這樣應(yīng)該是控制影子強(qiáng)度的,
B通道只有某些局部亮起來(lái),大部分都是黑的,可以理解成,是用來(lái)控制高光和反射的形狀范圍的。
于是我們可以把ILM貼圖對(duì)應(yīng)的通道的值,加在之前的高光和反射上面。
首先來(lái)看高光部分:

half4 frag (v2f i) : SV_Target
{
    // sample the texture
    half4 col = tex2D(_BaseMap, i.uv);
	half4 sssCol = tex2D(_SSSMap, i.uv);
	half4 ilmCol = tex2D(_ILMMap, i.uv);

	//色階化
	half halfLambert = GetHalfLambertDiffuse(i.worldPos, i.worldNormal);
	half toonVal = smoothstep(_GradationMin, _GradationMax, halfLambert);
	//高光
	half specVal = GetBlinnPhongSpec(i.worldPos, i.worldNormal);
	half3 finalRGB = col.rgb*toonVal + sssCol  * (1 - toonVal)+_specColor* specVal*ilmCol.r+ _specColor * specVal*ilmCol.b*_SpecAdd;		

	half alpha = col.a;
    return half4(finalRGB,alpha);
}

使用ILM貼圖的R通道控制高光強(qiáng)度,本來(lái)ILM貼圖的B通道是控制形狀的,我這里修改了一下用法,變成了在R通道控制完強(qiáng)度之后,使用B通道把某些區(qū)域的高光加強(qiáng)一下,比如胸部的光點(diǎn),衣服上的金屬邊的高光點(diǎn)等。于是就得到了這樣的效果:
Unity制作二次元卡通渲染角色材質(zhì)——3、高光反射與ILM貼圖

再來(lái)看Matcap部分,直接用B通道控制范圍,為了看得更清楚一些,所以暫時(shí)把高光去掉:

half4 frag (v2f i) : SV_Target
{
    // sample the texture
    half4 col = tex2D(_BaseMap, i.uv);
	half4 sssCol = tex2D(_SSSMap, i.uv);
	half4 ilmCol = tex2D(_ILMMap, i.uv);

	//色階化
	half halfLambert = GetHalfLambertDiffuse(i.worldPos, i.worldNormal);
	half toonVal = smoothstep(_GradationMin, _GradationMax, halfLambert);


	float2 MatCapUV = GetMatCapUV(i.worldNormal)*_MatCapUVScale;
	float4 MatCapCol = tex2D(_MatCapTex, MatCapUV)*_MatCapIntensity;
	MatCapCol = pow(MatCapCol, _MatCapPow);



	half3 finalRGB = col.rgb*toonVal + sssCol * (1 - toonVal);
	finalRGB = finalRGB * (1-ilmCol.b) +MatCapCol.rgb*ilmCol.b;

	half alpha = col.a;
    return half4(finalRGB,alpha);
}

Unity制作二次元卡通渲染角色材質(zhì)——3、高光反射與ILM貼圖

這時(shí)候可以看到,之前十八銅人一般的全身反射已經(jīng)沒(méi)有了,變成了只有指定的部位出現(xiàn)了反射效果。
最后,把ILM對(duì)高光和反射的影響一起加上,就得到了:

Unity制作二次元卡通渲染角色材質(zhì)——3、高光反射與ILM貼圖文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-513023.html

四、完整Shader

Shader "azhao/ToonBodyLight"
{
    Properties
    {
        _BaseMap ("BaseMap", 2D) = "white" {}
		_SSSMap("SSSMap", 2D) = "white" {}
		_ILMMap("ILMMap", 2D) = "white" {}

		_specColor("specColor",Color) = (1,1,1,1)
		_shininess("shininess", Range(1 , 100)) = 1
		_SpecAdd("SpecAdd",float) = 1.0


		_GradationMin("GradationMin",Range(0.0,1.0)) = 0.0
		_GradationMax("GradationMax",Range(0.0,1.0)) = 1.0


		_MatCapTex("MatCapTex", 2D) = "white" {}
		_MatCapIntensity("MatCapIntensity",Range(0,2)) = 1
		_MatCapPow("MatCapPow",Range(0,5)) = 1
		_MatCapUVScale("MatCapUVScale",Range(0,1)) = 1

    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"
			#pragma multi_compile_fwdbase
			#include "AutoLight.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
				float2 uv2 : TEXCOORD1;
				float3 normal:NORMAL;
            };

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

            sampler2D _BaseMap;
            float4 _BaseMap_ST;
			sampler2D _SSSMap;
			sampler2D _ILMMap;

			float4 _specColor;
			float _shininess;

			float _SpecAdd;
			float _GradationMin;
			float _GradationMax;
			sampler2D _MatCapTex;
			float _MatCapIntensity;
			float _MatCapPow;
			float _MatCapUVScale;

			//獲取HalfLambert漫反射值
			float GetHalfLambertDiffuse(float3 worldPos, float3 worldNormal)
			{
				float3 lightDir = UnityWorldSpaceLightDir(worldPos);
				float NDotL = dot(worldNormal, lightDir);
				float halfVal = NDotL * 0.5 + 0.5;
				return halfVal;
			}

			//獲取BlinnPhong高光
			float GetBlinnPhongSpec(float3 worldPos, float3 worldNormal)
			{
				float3 viewDir = normalize(UnityWorldSpaceViewDir(worldPos));
				float3 halfDir = normalize((viewDir + _WorldSpaceLightPos0.xyz));
				float specDir = max(dot(normalize(worldNormal), halfDir), 0);
				float specVal = pow(specDir, _shininess);
				return specVal;
			}


			float2 GetMatCapUV(float3 normalWorld)
			{
				float3 normalView = mul(UNITY_MATRIX_IT_MV, normalWorld);
				return normalView.xy*0.5 + 0.5;
			}

            v2f vert (appdata v)
            {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _BaseMap);
				o.uv2 = TRANSFORM_TEX(v.uv2, _BaseMap);
				o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
				o.worldNormal = UnityObjectToWorldNormal(v.normal);
                return o;
            }

            half4 frag (v2f i) : SV_Target
            {
                // sample the texture
                half4 col = tex2D(_BaseMap, i.uv);
				half4 sssCol = tex2D(_SSSMap, i.uv);
				half4 ilmCol = tex2D(_ILMMap, i.uv);

				//色階化
				half halfLambert = GetHalfLambertDiffuse(i.worldPos, i.worldNormal);
				half toonVal = smoothstep(_GradationMin, _GradationMax, halfLambert);

				//高光
				half specVal = GetBlinnPhongSpec(i.worldPos, i.worldNormal);
				//matcap
				float2 MatCapUV = GetMatCapUV(i.worldNormal)*_MatCapUVScale;
				float4 MatCapCol = tex2D(_MatCapTex, MatCapUV)*_MatCapIntensity;
				MatCapCol = pow(MatCapCol, _MatCapPow);


				half3 finalRGB = col.rgb*toonVal + sssCol  * (1 - toonVal)+_specColor* specVal*ilmCol.r+ _specColor * specVal*ilmCol.b*_SpecAdd;
				finalRGB = finalRGB * (1-ilmCol.b) +MatCapCol.rgb*ilmCol.b;

				half alpha = col.a;
                return half4(finalRGB,alpha);
            }
            ENDCG
        }

    }
}

到了這里,關(guān)于Unity制作二次元卡通渲染角色材質(zhì)——3、高光反射與ILM貼圖的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 原神3D卡通動(dòng)漫二次元角色模型Blender已綁骨骼

    原神3D卡通動(dòng)漫二次元角色模型Blender已綁骨骼

    3Dmax/C4D這類軟件應(yīng)該做三維的都知道。Blender知道的應(yīng)該不多。一款跨平臺(tái)開源的 3D 創(chuàng)作軟件,可以在 Linux、macOS 以及 Windows 系統(tǒng)下運(yùn)行。與其他 3D 建模工具相比,Blender 對(duì)內(nèi)存和驅(qū)動(dòng)的需求更低。 今天給大家分享一組Blender格式的資源,56個(gè)原神角色模型,2K高清貼圖,帶骨

    2024年02月11日
    瀏覽(32)
  • Unity 卡通渲染之角色篇

    Unity 卡通渲染之角色篇

    作為新博客的第一篇,就用卡渲作為開篇叭!畢竟是個(gè)二次元樂(lè)。本篇同步發(fā)表于http://chenglixue.top/index.php/unity/73/ 之前使用UE的后處理做過(guò)簡(jiǎn)單的卡渲,但因其靈活性很差,很多操作都需涉及到更改管線,且奈何本人在校用的筆記本,一次build就得好久,因此放棄對(duì)卡渲的深入

    2024年02月05日
    瀏覽(29)
  • 【Unity實(shí)戰(zhàn)系列】如何把你的二次元老婆/老公導(dǎo)入U(xiǎn)nity進(jìn)行二創(chuàng)并且進(jìn)行二次元渲染?(附模型網(wǎng)站分享)

    【Unity實(shí)戰(zhàn)系列】如何把你的二次元老婆/老公導(dǎo)入U(xiǎn)nity進(jìn)行二創(chuàng)并且進(jìn)行二次元渲染?(附模型網(wǎng)站分享)

    君兮_的個(gè)人主頁(yè) 即使走的再遠(yuǎn),也勿忘啟程時(shí)的初心 C/C++ 游戲開發(fā) Hello,米娜桑們,這里是君兮_,在正式開始講主線知識(shí)之前,我們先來(lái)講點(diǎn)有趣且有用的東西。 我知道,除了很多想從事游戲開發(fā)行業(yè)的人以外,還有更多的人學(xué)習(xí)Unity是因?yàn)榕d趣愛好,想要讓自己喜歡的角

    2024年02月12日
    瀏覽(25)
  • 【unity游戲開發(fā)教程】Unity+Umotion Pro+VRoid+Blender制作人物模型和動(dòng)畫,在unity中簡(jiǎn)單制作二次元人物動(dòng)畫

    【unity游戲開發(fā)教程】Unity+Umotion Pro+VRoid+Blender制作人物模型和動(dòng)畫,在unity中簡(jiǎn)單制作二次元人物動(dòng)畫

    大家好!本期教程教大家在unity中制作二次元人物模型和動(dòng)畫 1.下載VRoid Studio 1.搜索VRoid Studio下載即可,或者前往官網(wǎng)VRoid官網(wǎng) VRoid Studio是由pixiv開發(fā)的一款3D人物建模軟件,VRoid的主要特征就是通過(guò)類似繪畫的方式進(jìn)行人物的建模,使人們更為輕松地創(chuàng)造自己的虛擬人物。

    2024年02月10日
    瀏覽(34)
  • Three.js之幾何體、高光材質(zhì)、渲染器設(shè)置、gui

    陣列立方體和相機(jī)適配體驗(yàn) Threejs常見幾何體簡(jiǎn)介 … gui.js庫(kù)(可視化改變?nèi)S場(chǎng)景) 注:基于Three.js v0.155.0 長(zhǎng)方體:BoxGeometry 球體:SphereGeometry 圓柱:CylinderGeometry 矩形平面:PlaneGeometry 圓形平面:CircleGeometry 高光網(wǎng)格材質(zhì):MeshPhongMaterial(shininess、specular) WebGL渲染器設(shè)置:

    2024年02月11日
    瀏覽(28)
  • ai繪畫二次元美女圖片怎么制作,試試這三個(gè)方法

    ai繪畫二次元美女圖片怎么制作,試試這三個(gè)方法

    只要通過(guò)輸入簡(jiǎn)單的文字描述,就可以得到多張高質(zhì)量的藝術(shù)作品,怎么會(huì)有人錯(cuò)過(guò)這樣的神仙工具! 我建議沒(méi)用過(guò)的小伙伴都可以嘗試一下,生圖效果是真的很棒! 下面先給大家欣賞幾張ai繪畫風(fēng)格不同的圖片~ 看完我相信大家也心動(dòng)了,下面馬上分享三個(gè)簡(jiǎn)單易操作的

    2024年02月08日
    瀏覽(35)
  • unity NPR 卡通渲染

    unity NPR 卡通渲染

    NPR是計(jì)算機(jī)圖形學(xué)中的一類,即非真實(shí)感繪制(Non-photorealistic rendering),主要用于模擬藝術(shù)式的繪制風(fēng)格,也用于發(fā)展新繪制風(fēng)格,形式一般是卡通造影。 NPR是Unity中的一種非真實(shí)渲染技術(shù),它使用一種稱為\\\"NPR\\\"的算法來(lái)模擬非真實(shí)渲染效果。這種技術(shù)可以用于制作各種類型的

    2024年02月05日
    瀏覽(25)
  • unity+webgl+websocket實(shí)時(shí)口型+二次元語(yǔ)音老婆

    unity+webgl+websocket實(shí)時(shí)口型+二次元語(yǔ)音老婆

    文章開始首先感謝 B站UP:?陰沉的怪咖?提供的最初資源包 2.gif 體驗(yàn)地址 體驗(yàn)地址?www.aixmao.com 不能放視頻,看效果去B站鏈接:B站鏈接_bilibili UP主提供初始代碼地址: Github地址:https://github.com/zhangliwei7758/unity-AI-Chat-Toolkit Gitee地址:https://gitee.com/DammonSpace/unity-ai-chat-toolkit 2、LipSy

    2024年02月02日
    瀏覽(33)
  • Unity-Chan Toon Shader卡通渲染學(xué)習(xí)

    Unity-Chan Toon Shader卡通渲染學(xué)習(xí)

    (本文記錄一下從0-1復(fù)刻UTS2,持續(xù)更新中) Unity-Chan Toon Shader? 2.0 (UTS2) ?是一款用于圖像和視頻的卡通著色器,旨在滿足從事卡通著色 3DCG 動(dòng)畫的創(chuàng)作者的需求。 UTS2開源項(xiàng)目地址: GitHub - unity3d-jp/UnityChanToonShaderVer2_Project: UnityChanToonShaderVer2 Project / v.2.0.9 Release (1)3 Bas

    2024年02月04日
    瀏覽(27)
  • 【Unity天空盒】卡通渲染中如何實(shí)現(xiàn)云的消散效果

    【Unity天空盒】卡通渲染中如何實(shí)現(xiàn)云的消散效果

    寫在前面 完成大氣渲染之后,接下來(lái)就是考慮云渲染了。因?yàn)槲蚁胱龅奶炜蘸斜旧硎窍敫@位大佬Unity 卡通渲染 程序化天空盒 - 知乎里敘述的進(jìn)程來(lái)的,里面云實(shí)現(xiàn)的是原神里的云,原神又是在崩3的基礎(chǔ)上加上了消散效果。但現(xiàn)在能找到的一些教程or展示的視頻里,很多

    2023年04月08日
    瀏覽(46)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包