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

Unity SRP 管線【第七講:URP LOD實(shí)現(xiàn)以及Reflections反射探針】

這篇具有很好參考價(jià)值的文章主要介紹了Unity SRP 管線【第七講:URP LOD實(shí)現(xiàn)以及Reflections反射探針】。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

unity 模型lod,Unity圖形,unity,單一職責(zé)原則,游戲引擎
中文版:https://edu.uwa4d.com/lesson-detail/282/1314/0?isPreview=0
英文原版:https://catlikecoding.com/unity/tutorials/custom-srp/lod-and-reflections/

一、URP LOD 組件

unity 模型lod,Unity圖形,unity,單一職責(zé)原則,游戲引擎

1、LOD Group的使用

1. 首先該組件需要將子類模型置于該組件物體子節(jié)點(diǎn)下
unity 模型lod,Unity圖形,unity,單一職責(zé)原則,游戲引擎
2. 可在單個(gè)LOD中設(shè)置其level的模型,并可設(shè)置它的距離范圍,即可在不同距離下顯示不同的模型
unity 模型lod,Unity圖形,unity,單一職責(zé)原則,游戲引擎

若模型變化時(shí)間不符合預(yù)期,有如下幾種方式調(diào)節(jié):

  1. 重新繼續(xù)Bound,Unity會(huì)根據(jù)三種LOD模型計(jì)算該模型的包圍盒,從而在計(jì)算物體占屏幕
    unity 模型lod,Unity圖形,unity,單一職責(zé)原則,游戲引擎2. Project Settings > Quality > Level of Detail > LOD Bias, 該變量增大物體的評(píng)估高度,從而導(dǎo)致LOD切換時(shí)占比與實(shí)踐物體占比不同。將 LOD Bias設(shè)為1,可以使組件閾值與實(shí)際大小同步。
    unity 模型lod,Unity圖形,unity,單一職責(zé)原則,游戲引擎
  2. LOD過渡類型:
    unity 模型lod,Unity圖形,unity,單一職責(zé)原則,游戲引擎
    • Cross Fade(淡入淡出),F(xiàn)ade Transition Width可調(diào)節(jié)過渡區(qū)域占比
      unity 模型lod,Unity圖形,unity,單一職責(zé)原則,游戲引擎

2、LOD切換原理

Cross Fade(淡入淡出)模式

當(dāng)啟用Cross Fade(淡入淡出)模式,相鄰兩個(gè)LOD對(duì)象會(huì)同時(shí)渲染出來,著色器將以某種方式進(jìn)行混合。Unity通常使用屏幕抖動(dòng)或者混合來實(shí)現(xiàn)Cross Fade。

在URP通用管線中,LOD現(xiàn)只用于SpeedTree7XXX.shader,即大面積樹木的渲染,其余Shader并未使用,但并不代表不可以自定義。

我們可以通過UnityPerDraw下的變量float4 unity_LODFade; 取得LOD信息

CBUFFER_START(UnityPerDraw)
	float4 unity_LODFade; 
	// x is the fade value ranging within [0,1]. 
	// y is x quantized into 16 levels
