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

多層Unity3D物體模型穿透問題處理

這篇具有很好參考價值的文章主要介紹了多層Unity3D物體模型穿透問題處理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本文針對在一個界面中展示多層3D物體時遇到的模型穿透問題提出一些解決方案

如圖,當我們想要在同一個界面中展示兩層或以上3D物體時,有時會因為第一層物體材質(zhì)上的 shader 渲染深度被破壞或其它原因?qū)е碌谝粚拥奈矬w穿透到第二層界面上來了。

在 Scene 視圖中這三個橙色球體原本是在第二層黃色背景之下的:

unity可操作物體如何避免穿模,# Unity游戲開發(fā)筆記,unity,3d,游戲程序

但是在 Game 視圖中我們發(fā)現(xiàn)那三個橙色球體居然跑到第二層黃色背景之上來了,這就出現(xiàn)了模型穿透問題:

unity可操作物體如何避免穿模,# Unity游戲開發(fā)筆記,unity,3d,游戲程序

由于以上兩層3D物體的展示是在同一個界面上的,所以無法通過設置每個界面獨立的 SortingLayer 來解決問題。此時可以通過設置第一層物體材質(zhì)上的 shader 渲染深度解決問題:

首先在所有3D物體的 shader 文件中的 Properties 及 SubShader 中加入以下代碼,其中的默認值可以根據(jù)實際需要進行更改:

Properties 中:
		_Stencil("Stencil ID", Float) = 2
		_StencilComp("StencilComp", int) = 6
		_StencilPass("StencilPass", int) = 0

SubShader 的 Pass 中:
			Stencil
			{
				Ref[_Stencil]
				Comp[_StencilComp]
				Pass[_StencilPass]
			}

加完部分效果如下圖:

unity可操作物體如何避免穿模,# Unity游戲開發(fā)筆記,unity,3d,游戲程序

加完之后可以根據(jù)這三個枚舉值,設置3D物體的渲染深度。具體用法與規(guī)則可以參考下這篇文章:Stencil 在 Unity 中的使用

具體解決思路是:首先在第二層界面上使用一個遮罩擋住第一層界面上的3D物體。這個遮罩使用的 shader 需要設置成大于第一層3D物體并同時小于第二層3D物體的渲染深度。比如說,假如第一層3D物體設置的 Stencil ID 、StencilComp、StencilPass (這個枚舉值在有的地方也叫 Stencil Operation ) 三個枚舉值分別為2、6、0,此時遮罩就可以設置成2、8、2,這樣就可以在擋住第一層的3D物體的同時,不影響第二層的3D物體。具體效果如下:

第一層3D物體的 shader 渲染深度枚舉值:

unity可操作物體如何避免穿模,# Unity游戲開發(fā)筆記,unity,3d,游戲程序

用于擋住第一層3D物體的遮罩 shader 渲染深度枚舉值,其中 Always 表示 8 ,Replace 表示 2 :

unity可操作物體如何避免穿模,# Unity游戲開發(fā)筆記,unity,3d,游戲程序

第三層3D物體的 shader 渲染深度枚舉值:

unity可操作物體如何避免穿模,# Unity游戲開發(fā)筆記,unity,3d,游戲程序

加載3D物體時設置當前實例 shader 渲染深度枚舉值方法如下:(這種方式只會修改當前加載的物體,而不會對其它同樣使用這個 shader 文件的對象產(chǎn)生影響)

	local skinnedMeshArray = go.transform:GetComponentsInChildren(typeof(UnityEngine.Renderer))
    if skinnedMeshArray.Length <= 0 then
        return
    end
    for i = 0, skinnedMeshArray.Length - 1 do
        local skinnedMesh = skinnedMeshArray[i]
        for j = 0, skinnedMesh.materials.Length - 1 do
            skinnedMesh.materials[j]:SetInt("_Stencil", 2)
            skinnedMesh.materials[j]:SetInt("_StencilComp", 6)
            skinnedMesh.materials[j]:SetInt("_StencilPass", 0)
        end
    end

如此一來,就可以實現(xiàn)分層管理3D物體,從而不出現(xiàn)模型穿透現(xiàn)象了。希望本文能夠?qū)δ阌兴鶐椭?,以上?span toymoban-style="hidden">文章來源地址http://www.zghlxwxcb.cn/news/detail-782620.html

到了這里,關于多層Unity3D物體模型穿透問題處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包