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

實現(xiàn)草地Shader的物體互動效果

這篇具有很好參考價值的文章主要介紹了實現(xiàn)草地Shader的物體互動效果。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

我跟著教程:https://zhuanlan.zhihu.com/p/433385999 用Unity Shader實現(xiàn)了草地效果。

接下來我分享一下我在這篇文章的基礎(chǔ)上實現(xiàn)簡單的草地互動效果的經(jīng)驗。

1、從腳本中傳入?yún)?shù)

如果需要實現(xiàn)互動效果,需要實現(xiàn)腳本向shader的傳遞參數(shù)。
腳本使用下面的代碼:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//將這個組件拖給物體可以使其與草地互動
//互動范圍是物體postion為中心的球體
public class MeshInteractWithGrass : MonoBehaviour
{
    void Update()
    {
        Shader.SetGlobalVector("_PositionMoving", transform.position);
    }
}

在場景中創(chuàng)建一個膠囊體,掛上這個腳本。

2、參數(shù)傳入Shader并驗證

在最初尋找傳參的方法的時候,如何驗證shader確實收到了參數(shù)是一個很重要的問題。

首先在shader 的CG代碼段添加變量:

Vector _PositionMoving;//由腳本傳入

我開始的時候在Shader的Properties中添加了_PositionMoving("Pos", Vector) = (0, 0, 0, 0)變量,但是我發(fā)現(xiàn)這樣似乎無法正確接收到變量。
所以腳本中使用Shader.SetGlobalVector傳入數(shù)據(jù)的時候,shader中不要再添加Properties了。
直接在CG代碼段里面添加變量就好。

然后找到片元著色器 frag,把 frag 內(nèi)部其他代碼都注釋掉,添加下面的代碼:

//測試物體互動,測試數(shù)據(jù)是否傳進去了
return(_PositionMoving);

隨后運行游戲。移動物體,查看草葉的顏色是否有變化。
如果有變化,說明物體的位置數(shù)據(jù)通過腳本成功的傳進了Shader中。

實現(xiàn)草地Shader的物體互動效果

實現(xiàn)草地Shader的物體互動效果

3、實現(xiàn)草葉頂點偏轉(zhuǎn)

3.1、原理

請先根據(jù)文章開頭的文章完成草地的實現(xiàn)

可以在生成草葉頂點的時候,對頂點施加一個用向量控制的偏移,來實現(xiàn)草葉偏轉(zhuǎn)而草根不動。

教程BIRP - Grass Geometry Shader with Interactivity | Patreon中有簡單提到實現(xiàn)原理,但沒有說清楚細節(jié)。

在Shader的Properties中添加下面兩個變量,用于控制互動范圍和強度:

//其他物體與草的互動范圍
_Radius("Radius", Float) = 1
//互動強度
_Strength("Strength", Float) = 1

在CG代碼段添加:

//物體互動
float _Radius;
float _Strength;

這個教程的草地實現(xiàn)的時候,在幾何著色器使用了一個循環(huán)用于細分草葉頂點。生成頂點的時候使用了函數(shù)GenerateGrassVertex。我們接下來的改動都在這個函數(shù)中進行。

在這個函數(shù)localPosition的定義后添加下面的代碼:

//計算物體偏移
float3 ObjectPos = mul(unity_WorldToObject, _PositionMoving.xyz);
float3 dis = distance(ObjectPos, localPosition);
float3 radius = 1 - saturate(dis / _Radius);
float3 sphereVector = localPosition - ObjectPos;
sphereVector *= radius;
sphereVector = sphereVector.xyz * _Strength;
localPosition += sphereVector;

我嘗試在模型空間下計算偏移。

  • 首先將傳入的物體坐標轉(zhuǎn)換到模型空間下。
  • 然后計算物體與新生成的頂點的距離。
  • 然后計算距離與_Radius變量之間的比例
  • 用頂點坐標向量減去物體坐標,得到從物體位置指向草葉頂點位置的向量sphereVector
  • sphereVector乘radius,實現(xiàn)不同距離有不同的向量大小
  • sphereVector乘_Strength調(diào)整偏移力度大小
  • localPosition加上得到的向量sphereVector實現(xiàn)偏移

這樣就形成了以物體為中心的球形偏移:
實現(xiàn)草地Shader的物體互動效果文章來源地址http://www.zghlxwxcb.cn/news/detail-730794.html