CBUFFER_END
  • x分量存儲(chǔ)過渡因子(逐漸遠(yuǎn)離消失的LOD對(duì)象,x分量從1變換到0;漸入的LOD對(duì)象,x分量從0變換到 -1
  • y分量存儲(chǔ)了相同的因子,只不過被量化為16步

即,若漸出LOD的x值為0.4,則漸入LOD的值為 -0.6

我們可以通過一個(gè)Noise圖來決定使用哪一級(jí)LOD的選擇。

通過如下內(nèi)置函數(shù),即可快速得到一個(gè)Noise圖
float dither = InterleavedGradientNoise(positionCS.xy, 0);

使用屏幕抖動(dòng)實(shí)現(xiàn)LOD混合

void ShadowCasterPassFragment (Varyings input) {
	UNITY_SETUP_INSTANCE_ID(input);
	ClipLOD(input.positionCS.xy, unity_LODFade.x);}

void ClipLOD (float2 positionCS, float fade) {
	#if defined(LOD_FADE_CROSSFADE)
		float dither = InterleavedGradientNoise(positionCS.xy, 0);
		clip(fade + (fade < 0.0 ? dither : -dither));
	#endif
}

Animated Cross-Fading

啟用Animated Cross-Fading后,不再通過距離去設(shè)置漸入漸出的比例,當(dāng)物體組比例超過LOD閾值就通過動(dòng)畫快速交叉漸變。

默認(rèn)的動(dòng)畫持續(xù)時(shí)間為半秒,可以通過設(shè)置static LODGroup.crossFadeAnimationDuration來更改所有組的動(dòng)畫持續(xù)時(shí)間。然而,在unity2022中,當(dāng)不在播放模式下,轉(zhuǎn)換速度更快。

如果未設(shè)置Clip,并且Fade Transition Width不為0

則,當(dāng)距離處于交叉切換之間,會(huì)使兩個(gè)物體同時(shí)被渲染出來。
unity 模型lod,Unity圖形,unity,單一職責(zé)原則,游戲引擎
因此,如果未實(shí)現(xiàn)LOD交叉切換算法,請(qǐng)不要使用CrossFade選項(xiàng)。

LOD物體烘培

LOD0會(huì)被用于光照映射(Lightmapping)。其他LOD級(jí)別也會(huì)得到烘焙照明(Baked Light),但場(chǎng)景的其余部分只考慮LOD 0。你也可以決定只烘焙一些級(jí)別,讓其他級(jí)別依靠光探針。

SpeedTree 模式

這種模式是專門針對(duì)SpeedTree樹的,它使用自己的LOD系統(tǒng)來折疊樹,并在3D模型和廣告牌表示之間進(jìn)行轉(zhuǎn)換。
unity 模型lod,Unity圖形,unity,單一職責(zé)原則,游戲引擎

二、反射探針

1. 獲取反射探針數(shù)據(jù)

  1. 如果未定義LightMap(烘培光照),則會(huì)使用球諧函數(shù)作為基礎(chǔ)環(huán)境光顏色。此球諧函數(shù)即為環(huán)境球的球諧采樣結(jié)果。
  2. 若想使用IBL作為鏡面反射,需要添加反射探針標(biāo)志。
perObjectData |= PerObjectData.ReflectionProbes;

2. 環(huán)境光照明 IBL

在Unity中,IBL環(huán)境光照貼圖保存在UnityInput.hlsl

// Unity specific
TEXTURECUBE(unity_SpecCube0);
SAMPLER(samplerunity_SpecCube0);
TEXTURECUBE(unity_SpecCube1);
SAMPLER(samplerunity_SpecCube1);

在GlobalIllumination.hlsl中,使用函數(shù)

half3 CalculateIrradianceFromReflectionProbes(half3 reflectVector, float3 positionWS, half perceptualRoughness)

即可得到環(huán)境光照。函數(shù)中使用

half4 encodedIrradiance = half4(SAMPLE_TEXTURECUBE_LOD(unity_SpecCube0, samplerunity_SpecCube0, reflectVector, mip));

得到CubeMap Mipmap插值采樣結(jié)果,并根據(jù)是否使用HDR解碼。

#if defined(UNITY_USE_NATIVE_HDR)
        irradiance += weightProbe0 * encodedIrradiance.rbg;
#else
        irradiance += weightProbe0 * DecodeHDREnvironment(encodedIrradiance, unity_SpecCube0_HDR);
#endif // UNITY_USE_NATIVE_HDR

SAMPLE_TEXTURECUBE_LOD函數(shù)根據(jù)使用的API不同,實(shí)現(xiàn)各不相同
unity 模型lod,Unity圖形,unity,單一職責(zé)原則,游戲引擎

IBL在URP Shader中,通過如下函數(shù)得到包括環(huán)境光照在內(nèi)的所有全局光照。

lightingData.giColor = GlobalIllumination(brdfData, brdfDataClearCoat, surfaceData.clearCoatMask,
                                          inputData.bakedGI, aoFactor.indirectAmbientOcclusion, inputData.positionWS,
                                          inputData.normalWS, inputData.viewDirectionWS);
half3 reflectVector = reflect(-viewDirectionWS, normalWS);
half NoV = saturate(dot(normalWS, viewDirectionWS));
half fresnelTerm = Pow4(1.0 - NoV);

half3 indirectDiffuse = bakedGI;
half3 indirectSpecular = GlossyEnvironmentReflection(reflectVector, positionWS, brdfData.perceptualRoughness, 1.0h);

half3 color = EnvironmentBRDF(brdfData, indirectDiffuse, indirectSpecular, fresnelTerm);
  • bakedGI值為L(zhǎng)ightMap烘培光照數(shù)據(jù),或者是環(huán)境球諧的采樣結(jié)果。
  • 通過GlossyEnvironmentReflection計(jì)算基于環(huán)境的鏡面反射光照
  • 最后通過EnvironmentBRDF函數(shù)獲取混合結(jié)果(漫反射顏色 * 漫反射系數(shù) + 鏡面反射顏色 * 鏡面反射系數(shù))。
half3 EnvironmentBRDF(BRDFData brdfData, half3 indirectDiffuse, half3 indirectSpecular, half fresnelTerm)
{
    half3 c = indirectDiffuse * brdfData.diffuse;
    c += indirectSpecular * EnvironmentBRDFSpecular(brdfData, fresnelTerm);
    return c;
}

3. 反射探針(Reflection Probes)

在場(chǎng)景中未使用反射探針時(shí),場(chǎng)景中具有反射(包括鏡面反射Specular和金屬反射Metallic)的物體會(huì)使用天空貼圖(包括天空面 Sky Plane / 天空盒 Sky Box / 天空球 Sky Dome)的信息來制作反射效果。

默認(rèn)的 environment cube map 只包含天空盒。為了反射場(chǎng)景中的其他東西,我們必須通過GameObject / Light / reflection probe為其添加反射探針。這些探測(cè)器在它們的位置處看向場(chǎng)景,將場(chǎng)景渲染為立方體貼圖。因此,只有在靠近探測(cè)器的表面上,反射才會(huì)顯得或多或少正確。因此,通常需要在一個(gè)場(chǎng)景中放置多個(gè)探頭。它們具有Importance和Box Size屬性,可用于控制每個(gè)探針影響的區(qū)域。
unity 模型lod,Unity圖形,unity,單一職責(zé)原則,游戲引擎

探測(cè)器的Type默認(rèn)設(shè)置為Baked,這意味著它只渲染一次,CubeMap在構(gòu)建時(shí)渲染。你也可以將其設(shè)置為實(shí)時(shí),這將使地圖與動(dòng)態(tài)場(chǎng)景保持同步。它像任何其他相機(jī)一樣被渲染,使用我們的RP,對(duì)立方體地圖的六個(gè)面分別渲染一次。所以實(shí)時(shí)反射探測(cè)器很昂貴。

每個(gè)對(duì)象只使用一個(gè)環(huán)境探針,但場(chǎng)景中可以有多個(gè)探針。因此,你可能不得不 split 對(duì)象以獲得 acceptable(理想的) 的反射。例如,理想情況下,用于構(gòu)建結(jié)構(gòu)的立方體應(yīng)該分成單獨(dú)的內(nèi)部和外部部分,這樣每個(gè)部分都可以使用不同的反射探頭。此外,這意味著GPU batching 會(huì)被反射探針破壞。不幸的是,網(wǎng)格球根本不能使用反射探針,所以渲染出來的總是天空盒。
unity 模型lod,Unity圖形,unity,單一職責(zé)原則,游戲引擎

MeshRenderer組件有一個(gè)Anchor Override(直接將帶有Probe的物體拖上去就好),可以用來微調(diào)它們使用的探針,而不必?fù)?dān)心盒子的大小和位置。還有一個(gè)Reflection Probes,默認(rèn)設(shè)置為Blend Probes。我們的想法是,Unity允許在最好的兩個(gè)反射探針之間進(jìn)行混合。然而,這種模式與SRP批處理程序不兼容,所以Unity的其他rp不支持它,我們也不支持。如果你很好奇,我在2018年SRP教程的反射教程中解釋了如何混合探針,但我希望這個(gè)功能在遺留管道被刪除后消失。
unity 模型lod,Unity圖形,unity,單一職責(zé)原則,游戲引擎
我們將在將來研究其他反射技術(shù)。所以僅有的兩個(gè)功能模式是Off,它總是使用天空盒子,和Simple,它選擇最重要的探測(cè)器。其他的功能和Simple完全一樣。

