unity中頂點片段shader環境反射

2021-07-12 00:51:00 字數 2690 閱讀 1521

最近具體聯絡了一下裡面shader的基本寫法,弄來個綜合版本

然後就是最難看出差異的反射計算問題,頂點裡面計算和片段裡面計算的區別

使用的模型是這個,其中右邊的是平滑法線後的模型

具體的差異可以看下面gif圖 (可以看出)

下面是**

//

shader "unlit/shenmifangkeshader"

// normal map texture on the material

// default to dummy "flat su***ce" normalmap

_tiling("tiling", float) = 1.0//case 8

_bumpmap("normal map", 2d) = "bump" {}

_occlusionmap("occlusion", 2d) = "white" {}

} subshader

lod 100

pass

cgprogram

#pragma vertex vert

#pragma fragment frag

// make fog work

#pragma multi_compile_fog

// include file that contains unityobjecttoworldnormal helper function

#include "unitycg.cginc"

#include "unitylightingcommon.cginc" // for _lightcolor0

//接受影子必須有這個

// compile shader into multiple variants, with and without shadows

// (we don't care about any lightmaps yet, so skip these variants)

#pragma multi_compile_fwdbase nolightmap nodirlightmap nodynlightmap novertexlight

// shadow helper functions and macros

#include "autolight.cginc"

float _mode;

sampler2d _maintex;

float4 _maintex_st;//這裡下面一張圖也使用maintex的uv 所以就不用再次宣告了

sampler2d _occlusionmap;

float _tiling;//case 8

//頂點輸入結構

; //頂點輸出到片段函式 vertex shader outputs ("vertex to fragment")

struct v2f

; // vertex shader now also needs a per-vertex tangent vector.

// in unity tangents are 4d vectors, with the .w component used to

// indicate direction of the bitangent vector.

// we also need the texture coordinate.

// vertex shader: takes object space normal as input too 本來只有

v2f vert(

float3 normal : normal, //case 3,4,5

float4 tangent : tangent, //case 5

float2 uv : texcoord0,//normal need//case 5

) return o;

} // normal map texture from shader properties

sampler2d _bumpmap;

fixed4 frag(v2f i) : sv_target

return c;

} endcg

} /*

//投影必須

// shadow caster rendering pass, implemented manually

// using macros from unitycg.cginc

pass

cgprogram

#pragma vertex vert

#pragma fragment frag

#pragma multi_compile_shadowcaster

#include "unitycg.cginc"

struct v2f ;

float4 frag(v2f i) : sv_target

endcg

} */

// shadow casting support 相當於上面一段的無設定寫法

usepass "legacy shaders/vertexlit/shadowcaster"

}}

C for Graphic 頂點片段變色

今天中午深圳老同事問我怎麼搞模型逐漸變色,他們策劃需要模型有個變色的過程,他自己就只在c 中做color.lerp,達不到要求,週六被拉著加班。我也正好在家裡做自己的小遊戲,所以幫他寫了兩個,原理無非是頂點或者片段依次變色就好了。想著這需求還挺常見的,就水一篇部落格。如果我們使用的頂點著色,也就是頂...

Unity3d 頂點和片段著色器學習筆記

一 cg頂點程式必須在結構中傳遞頂點資料。幾種常用的頂點結構定義在檔案unitycg.cginc中。在大部分情況下僅僅使用它們就夠了。結構如下 二 如果你想訪問個別的頂點資料,你必須自己宣告頂點結構。結構中的成員必須是屬於以下列表中的 1 float4 vertex 頂點位置 2 float3 no...

Unity3d 頂點和片段著色器學習筆記

一 cg頂點程式必須在結構中傳遞頂點資料。幾種常用的頂點結構定義在檔案unitycg.cginc中。在大部分情況下僅僅使用它們就夠了。結構如下 二 如果你想訪問個別的頂點資料,你必須自己宣告頂點結構。結構中的成員必須是屬於以下列表中的 1 float4 vertex 頂點位置 2 float3 no...