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

shader學(xué)習(xí)(二)頂點(diǎn)著色器

這篇具有很好參考價(jià)值的文章主要介紹了shader學(xué)習(xí)(二)頂點(diǎn)著色器。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1、C#腳本設(shè)置shader參數(shù)

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

public class class33 : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        Matrix4x4 SM = new Matrix4x4();//縮放矩陣 隨時(shí)間動(dòng)態(tài)變換
        SM[0, 0] = Mathf.Sin(Time.realtimeSinceStartup)/4+0.5f;
        SM[1, 1] = Mathf.Cos(Time.realtimeSinceStartup)/8+0.5f;
        SM[2, 2] = Mathf.Sin(Time.realtimeSinceStartup)/6+0.5f;
        SM[3, 3] = 1;
        Matrix4x4 mvp = Camera.main.projectionMatrix * Camera.main.worldToCameraMatrix * transform.localToWorldMatrix;
        GetComponent<Renderer>().material.SetMatrix("sm", SM);
    }
}

2、在shader里做變換和顏色顯示

Shader "Custom/shader33.1"
{
    SubShader
    {
        pass {
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        #include "unitycg.cginc"
         float4x4 mvp; 
        float4x4 rm;
        float4x4 sm;
        struct v2f
        {
           float4 pos:POSITION;
           fixed4 color : COLOR;
        };
        v2f vert(appdata_base v) {
            v2f o;
            // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
            float4 m = UnityObjectToClipPos(v.vertex);//頂點(diǎn)MVP變換
            o.pos = mul(m, sm);//控制縮放
            //1、控制頂點(diǎn)顏色
            if (v.vertex.x == 0.5 && v.vertex.y == 0.5 && v.vertex.z == -0.5)
                o.color = fixed4(1, 0, 0, 1);
            else
                o.color = fixed4(0, 0, 1, 1);
            // Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
            float4 wpos = mul(unity_ObjectToWorld, v.vertex);//轉(zhuǎn)換模型坐標(biāo)系到世界坐標(biāo)系
			//2、改變物體位置時(shí)會(huì)改變顏色
            if (wpos.x > 0)
                o.color = fixed4(1, 0, 0, 1);
            else
                o.color = fixed4(0, 0, 1, 1);   
           //3、顏色周期變換
           if (v.vertex.x == 0.5 && v.vertex.y == 0.5 && v.vertex.z == -0.5)
				o.color = fixed4(_SinTime.w/2+0.5,_CosTime.w/2+0.5, _SinTime.y/2+0.5, 1);
		   else
			    o.color = fixed4(0, 0, 1, 1);
            return o;    
            
        }
        fixed4 frag(v2f IN) :COLOR{
            return IN.color;
        }


        ENDCG
            }
    }
}

3、改變頂點(diǎn)的位置信息

Shader "Custom/shader35"
{
	properties{
		_R("R",range(0,5))=1
	}
	SubShader
	{
		pass {
		CGPROGRAM
		#pragma vertex vert
		#pragma fragment frag
		#include "unitycg.cginc"
		float _R;
		struct v2f
		{
		   float4 pos:POSITION;
		   fixed4 color : COLOR;
		};
		v2f vert(appdata_base v) {
			v2f o;
			//float2 xy = v.vertex.xz;
			//float d =_R-length(xy);//計(jì)算模
			float4 wpos = mul(unity_ObjectToWorld, v.vertex);//轉(zhuǎn)換到世界坐標(biāo)系
			float2 xy = wpos.xz;
			float d = _R - length(xy);
			d= d < 0 ? 0 : d;
			float height = 1;
			float4 uppos = float4(v.vertex.x, height * d, v.vertex.z, v.vertex.w);
			o.pos = UnityObjectToClipPos(uppos);//透視
			o.color = fixed4(uppos.y,uppos.y,uppos.y,1);
			return o;
		}
		fixed4 frag(v2f IN) :COLOR{
			return IN.color;
		}
		ENDCG
		}
	}
}

4.頂點(diǎn)扭曲(做周期旋轉(zhuǎn))

Shader "Custom/shader36"
{

	SubShader
	{
		pass {
		CGPROGRAM
		#pragma vertex vert
		#pragma fragment frag
		#include "unitycg.cginc"
	
		struct v2f
		{
		   float4 pos:POSITION;
		   fixed4 color : COLOR;
		};
		v2f vert(appdata_base v) {
			v2f o;
			float angle = length(v.vertex)*_SinTime.w;
		/*	float4x4  m = {
			float4(cos(angle),0,sin(angle),0),
			float4(0,1,0,0),
			float4(-sin(angle),0,cos(angle),0),
			float4(0,0,0,1)
			};*/
			float x = v.vertex.x * cos(angle) + v.vertex.z* sin(angle);
			float z = v.vertex.x * -sin(angle) + v.vertex.z * cos(angle);
			v.vertex.x = x;
			v.vertex.z = z;
			//float4 rm= mul(m,v.vertex);
			//o.pos = UnityObjectToClipPos(rm);
			o.pos = UnityObjectToClipPos(v.vertex);
			o.color = fixed4(0,1,1,1);
			return o;
		}
		fixed4 frag(v2f IN) :COLOR{
			return IN.color;
		}
		ENDCG
		}
	}
}

