亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Unity3D The Blacksmith 角色陰影技術使用心得

2019-11-11 01:59:38
字體:
來源:轉載
供稿:網友

     這個demo放出來之后,對其中的角色陰影部分的技術十分感興趣,我就趕緊下過來研究了一下。官方的技術博客里有對這一部分技術的介紹,鏈接在這里:獨特的角色陰影,

其中寫到只要在其他shader里添加

#PRagma multi_compile _ UNIQUE_SHADOW UNIQUE_SHADOW_LIGHT_COOKIE#include "UniqueShadow_ShadowSample.cginc"這兩行代碼就能使用這個高級陰影了。 我之前也因為在做一些demo的時候發現unity默認陰影達不到理想效果,和ue4比起來還是有一定差距的。于是就想到使用這個陰影技術了。于是我興致勃勃的把這兩行代碼和幾個庫文件加到我的shader和項目里去,一運行發現,高級陰影并沒有出現。哎,看樣子只能自己研究了。

   既然是陰影,那么著手點就是unity里的陰影部分的代碼,手動寫過自定義陰影的人應該都知道,unity陰影計算:SHADOW_COORDS、TRANSFER_SHADOW、SHADOW_ATTENUATION三個函數了,unity把陰影生成的代碼都寫在了這三個函數里,方便調用。我看The Blacksmith的技術博客上寫著:  我們發現原來有一個非常簡單的方法來對常見的Unity shader所用的陰影方法進行重寫。 于是我琢磨著應該是他們也用了這三個方法,于是打開 UniqueShadow_ShadowSample.cginc 文件,果不其然,在最下面找到了這么一段代碼

#if defined(UNITY_PASS_FORWARDBASE) || defined(UNITY_PASS_FORWARDADD) || defined(UNIQUE_SHADOW_FORCE_REPLACE_BUILTIN)	#undef SHADOW_COORDS	#undef TRANSFER_SHADOW	#undef SHADOW_ATTENUATION	#define SHADOW_COORDS(i)					UNIQUE_SHADOW_INTERP(i)	#define TRANSFER_SHADOW						o.uniqueShadowPos = mul(u_UniqueShadowMatrix, float4(worldPos.xyz, 1.f));	#define SHADOW_ATTENUATION(i)				UNIQUE_SHADOW_SAMPLE(i);#endif這里的意思就是,如果判斷pass的名字是

UNITY_PASS_FORWARDBASE、NITY_PASS_FORWARDADD、UNIQUE_SHADOW_FORCE_REPLACE_BUILTIN

這三個的話,就會把   

SHADOW_COORDS(i) 替換成UNIQUE_SHADOW_INTERP(i),SHADOW_ATTENUATION(i)替換成UNIQUE_SHADOW_SAMPLE(i);TRANSFER_SHADOW的值替換成后面的 o.uniqueShadowPos這樣的話就好說了,之后只要把自己的shader里生成陰影的pass名字改成三個里的任意一個,生成陰影的代碼還是按照原來的方式寫就可以了。于是我立馬新建了一個Unlit Shader,添加上生成陰影的代碼后,把pass的名字改成了UNITY_PASS_FORWARDBASE,代碼如下

