欧美网址在线观看-亚洲最新毛片-国产成人免费爽爽爽视频-亚洲一区在线影院-日韩欧美在线观看视频网站-男女激情四射-成人一区二区免费看-欧美亚洲综合在线-日韩一级视频在线播放-国产成人三级视频在线播放-亚洲中文字幕日产无码2020-99久久久国产精品免费无卡顿-av在线观看地址-果冻传媒mv免费播放在线观看-欧美在线观看视频免费-日韩天天操

聯系我們 - 廣告服務 - 聯系電話:
您的當前位置: > 關注 > > 正文

世界報道:世界空間中的著色器 從對象空間到世界空間的轉換

來源:CSDN 時間:2023-02-02 09:45:36

在《在著色器中調試》章節中提到,頂點輸入參數使用語義詞 POSITION 指定對象的坐標,即本地對象(模型)的網格空間坐標,對象空間(對象的坐標系統)是特定于每個游戲對象的,然而,所有的游戲對象會被轉換到一個共同的坐標系中(世界空間)。

如果一個對象被直接放入世界空間中,游戲對象會通過轉換組件直接將對象的坐標轉成世界坐標。你可以在 Scene 視圖或者 Hierarchy 視圖中選中一個對象,然后在 Inspector 視圖中查看 Transform 組件。在 Transform 組件中包括 Position、Rotation 和 Scale 屬性,這個組件用來指定從本地坐標到世界坐標的頂點轉換(如果一個游戲對象擁有父級對象,那么轉換組件只轉換父級對象的坐標)。在《Vertex Transformations》章節中,我們將討論頂點的轉換、旋轉、縮放以及 4 x 4 矩陣組合變換的細節。

回到我們的例子中:從對象空間到世界空間的轉換是通過 4 x 4 矩陣來轉換的,也叫“模型矩陣”,這個矩陣在 Unity 中通過 uniform 參數 _Object2World 已經聲明了:


(資料圖)

Shader "Custom/World Space"