5、實(shí)現(xiàn)波浪效果

Shader "Custom/shaderwave"
{

	SubShader
	{
		pass {
		CGPROGRAM
		#pragma vertex vert
		#pragma fragment frag
		#include "unitycg.cginc"
	
		struct v2f
		{
		   float4 pos:POSITION;
		   fixed4 color : COLOR;
		};
		v2f vert(appdata_base v) {
			v2f o;
			//A*SIN(W*X+T)簡(jiǎn)諧運(yùn)動(dòng)公式
			//F=1/W
			//v.vertex.y += 0.2*sin(v.vertex.x*2 + _Time.y);//橫波
			//v.vertex.y += 0.2 * sin(-length(v.vertex.xz) * 2 + _Time.y);//圓形波向外擴(kuò)散
			v.vertex.y += 0.2 * sin((v.vertex.x+v.vertex.z)+ _Time.y);//魚鱗波
			v.vertex.y += 0.3 * sin((v.vertex.x - v.vertex.z) + _Time.w);//魚鱗波疊加
			o.pos = UnityObjectToClipPos(v.vertex);
			o.color = fixed4(v.vertex.y,v.vertex.y,v.vertex.y,1);
			return o;
		}
		fixed4 frag(v2f IN) :COLOR{
			return IN.color;
		}
		ENDCG
		}
	}
}

6、實(shí)現(xiàn)漫反射和點(diǎn)光源照射

// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'

// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'

Shader "Custom/diffuse2"
{

	SubShader
	{
		pass {
		tags{"LightMode" = "ForwardBase"}//光照模型
		CGPROGRAM
		#pragma vertex vert
		#pragma fragment frag
		#include "unitycg.cginc"
		#include "lighting.cginc"

		struct v2f
		{
		   float4 pos:POSITION;
		   fixed4 color : COLOR;
		};
		v2f vert(appdata_base v) {
			v2f o;
			o.pos = UnityObjectToClipPos(v.vertex);
			//o.color = fixed4(0,0,1,1);
			float3 N = normalize(v.normal);//法線歸一化
			float3 L = _WorldSpaceLightPos0;//光源位置
			//以下兩種方法選1即可
			//L = mul(unity_WorldToObject, float4(L, 0)).xyz;//轉(zhuǎn)換光源到模型坐標(biāo)系
			//N = mul(unity_ObjectToWorld, float4(N, 0)).xyz;//轉(zhuǎn)換頂點(diǎn)法線到世界坐標(biāo)系
			/*非等比縮放情況下法向量的世界坐標(biāo)會(huì)有誤
			需要修改
			*/
			N = mul( float4(N, 0), unity_WorldToObject).xyz;//轉(zhuǎn)換頂點(diǎn)法線到世界坐標(biāo)系
		    N = normalize(N);
			float dot1 = saturate(dot(N, L));//控制點(diǎn)積在0-1
			//1、設(shè)置平行光
			o.color = _LightColor0 * dot1;
			//o.color.rgb = ShadeVertexLights(v.vertex, v.normal); //光照模型為Vertex
			float3 wpos = mul(unity_ObjectToWorld, v.vertex).xyz;
			//2、設(shè)置點(diǎn)光源
			o.color.rgb = o.color.rgb+ Shade4PointLights(unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0,
				unity_LightColor[0].rgb, unity_LightColor[1].rgb, unity_LightColor[2].rgb, unity_LightColor[3].rgb,
				unity_4LightAtten0, wpos, N);
			return o;
		}
		fixed4 frag(v2f IN) :COLOR{
			//加入環(huán)境光
			return IN.color+UNITY_LIGHTMODEL_AMBIENT;

		}
		ENDCG
		}
	}
}


效果圖:
shader學(xué)習(xí)(二)頂點(diǎn)著色器,學(xué)習(xí),著色器
7、實(shí)現(xiàn)鏡面反射

// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'