Shader "Custom/simpleSuperShadow"{	Properties	{		_MainTex ("Texture", 2D) = "white" {}	}	SubShader	{		Tags { "RenderType"="Opaque" }				LOD 100		Pass		{			Tags{ "LightMode" = "ForwardBase" }			CGPROGRAM			#pragma vertex vert			#pragma fragment frag			#pragma multi_compile_fwdbase			#include "UnityCG.cginc"			#include "AutoLight.cginc"#define UNITY_PASS_FORWARDBASE#pragma multi_compile _ UNIQUE_SHADOW UNIQUE_SHADOW_LIGHT_COOKIE#include "UniqueShadow/UniqueShadow_ShadowSample.cginc"								struct v2f			{				float2 uv : TEXCOORD0;				float4 pos : SV_POSITION;				float3 worldPos : TEXCOORD1;				SHADOW_COORDS(2)			};			sampler2D _MainTex;			float4 _MainTex_ST;						v2f vert (appdata_full v)			{				v2f o;				o.pos = mul(UNITY_MATRIX_MVP, v.vertex);				o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);						o.worldPos = mul(_Object2World, v.vertex).xyz;				TRANSFER_SHADOW(o);				return o;			}						fixed4 frag (v2f i) : SV_Target			{				// sample the texture				fixed4 col = tex2D(_MainTex, i.uv);				fixed shadow = SHADOW_ATTENUATION(i);				return col * shadow;			}			ENDCG		}	}		FallBack "Diffuse"}點擊運行之后,shader報錯,提示我頂點函數里worldPos未定義,報錯的地方是在TRANSFER_SHADOW(o)這一行,但是我明明在v2f里定義了這個變量,并且在上一行賦值了才對。這個提示不應該出現才對。對于這個問題,我毫無頭緒,不知道自己哪里出了問題。于是我又新建了一個standard surface shader,這次我只在里面添加了#pragma multi_compile _ UNIQUE_SHADOW UNIQUE_SHADOW_LIGHT_COOKIE#include "UniqueShadow/UniqueShadow_ShadowSample.cginc"兩行,運行一下,居然成功了,于是我在編輯器里點開了surface shader的原始代碼,通過仔細對比陰影生成的三個函數發現,surface shader在頂點函數使用worldPos的時候,并不是直接給o.worldPos賦值的,而是先定義了一個float3的worldPos變量,計算出來以后再讓o.worldPos = worldPos,這里感覺應該是一樣的才是,并沒有什么特別的地方啊。雖然我不是很清楚surface shader里為啥要這么寫,但是抱著試一試的心情,我把自己的shader的頂點函數從原來的

v2f vert (appdata_full v){	v2f o;	o.pos = mul(UNITY_MATRIX_MVP, v.vertex);	o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);			o.worldPos = mul(_Object2World, v.vertex).xyz;	TRANSFER_SHADOW(o);	return o;}這樣,改成了

v2f vert (appdata_full v){	v2f o;	o.pos = mul(UNITY_MATRIX_MVP, v.vertex);	o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);	float3 worldPos = mul(_Object2World, v.vertex).xyz;	o.worldPos = worldPos;	TRANSFER_SHADOW(o);	return o;}這樣,于是我運行一下。臥槽竟然成功了。按道理來說定義一個臨時變量和直接賦值應該沒有區別才是,為啥這里不定義一個就不行呢,mul(_Object2Wrold,v.vertex).xyz返回的本來就是一個float3的變量才是,為毛非要這么做才能正確顯示呢。實在是不知道要怎么解釋。希望知道的大大們能夠幫我解釋一下??偨Y一下這個高級陰影的使用方法1.給計算陰影的pass添加

#define UNITY_PASS_FORWARDBASE#pragma multi_compile _ UNIQUE_SHADOW UNIQUE_SHADOW_LIGHT_COOKIE#include "UniqueShadow/UniqueShadow_ShadowSample.cginc"

這三行代碼,然后在頂點函數使用TRANSFES_SHADOW的地方改成float3 worldPos = mul(_Object2World, v.vertex).xyz;o.worldPos = worldPos;TRANSFER_SHADOW(o);這樣自定義的shader也能夠使用這個超高分辨率的陰影了。

這里我用了一個卡通shader做測試未使用高級陰影:使用高級陰影:這樣就能做出媲美ue4的高級陰影來了。


上一篇:spring 頭文件

下一篇:poj2550

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人网页在线免费观看| 国内精品久久久久影院 日本资源| 日韩精品在线电影| 久久成年人免费电影| 日韩av网址在线| 欧美日本高清一区| 九九九热精品免费视频观看网站| 国产精品久久久一区| 国产v综合ⅴ日韩v欧美大片| 久久精品美女视频网站| 久久久久久综合网天天| 国产一区二区丝袜高跟鞋图片| 91国产美女视频| 久久久精品亚洲| 成人精品在线观看| 成人激情视频在线播放| 日本高清视频一区| 久久91亚洲精品中文字幕奶水| 欧美成人午夜激情视频| 色99之美女主播在线视频| 久久香蕉精品香蕉| 搡老女人一区二区三区视频tv| 国产亚洲欧美日韩一区二区| 91在线观看免费网站| 国产精品高潮在线| 国产在线观看精品一区二区三区| 久久久噜噜噜久久中文字免| 亚洲欧美一区二区三区在线| 中国china体内裑精亚洲片| 97久久超碰福利国产精品…| 精品国产依人香蕉在线精品| 亚洲专区国产精品| 久久亚洲精品一区二区| 中日韩午夜理伦电影免费| 欧美一级淫片aaaaaaa视频| 久久精品99久久久香蕉| 久久综合电影一区| 欧美人与物videos| 奇米一区二区三区四区久久| 亚洲欧美国产一本综合首页| 日韩电影视频免费| 成人欧美在线视频| 日韩欧美中文第一页| 久久精品99久久久久久久久| 亚洲欧美日韩网| 日韩精品高清在线观看| 97在线视频免费| www.欧美免费| 色综合天天综合网国产成人网| 亚洲精品国产精品久久清纯直播| 久久视频在线免费观看| 国产精品中文在线| 97在线视频精品| 黑人巨大精品欧美一区免费视频| 成人国产精品日本在线| 久久综合国产精品台湾中文娱乐网| 中文字幕精品视频| 欧美极品少妇xxxxⅹ免费视频| 亚洲成人精品视频在线观看| 日韩小视频在线观看| www.亚洲人.com| 欧美孕妇与黑人孕交| 欧美日韩精品在线视频| 国产亚洲在线播放| 国产精品丝袜一区二区三区| 亚洲精品电影网| 亚洲自拍偷拍视频| 欧美一级电影免费在线观看| 日韩欧美在线免费| 成人高清视频观看www| 欧美激情啊啊啊| 国产在线观看一区二区三区| 日本欧美爱爱爱| 97视频免费在线观看| 美女久久久久久久| 亚洲精品国产成人| 久热精品视频在线免费观看| 久久99青青精品免费观看| 日韩女优人人人人射在线视频| 亚洲毛片在线看| 成人午夜在线影院| 久久天天躁日日躁| 亚州av一区二区| 国产精品一区二区久久久久| 在线日韩第一页| 国产精品狼人色视频一区| 91久久夜色精品国产网站| 欧美激情喷水视频| 国产精品久久久久久久久影视| 影音先锋欧美在线资源| 欧美福利视频在线观看| 久久精品国产久精国产一老狼| 国产精品白嫩初高中害羞小美女| 7777kkkk成人观看| 亚洲精品wwww| 欧美一级黑人aaaaaaa做受| 成人精品久久久| 川上优av一区二区线观看| 成人免费福利视频| 亚洲视频在线播放| 久久99国产综合精品女同| 欧美日韩国产123| 色婷婷综合久久久久| 日韩高清电影免费观看完整| 欧美成人网在线| 一区二区三区久久精品| 高清欧美性猛交xxxx黑人猛交| 国产精品爽爽爽爽爽爽在线观看| 精品色蜜蜜精品视频在线观看| 欧美最猛性xxxxx免费| 亚洲国产高潮在线观看| 亚洲精品国产电影| 亚洲欧美日韩精品久久| 精品久久久久久久久久ntr影视| 国产精品久久久久久久久久东京| 欧美超级乱淫片喷水| 日韩精品在线视频观看| 精品丝袜一区二区三区| 欧美精品九九久久| 一区二区三欧美| 亚洲欧美日韩第一区| 中文字幕亚洲字幕| 欧美日韩精品在线视频| 欧美电影在线观看高清| 欧美黑人一区二区三区| 亚洲日韩中文字幕| 国产精品黄色影片导航在线观看| 精品毛片网大全| 亚洲成人av中文字幕| 久久天天躁夜夜躁狠狠躁2022| 国产精国产精品| 亚洲天堂av网| 日韩中文第一页| 中文字幕欧美精品在线| 日韩中文视频免费在线观看| 欧美激情综合亚洲一二区| 国产成人精品一区二区三区| 国产精品视频免费在线| 中文字幕欧美国内| 日本19禁啪啪免费观看www| 国产精品一区二区三区久久| 国产有码在线一区二区视频| 国产亚洲精品久久久优势| 国产一区二区免费| 久久综合五月天| 亚洲精品资源在线| 久久精品人人爽| 精品亚洲男同gayvideo网站| 日韩欧美福利视频| 久久久久久久久久av| 社区色欧美激情 | 日韩**中文字幕毛片| xxxx欧美18另类的高清| 精品偷拍各种wc美女嘘嘘| 日韩在线视频一区| 国产精品丝袜高跟| 国产精品中文久久久久久久| 亚洲小视频在线观看| 性夜试看影院91社区| 欧美性猛交xxx| 色偷偷av亚洲男人的天堂| 精品国产一区av| 色综合久久精品亚洲国产| 亚洲丁香久久久|