到了這里,關(guān)于實現(xiàn)草地Shader的物體互動效果的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 【unity shader案例】如何實現(xiàn)一個玻璃效果

    【unity shader案例】如何實現(xiàn)一個玻璃效果

    ? 原理:玻璃最大的特點當然就是半透明了,如何在游戲中實現(xiàn)這樣的效果呢?我這里總體的思路就是先截取整個場景作為一張紋理,然后把玻璃區(qū)域的紋理貼到這個玻璃模型上。 下面看具體實現(xiàn)代碼 實現(xiàn)效果如下 ? ?更進一步,還可以實現(xiàn)毛玻璃的效果,思路就是用一張

    2024年02月16日
    瀏覽(90)
  • Unity中Shader實現(xiàn)UI流光效果

    Unity中Shader實現(xiàn)UI流光效果

    在很多游戲的 UI 中,都有實現(xiàn) 一道光掃過 UI 的效果 Unity中Shader的時間_Time 注意: 因為,這是UGUI的Shader,記著修改渲染順序為 透明層級 和 混合模式 Tags {“Queue” = “TransParent”} Blend SrcAlpha OneMinusSrcAlpha 代碼: 效果: Unity3D Shader系列之UI流光效果 Unity流光shader,無需圖片

    2024年02月05日
    瀏覽(23)
  • 智慧城市炫酷效果、threejs繪制道路、shader實現(xiàn)道路流光效果
  • 【unity實戰(zhàn)】使用shader和shader Graph實現(xiàn)2d圖片描邊效果(附源碼)

    【unity實戰(zhàn)】使用shader和shader Graph實現(xiàn)2d圖片描邊效果(附源碼)

    最近在學習shader Graph相關(guān)內(nèi)容,其實關(guān)于實現(xiàn)2d圖片描邊效果,網(wǎng)上可以看到很多教程,但是我發(fā)現(xiàn)大多數(shù)都是基于比較老舊的2018unity版本,可是我們實際開發(fā)使用可能是比較新的2021及以上版本,差別還是有的,實際在升級或者使用過程中,會遇到諸多問題,而且也很少有人

    2024年02月16日
    瀏覽(98)
  • Unity中Shader抓取屏幕并實現(xiàn)扭曲效果(優(yōu)化)

    Unity中Shader抓取屏幕并實現(xiàn)扭曲效果(優(yōu)化)

    對上一篇中實現(xiàn)的shader進行優(yōu)化 1、定義結(jié)構(gòu)體用于傳入頂點坐標系 struct appdata { float4 vertex : POSITION; //從應用程序階段的輸入,多加一個uv,用于對扭曲紋理的采樣 float2 uv : TEXCOORD; }; 2、因為UnityObjectToClipPos是從本地空間轉(zhuǎn)換到裁剪空間,但是沒有進行透視除法,所以需要對其

    2024年02月03日
    瀏覽(24)
  • Unity Shader學習記錄(11) ——透明效果的實現(xiàn)方式

    Unity Shader學習記錄(11) ——透明效果的實現(xiàn)方式

    1 透明效果的兩種方法 透明是游戲中經(jīng)常要使用的一種效果。在實時渲染中要實現(xiàn)透明效果,通常會在渲染模型時控制它的透明通道(Alpha Channel)。當開啟透明混合后,當一個物體被渲染到屏幕上時,每個片元除了顏色值和深度值之外,它還有另一個屬性一一透明度。 當透明度

    2024年02月07日
    瀏覽(24)
  • 【實現(xiàn)100個unity特效之2】使用shader和shader Graph實現(xiàn)2d圖片描邊效果(附源碼)

    【實現(xiàn)100個unity特效之2】使用shader和shader Graph實現(xiàn)2d圖片描邊效果(附源碼)

    最近在學習shader Graph相關(guān)內(nèi)容,其實關(guān)于實現(xiàn)2d圖片描邊效果,網(wǎng)上可以看到很多教程,但是我發(fā)現(xiàn)大多數(shù)都是基于比較老舊的2018unity版本,可是我們實際開發(fā)使用可能是比較新的2021及以上版本,差別還是有的,實際在升級或者使用過程中,會遇到諸多問題,而且也很少有人

    2024年01月21日
    瀏覽(97)
  • unity shader 入門 全透明與半透明效果實現(xiàn)

    unity shader 入門 全透明與半透明效果實現(xiàn)

    片元函數(shù)的fixed4類型的返回值的第4位即為阿爾法值,0代表完全不顯示(透明),1代表完全顯示。中間的數(shù)值代表半透明。但只修改這個值是不能直接修改透明度的,因為還要對隊列等進行修改。 本文介紹透明度測試與透明度混合,前者只能制作全透明效果,后者可制作半透明

    2024年02月14日
    瀏覽(24)
  • 【Unity Shader】Unity中利用GrabPass實現(xiàn)玻璃效果

    【Unity Shader】Unity中利用GrabPass實現(xiàn)玻璃效果

    《入門精要》中模擬玻璃是用了Unity里的一個特殊的Pass來實現(xiàn)的,這個Pass就是 GrabPass ,比起上一篇博客實現(xiàn)鏡子的方法,這個方法我認為相對復雜,因此在實現(xiàn)之前需要對GrabPass及實現(xiàn)原理做一個更加詳細的介紹。 場景物體拜訪和貼圖完全參考《入門精要》: 以及當前場景

    2024年02月09日
    瀏覽(36)
  • 【實現(xiàn)100個unity特效】shader實現(xiàn)3D物品閃光和描邊效果

    【實現(xiàn)100個unity特效】shader實現(xiàn)3D物品閃光和描邊效果

    線狀映射圖片 配置,按該shader新增材質(zhì) Outline Width控制描邊 Line Speed控制閃光速度 當然,還可以修改對應的顏色 效果演示 贈人玫瑰,手有余香!如果文章內(nèi)容對你有所幫助,請不要吝嗇你的 點贊評論和關(guān)注 ,以便我第一時間收到反饋,你的每一次 支持 都是我不斷創(chuàng)作的最

    2024年01月25日
    瀏覽(92)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包