Shader "Custom/specular"
{
	properties{
		_sp("Specular",color) = (1,1,1,1)
		_shiness("Shiness",range(1,64)) = 8
	}

	SubShader
	{
		pass {
		tags{"LightMode" = "ForwardBase"}//光照模型
		CGPROGRAM
		#pragma vertex vert
		#pragma fragment frag
		#include "unitycg.cginc"
		#include "lighting.cginc"
		float4 _sp;
		fixed _shiness;
		struct v2f
		{
		   float4 pos:POSITION;
		   fixed4 color : COLOR;
		};
		v2f vert(appdata_base v) {
			v2f o;
			o.pos = UnityObjectToClipPos(v.vertex);
			//o.color = fixed4(0,0,1,1);
			float3 N = normalize(v.normal);//法線歸一化
			float3 L = _WorldSpaceLightPos0;//光源位置
			//以下兩種方法選1即可
			//L = mul(unity_WorldToObject, float4(L, 0)).xyz;//轉(zhuǎn)換光源到模型坐標(biāo)系
			//N = mul(unity_ObjectToWorld, float4(N, 0)).xyz;//轉(zhuǎn)換頂點(diǎn)法線到世界坐標(biāo)系
			/*非等比縮放情況下法向量的世界坐標(biāo)會(huì)有誤
			需要修改
			*/
			N = mul( float4(N, 0), unity_WorldToObject).xyz;//轉(zhuǎn)換頂點(diǎn)法線到世界坐標(biāo)系
		    N = normalize(N);

			//diffuse color
			float dot1 = saturate(dot(N, L));//控制點(diǎn)積在0-1
			o.color = _LightColor0 * dot1;
			//o.color.rgb = ShadeVertexLights(v.vertex, v.normal); //Vertex

			//specular color
			float3 wpos = mul(unity_ObjectToWorld, v.vertex).xyz;
			float3 I = -WorldSpaceLightDir(v.vertex);
			float3 R = reflect(I, N);
			float3 V = WorldSpaceViewDir(v.vertex);//頂點(diǎn)到相機(jī)的向量
			R = normalize(R);
			V = normalize(V);
			float specularscale = pow(saturate(dot(R, V)), _shiness);
			o.color.rgb += _sp * specularscale;
			//float3 I = wpos - _WorldSpaceLightPos0;

			return o;
		}
		fixed4 frag(v2f IN) :COLOR{
			//加入環(huán)境光
			return IN.color+UNITY_LIGHTMODEL_AMBIENT;

		}
		ENDCG
		}
	}
}

shader學(xué)習(xí)(二)頂點(diǎn)著色器,學(xué)習(xí),著色器文章來源地址http://www.zghlxwxcb.cn/news/detail-637045.html