除此之外,反射探針還可以選擇啟用box projection mode。這將改變?nèi)绾未_定反射以更好地匹配其有限的影響區(qū)域,但SRP批處理程序也不支持這一點(diǎn),因此我們也不支持它。

:物體在選擇反射探針時(shí),確定物體是否在探針包圍盒內(nèi),如果在,則加入列表;再根據(jù)所有影響物體的反射探針的權(quán)重,只保留權(quán)重最大的一批(若有2個(gè)權(quán)重為5,3個(gè)權(quán)重為3,則只保留權(quán)重為5的探針),再根據(jù)交叉體積權(quán)重計(jì)算保留的反射探針的系數(shù)。
特別的,當(dāng)大包圍盒反射探針完全覆蓋小包圍盒反射探針,且物體處于小包圍盒反射探針內(nèi),則默認(rèn)最小包圍盒探針為最重要探針。

解碼探針

最后,我們必須確保正確地解釋來自CubeMap的數(shù)據(jù)。它可以是HDR或LDR,其強(qiáng)度也可以調(diào)節(jié)。這些設(shè)置是通過unity_SpecCube0_HDR矢量提供的,它在UnityPerDraw緩沖區(qū)中的unity_ProbesOcclusion之后。

// Reflection Probe 0 block feature
// HDR environment map decode instructions
real4 unity_SpecCube0_HDR;
real4 unity_SpecCube1_HDR;