{ SubShader { Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag //uniform flaot4*4 Object3World //automatic definition of a Unity-specific uniform parameter 自動定義統一值是unity的一個特性 struct vertexOutput  { float4 pos: SV_POSITION; float4 position_in_world_space : TEXCOORD0; }; vertexOutput vert(float4 vertex:POSITION)  { vertexOutput output; output.pos = mul(UNITY_MATRIX_MVP,vertex); output.position_in_world_space = mul(_Object2World,vertex);//物體坐標轉化為世界坐標 return output; } float4 frag(vertexOutput input) :COLOR { float dist = distance(input.position_in_world_space,float4(0.0,0.0,0.0,1.0));  //計算片段位置與原點距離(第四個坐標永遠是1) if (dist < 5.0) { return float4(0.0, 1.0, 0.0, 1.0);   //接近 } else return float4(0.3,0.3,0.3,1.0);//遠離原點 } ENDCG } }

}

更多的 Unity Uniforms

在 Unity 中,定義了幾個和 _Object2World 一樣的 float4x4  矩陣,下面是在系列教程中使用的 uniforms 簡短列表:

uniform float4 _Time, _SinTime, _CosTime; // time valuesuniform float4 _ProjectionParams;// x = 1 or -1 (-1 if projection is flipped)// y = near plane; z = far plane; w = 1/far planeuniform float4 _ScreenParams; // x = width; y = height; z = 1 + 1/width; w = 1 + 1/heightuniform float4 unity_Scale; // w = 1/scale; see _World2Objectuniform float3 _WorldSpaceCameraPos;uniform float4x4 _Object2World; // model matrixuniform float4x4 _World2Object; // inverse model matrix // (all but the bottom-right element have to be scaled // with unity_Scale.w if scaling is important) uniform float4 _LightPositionRange; // xyz = pos, w = 1/rangeuniform float4 _WorldSpaceLightPos0; // position or direction of light sourceuniform float4x4 UNITY_MATRIX_MVP; // model view projection matrix uniform float4x4 UNITY_MATRIX_MV; // model view matrixuniform float4x4 UNITY_MATRIX_V; // view matrixuniform float4x4 UNITY_MATRIX_P; // projection matrixuniform float4x4 UNITY_MATRIX_VP; // view projection matrixuniform float4x4 UNITY_MATRIX_T_MV; // transpose of model view matrixuniform float4x4 UNITY_MATRIX_IT_MV; // transpose of the inverse model view matrixuniform float4x4 UNITY_MATRIX_TEXTURE0; // texture matrixuniform float4x4 UNITY_MATRIX_TEXTURE1; // texture matrixuniform float4x4 UNITY_MATRIX_TEXTURE2; // texture matrixuniform float4x4 UNITY_MATRIX_TEXTURE3; // texture matrixuniform float4 UNITY_LIGHTMODEL_AMBIENT; // ambient color

用戶指定 Uniforms:著色器屬性

還有一個更重要的 uniform  參數:用戶自定義的 uniforms。實際上,這是 Unity 的屬性,你可以認為他們是著色器的用戶自定義 uniform 參數。通常一個著色器不帶參數只能由編寫的程序員在一些特定的程序中使用,但是如果一個著色器擁有參數并且還帶有描述性的說明,那么這個著色器就可以被其他人使用,另外,如果你打算出售你的著色器,為著色器的提供參數會大大增加它的價值。

因為在 Unity 的 ShaderLab  中使用《description of shader properties 》非常不錯,通過下面的例子我們來了解如何使用著色器屬性,首先,我們聲明一個屬性,然后我們再定義一個與屬性名稱相同、類型相同的 uniforms 。

Shader "Cg shading in world space" {   Properties    {      _Point ("a point in world space", Vector) = (0., 0., 0., 1.0)      _DistanceNear ("threshold distance", Float) = 5.0      _ColorNear ("color near to point", Color) = (0.0, 1.0, 0.0, 1.0)      _ColorFar ("color far from point", Color) = (0.3, 0.3, 0.3, 1.0)   }    SubShader    {      Pass       {         CGPROGRAM          #pragma vertex vert           #pragma fragment frag           #include "UnityCG.cginc"          // defines _Object2World and _World2Object         // uniforms corresponding to properties         uniform float4 _Point;         uniform float _DistanceNear;         uniform float4 _ColorNear;         uniform float4 _ColorFar;          struct vertexInput          {            float4 vertex : POSITION;         };         struct vertexOutput          {            float4 pos : SV_POSITION;            float4 position_in_world_space : TEXCOORD0;         };          vertexOutput vert(vertexInput input)          {            vertexOutput output;              output.pos =  mul(UNITY_MATRIX_MVP, input.vertex);            output.position_in_world_space = mul(_Object2World, input.vertex);            return output;         }          float4 frag(vertexOutput input) : COLOR          {            float dist = distance(input.position_in_world_space, _Point);            // computes the distance between the fragment position             // and the position _Point.            if (dist < _DistanceNear)            {               return _ColorNear;             }            else            {               return _ColorFar;             }         }         ENDCG        }   }}

使用 sharedMaterial 我們可以改變所有使用了這個材質的對象的參數,如果你只希望改變一個并使用了這個材質的對象的參數,那么你應該使用 material 。假如你設置 _Point 屬性為另一個對象的位置信息,這樣你只需要在 Unity 中移動這個對象就可以查看效果了,你可以復制/粘貼 下面的代碼到一個 C# 腳本中:

using UnityEngine;using System.Collections;[ExecuteInEditMode]public class NewBehaviourScript : MonoBehaviour {public GameObject other;void Update(){if(other != null){GetComponent().sharedMaterial.SetVector("_Point", other.transform.position);}}}

然后我們只需要移動另一個對象(Sphere)就可以看到(Cube)顏色的變化,當小球離原點近時,如圖:

當小球離原點遠時,如圖:

責任編輯:

標簽:

相關推薦:

精彩放送:

新聞聚焦
Top 欧美网址在线观看-亚洲最新毛片-国产成人免费爽爽爽视频-亚洲一区在线影院-日韩欧美在线观看视频网站-男女激情四射-成人一区二区免费看-欧美亚洲综合在线-日韩一级视频在线播放-国产成人三级视频在线播放-亚洲中文字幕日产无码2020-99久久久国产精品免费无卡顿-av在线观看地址-果冻传媒mv免费播放在线观看-欧美在线观看视频免费-日韩天天操

        男人操女人免费软件| 777久久精品一区二区三区无码 | 粉嫩av一区二区三区天美传媒| 欧美wwwwwww| 午夜免费一级片| wwwwww欧美| 毛片av免费在线观看| 欧美三级理论片| 最新视频 - x88av| 九九久久九九久久| 日日碰狠狠添天天爽超碰97| 日韩精品一区二区三区久久| 黄色aaa级片| 国产精品第157页| 久久久久狠狠高潮亚洲精品| 国产精品久久久久久久av福利| 狠狠干视频网站| 日日碰狠狠丁香久燥| 亚洲高清av一区二区三区| 久久国产精品网| 亚洲成人福利在线观看| 四虎永久免费网站| 青青视频在线播放| 中国老女人av| 国产又大又黄又猛| av之家在线观看| 国产成人精品免费看在线播放| 久久国产精品视频在线观看| 日本三级免费网站| 日本福利视频在线观看| 欧美日韩亚洲自拍| 国产极品粉嫩福利姬萌白酱| 亚洲天堂av一区二区三区| 91av资源网| 屁屁影院ccyy国产第一页| 日本激情视频在线| 免费看日本毛片| 免费在线观看污污视频| 亚洲污视频在线观看| 欧美在线观看黄| 国产免费色视频| 国产欧美激情视频| 少妇一级淫免费放| 亚洲爆乳无码专区| 日韩精品 欧美| 特级西西444| 久久精品一二三四| 蜜桃福利午夜精品一区| 91大学生片黄在线观看| 国产乱子夫妻xx黑人xyx真爽| av免费在线播放网站| 亚洲第一成肉网| 久久人人爽人人爽人人av| 牛夜精品久久久久久久| 日本中文字幕在线视频观看| 波多野结衣在线免费观看| www.久久av.com| 国产成人a亚洲精v品无码| 麻豆md0077饥渴少妇| 99爱视频在线| 粉嫩av一区二区三区天美传媒 | 久久久999视频| 男操女免费网站| 日本xxxx黄色| 蜜臀av性久久久久蜜臀av| 国产在线精品91| 欧美二区在线视频| 一本二本三本亚洲码| 韩国日本在线视频| 欧美爱爱视频免费看| 成年在线观看视频| 国产美女无遮挡网站| 亚洲va在线va天堂va偷拍| 国产夫妻自拍一区| 欧美精品一区免费| 亚洲免费视频播放| 国产aaa免费视频| 久久综合久久网| 黄色网在线视频| 亚洲欧美手机在线| 在线不卡一区二区三区| 国产女大学生av| www.xxx麻豆| 欧美又粗又长又爽做受| aaaaaa亚洲| 亚洲人精品午夜射精日韩| 日本a在线天堂| 日本免费在线视频观看| 成年丰满熟妇午夜免费视频 | 男女猛烈激情xx00免费视频| 日韩高清在线一区二区| 成人精品视频在线播放| 亚洲无吗一区二区三区| 亚洲熟女乱色一区二区三区| 污污的网站免费| 黄页免费在线观看视频| 91看片在线免费观看| 国模吧无码一区二区三区 | 日韩xxxx视频| 狠狠噜天天噜日日噜| 成年网站在线免费观看| 成年丰满熟妇午夜免费视频| 国产麻豆电影在线观看| 佐佐木明希av| 欧美日韩一区二区在线免费观看| 成人午夜视频免费在线观看| 人人干人人干人人| 日韩av在线播放不卡| 色片在线免费观看| 国产网站免费在线观看| 国产对白在线播放| 日日噜噜夜夜狠狠| 青青草原av在线播放| 大地资源网在线观看免费官网| 无码人妻h动漫| 日韩在线视频在线| 小说区视频区图片区| 美女在线视频一区二区| 美女av免费在线观看| 久久99久久99精品| www.偷拍.com| 女人高潮一级片| 国产免费又粗又猛又爽| 久草资源站在线观看| 日韩中文字幕在线免费| 777久久精品一区二区三区无码| 亚洲va综合va国产va中文| 国产一区二区视频免费在线观看| 久草视频这里只有精品| 久久久无码中文字幕久...| 青青草原国产免费| gogogo免费高清日本写真| 午夜视频在线网站| 亚洲第一色av| 国产不卡的av| 青青草原国产免费| 色哺乳xxxxhd奶水米仓惠香| 久久久久久久久影视| 国产盗摄视频在线观看| 亚洲av综合色区| 永久免费在线看片视频| 日本免费成人网| 97碰在线视频| 青青青在线视频播放| 无码aⅴ精品一区二区三区浪潮| 精品一区二区中文字幕| av丝袜天堂网| 日本高清免费在线视频| 在线观看17c| 男人日女人下面视频| 国产无套粉嫩白浆内谢的出处| 日本www.色| 99热都是精品| 亚洲精品蜜桃久久久久久| 久草青青在线观看| 999精品视频在线| 中文字幕综合在线观看| 又大又硬又爽免费视频| 日本黄网站免费| 91 视频免费观看| 久久成人福利视频| 一区二区在线播放视频| 五月天六月丁香| 国产精品裸体瑜伽视频| 成人性生生活性生交12| 色综合五月婷婷| 女人色极品影院| 亚洲国产精品毛片av不卡在线| 911福利视频| 国产男女免费视频| 在线观看av网页| 欧美狂野激情性xxxx在线观| 怡红院av亚洲一区二区三区h| www.99av.com| 无码人妻精品一区二区蜜桃网站| 看欧美ab黄色大片视频免费| 9色视频在线观看| 天天操天天爱天天爽| 国产一区 在线播放| 欧美成人三级在线播放| 国产成人永久免费视频| 国产高潮免费视频| 日本一本中文字幕| 奇米视频888| 日本精品一区二区三区四区| 日本三级福利片| 992kp快乐看片永久免费网址| 丰满人妻一区二区三区53号| 91小视频网站| 男人操女人免费软件| 法国空姐在线观看免费| 亚洲娇小娇小娇小| 黄色片视频在线免费观看| 加勒比海盗1在线观看免费国语版| 激情网站五月天| 欧美日韩福利在线| xxxxxx在线观看| 亚洲欧美日韩不卡| www.久久久精品| 欧美 日韩 国产一区|