到了這里,關(guān)于shader學(xué)習(xí)(二)頂點(diǎn)著色器的文章就介紹完了。如果您還想了解更多內(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)文章

  • OpenGL ES 2.0 for Android教程(二):定義頂點(diǎn)和著色器

    OpenGL ES 2.0 for Android教程(二):定義頂點(diǎn)和著色器

    文章傳送門 OpenGL ES 2.0 for Android教程(一) OpenGL ES 2.0 for Android教程(三) OpenGL ES 2.0 for Android教程(四) OpenGL ES 2.0 for Android教程(五) OpenGL ES 2.0 for Android教程(六) OpenGL ES 2.0 for Android教程(七) OpenGL ES 2.0 for Android教程(八) OpenGL ES 2.0 for Android教程(九) 本章介紹我們

    2023年04月14日
    瀏覽(17)
  • Unity(三) Shader著色器初探

    Unity(三) Shader著色器初探

    學(xué)習(xí)3D開發(fā)技術(shù)的時(shí)候無可避免的要接觸到Shader,那么Shader是個(gè)什么概念呢?其實(shí)對(duì)于開發(fā)同事來說還是比較難理解的,一般來說Shader是服務(wù)于圖形渲染的一類技術(shù),開發(fā)人員可以通過其shader語言來自定義顯卡渲染頁面的算法,從而達(dá)到按照自己的想法來渲染出目標(biāo)效果。 不

    2024年02月07日
    瀏覽(18)
  • WebGL Shader著色器GLSL語言

    WebGL Shader著色器GLSL語言

    在2D繪圖中的坐標(biāo)系統(tǒng),默認(rèn)情況下是與窗口坐標(biāo)系統(tǒng)相同,它以canvas的左上角為坐標(biāo)原點(diǎn),沿X軸向右為正值,沿Y軸向下為正值。其中canvas坐標(biāo)的單位都是’px’。 WebGL使用的是正交右手坐標(biāo)系,且每個(gè)方向都有可使用的值的區(qū)間,超出該矩形區(qū)間的圖像不會(huì)繪制: X軸最左

    2024年02月14日
    瀏覽(19)
  • [ue4] 著色器綁定(Shader Binding)

    ? ? ? ? 當(dāng)我們?cè)趗e4中制作了一個(gè)美術(shù)材質(zhì)之后,引擎本身會(huì)為我們做很多事情,它會(huì)把結(jié)點(diǎn)翻譯為hlsl,生成多個(gè)shader變體,并在多個(gè)mesh pass中去選擇性的調(diào)用所需的shader,其中一個(gè)重要的過程就是獲取shader綁定的數(shù)據(jù)。 ? ? ? ? 本文將主要討論ue4是如何處理來自材質(zhì)的不

    2024年02月10日
    瀏覽(34)
  • 【unity shader】水體渲染基礎(chǔ)-通過頂點(diǎn)偏移實(shí)現(xiàn)波浪

    【unity shader】水體渲染基礎(chǔ)-通過頂點(diǎn)偏移實(shí)現(xiàn)波浪

    為了表示寬廣水域中的水體變化,往往需要進(jìn)行水平面的整體運(yùn)動(dòng)變化。即對(duì)平面的頂點(diǎn)進(jìn)行位移,以實(shí)現(xiàn)波浪的起伏效果?,F(xiàn)在對(duì)于波浪的構(gòu)成,如快速傅里葉變換和波浪的統(tǒng)計(jì)學(xué)理論,在游戲中的應(yīng)用也相對(duì)完善。今天主要是做一個(gè)基礎(chǔ)的波浪實(shí)現(xiàn):正弦波形。 1.1. 基礎(chǔ)

    2024年02月03日
    瀏覽(26)
  • Unity | Shader(著色器)和material(材質(zhì))的關(guān)系

    Unity | Shader(著色器)和material(材質(zhì))的關(guān)系

    一、前言 在上一篇文章中 【精選】Unity | Shader基礎(chǔ)知識(shí)(什么是shader)_unity shader_菌菌巧樂茲的博客-CSDN博客 我們講了什么是shader,今天我們講一下shder和material的關(guān)系 二、在unity中shader的本質(zhì) unity中,shader就是一串代碼,如下圖shader(就是一個(gè)平平無奇的shader) 但是,這個(gè)sh

    2024年02月02日
    瀏覽(22)
  • Vulkan教程(13): Graphics pipeline Shader modules(著色器模塊)

    Vulkan教程(13): Graphics pipeline Shader modules(著色器模塊)

    Vulkan官方英文原文:Shader modules - Vulkan Tutorial 對(duì)應(yīng)的Vulkan技術(shù)規(guī)格說明書版本: Vulkan 1.3.2 Unlike earlier APIs, shader code in Vulkan has to be specified in a bytecode format as opposed to human-readable syntax like GLSL and HLSL. This bytecode format is called SPIR-V and is designed to be used with both Vulkan and OpenCL (both Kh

    2024年02月06日
    瀏覽(41)
  • Unity記錄一些glsl和hlsl的著色器Shader逆向代碼

    以下內(nèi)容一般基于 GLSL 300 之后 以下某些代碼行,是“偽代碼“,絕大部分是renderDoc 逆向產(chǎn)生標(biāo)準(zhǔn)代碼 本人OpenlGL零基礎(chǔ),也不打算重頭學(xué) 目錄 Clip() 剔除函數(shù) discard; FS最終顏色輸出 out 和最終顏色相加方程 從 discard; 命令可得知,一般通過透明度剔除, _26 == color.a _21.w 剛

    2024年02月07日
    瀏覽(50)
  • 【Godot4自學(xué)手冊(cè)】第三十九節(jié)利用shader(著色器)給游戲添加一層霧氣效果

    【Godot4自學(xué)手冊(cè)】第三十九節(jié)利用shader(著色器)給游戲添加一層霧氣效果

    今天,主要是利用shader給游戲給地宮場(chǎng)景添加一層霧氣效果,增加一下氣氛,先看一下效果: 一、新建ParallaxBackground根節(jié)點(diǎn) 新建場(chǎng)景,根節(jié)點(diǎn)選擇ParallaxBackground,命名為Fog,然后將該場(chǎng)景保存到Component文件夾下。ParallaxBackground 使用一個(gè)或多個(gè) ParallaxLayer 子節(jié)點(diǎn)來創(chuàng)建視差效

    2024年04月27日
    瀏覽(28)
  • 讓AI臣服,而不是被它替代!讓ChatGPT為我們編寫Unity3d Shaderlab的著色器(shader)

    讓AI臣服,而不是被它替代!讓ChatGPT為我們編寫Unity3d Shaderlab的著色器(shader)

    ChatGPT的火熱大家應(yīng)該都有目共睹,文案工作者、翻譯工作者和畫師等各種行業(yè)都在被嘲即將失業(yè)。不光是這些崗位的員工,作為資深社畜程序猿也能感受到會(huì)受到?jīng)_擊。網(wǎng)上很多人都在發(fā)ChatGPT寫的代碼,并開始大肆宣揚(yáng)AI要取代程序員了,今天測(cè)一測(cè)使用ChatGPT來生成一些代碼,

    2023年04月23日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包