解碼函數(shù):

float3 SampleEnvironment (Surface surfaceWS, BRDF brdf) {return DecodeHDREnvironment(environment, unity_SpecCube0_HDR);
}

4. Box Projection 盒體投影

引自:技術(shù)美術(shù)雜談 反射探針(Reflection Probe)

在未開啟盒體投影時(shí),反射貼圖的圖像通常是通過從無限遠(yuǎn)處投射的。

開啟盒體投影允許我們使用探針包圍盒尺寸Probe Size 、探針包圍盒偏移 Probe Offset 以及鏡頭與反射物體的距離作為參數(shù),控制反射探針?biāo)傻姆瓷滟N圖的尺寸和效果。

通常情況下,Unity默認(rèn)開啟反射探針的盒體投影支持。如果想自定義不同畫面質(zhì)量是否支持盒體投影效果,可以在編輯面板 Edit →項(xiàng)目設(shè)置 Project Settings →圖像設(shè)置 Graphics →畫面分級(jí)設(shè)置 Tier Settings 中取消勾選使用默認(rèn)設(shè)置 Use Defaults ,并進(jìn)行自定義設(shè)置。文章來源地址http://www.zghlxwxcb.cn/news/detail-830862.html

到了這里,關(guān)于Unity SRP 管線【第七講:URP LOD實(shí)現(xiàn)以及Reflections反射探針】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(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)文章

  • Unity URP渲染管線與內(nèi)置渲染管線的性能差別

    首先,我們來了解一下Unity的內(nèi)置渲染管線。內(nèi)置渲染管線是Unity較早版本中使用的默認(rèn)渲染管線,它使用的是傳統(tǒng)的圖形渲染技術(shù)。內(nèi)置渲染管線提供了一系列的渲染功能,如陰影、反射、抗鋸齒等。但是,由于其較為龐大且復(fù)雜的設(shè)計(jì),它的性能相對(duì)較低。在高質(zhì)量圖形效

    2024年02月08日
    瀏覽(34)
  • Unity升級(jí)到URP渲染管線,

    Unity升級(jí)到URP渲染管線,

    首先 需要安裝URP的包 安裝后 然后打開ProjectSettings 替換 上一步創(chuàng)建 URP的配置文件 這個(gè)時(shí)候有些材質(zhì)就會(huì)變成洋紅色 選擇RenderPipelineConverter 等待轉(zhuǎn)換完成即可,

    2024年02月15日
    瀏覽(36)
  • Unity內(nèi)置渲染管線升級(jí)URP教程

    Unity內(nèi)置渲染管線升級(jí)URP教程

    URP全稱為Universal Render Pipeline(通用渲染管線),可以提供更加靈活的渲染方案,通過添加Render Feature實(shí)現(xiàn)各種渲染效果。并且可以針對(duì)移動(dòng)平臺(tái)進(jìn)行專門的優(yōu)化,同時(shí)還提供了SRPBatcher提高渲染效率。Unity的一些工具,比如ShaderGraph,也是必須在URP管線下才可以使用,可以說許多方

    2024年02月16日
    瀏覽(34)
  • Unity Shader從內(nèi)置渲染管線遷移到URP

    Unity 在URP中將shader更新為了HLSL語言,使用build-in shader 無法直接在URP中使用 這里講一下關(guān)于shader的更新方法 參考 From Built-in to URP Tags 添加 \\\"RenderPipeline\\\" = \\\"UniversalPipeline\\\" CGPROGRAM ENDCG 改變?yōu)?HLSLPROGRAM ENDHLSL #include \\\"UnityCG.cginc\\\" 更改為 #include \\\"Packages/com.unity.render-pipelines.universal/Sh

    2024年02月05日
    瀏覽(30)
  • Unity-3DRPG游戲 學(xué)習(xí)筆記(1)--使用URP渲染管線

    Unity-3DRPG游戲 學(xué)習(xí)筆記(1)--使用URP渲染管線

    教程地址: Unity2020 3DRPG游戲開發(fā)教程|Core核心功能01:Create Project 創(chuàng)建項(xiàng)目導(dǎo)入素材|Unity中文課堂_嗶哩嗶哩_bilibili 創(chuàng)建URP通用渲染管線(2021版本) 1. 打開:Windows--Package Manager--左上角下拉選擇Unity Registry--搜索Universal RP--Install 2.?Project窗口--Assets--右鍵Create--Rendering--URP Asstes

    2024年02月11日
    瀏覽(25)
  • unity build-in 渲染管線升級(jí)urp渲染 shader篇

    ????????由于工作原因需要對(duì)項(xiàng)目進(jìn)行升級(jí),從build-in渲染管線升級(jí)到urp渲染管線,我自己對(duì)應(yīng)的unity版本是2018.版本升級(jí)到2021.3.2版本,由于最近幾年unity版本升級(jí)比較快,個(gè)體版本差異有所不同,如遇與版本不一致問題敬請(qǐng)諒解。以下是根據(jù)官網(wǎng)等系列網(wǎng)站整理的內(nèi)容

    2023年04月16日
    瀏覽(44)
  • 【Unity URP渲染管線下設(shè)置燈光數(shù)量上限_燈光不顯示問題案例分享】

    【Unity URP渲染管線下設(shè)置燈光數(shù)量上限_燈光不顯示問題案例分享】

    1.我的這個(gè)項(xiàng)目是在URP渲染管線下,我在場(chǎng)景里創(chuàng)建了六個(gè)點(diǎn)燈,轉(zhuǎn)動(dòng)物體的時(shí)候,發(fā)現(xiàn)燈顯示不全,會(huì)一閃一閃的出現(xiàn)。 2.在RenderPipelineAsset配置文件中查看燈光數(shù)量上限,首先在EditProject Setting 3.在Project Setting里選Quality,在Rendering找到UniversalRP Asset 4.選中UniversalRP Asset文件

    2024年02月16日
    瀏覽(50)
  • Unity技美35——再URP管線環(huán)境下,配置post后期效果插件(post processing)

    Unity技美35——再URP管線環(huán)境下,配置post后期效果插件(post processing)

    前兩年在我的unity文章第10篇寫過,后效濾鏡的使用,那時(shí)候大部分項(xiàng)目用的還是unity的基礎(chǔ)管線,stander管線。 但是現(xiàn)在隨著unity的發(fā)展,大部分項(xiàng)目都用了URO管線,甚至很多PC端用的都是高效果的HDRP管線,這就導(dǎo)致以前的方法配置post后效,畫面中沒有效果。因此專門寫一個(gè)

    2024年02月02日
    瀏覽(18)
  • 【Unity Shader Graph URP渲染管線下的自定義半透明效果_半透明案例分享】

    【Unity Shader Graph URP渲染管線下的自定義半透明效果_半透明案例分享】

    URP的渲染管線下 在項(xiàng)目設(shè)置里找到“Graphic” 找到URP Asset文件 索引到Renderer List文件——“ForwardRenderer” 在這個(gè)“ForwardRenderer”文件里找到“Add Renderer Feature” 添加一個(gè)渲染對(duì)象,類似下圖:Render Object (Experimental) 如圖設(shè)置,將“Event”設(shè)置成 AfterRenderingSkybox ,然后“Layer M

    2024年02月09日
    瀏覽(33)
  • 【Unity 踩坑系列】項(xiàng)目升級(jí)URP/HDRP渲染管線時(shí)如何解決材質(zhì)丟失問題 (模型全部為粉紅色)

    【Unity 踩坑系列】項(xiàng)目升級(jí)URP/HDRP渲染管線時(shí)如何解決材質(zhì)丟失問題 (模型全部為粉紅色)

    在我們創(chuàng)建項(xiàng)目時(shí)候如果我們一開始使用的是默認(rèn)內(nèi)置渲染管線,后期項(xiàng)目需要升級(jí)到URP或者HDRP渲染管線時(shí)有可能會(huì)出現(xiàn)預(yù)制體材質(zhì)丟失的問題(原因是大部分資源的預(yù)制體在Unity官方推薦使用URP渲染管線之前,都只是使用默認(rèn)內(nèi)置管線的材質(zhì)。所以并不適配現(xiàn)在的URP渲染管

    2024年02月16日
    瀏覽(35)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包