1. the fresnel effect
參考:
實用的shader:
shader "heroshader/character" // a通道標記陣營區域, 1 表示有陣營顏色區域,0 表示非陣營顏色區域
// _emission("emission", range(0, 1)) = 0 // 自發光
_shadowlevel("shadow level", range(0, 10)) = 2.5 // 模擬ao
_rimrange("rim range", range(0, 1)) = 0 // rim範圍
_rimcolor ("rim color", color) = (1, 1, 1, 1) // rim相關
_flagcolor("flag color, intensity", color) = (0.5,0.5,0.5, 0) // 陣營資訊,a通道控制陣營顏色強度
} subshader
cgprogram
#pragma su***ce surf character nolightmap nodirlightmap
sampler2d _maintex;
half4 _tint;
half4 _rimcolor;
half4 _flagcolor;
half _rimrange;
// half _emission;
half _shadowlevel;
struct input ;
// 漫反射 + shadowlevel(模擬ao)+ 自發光
void surf (input in, inout su***ceoutput o)
// 參考dota2 shader的實現方案
half4 lightingcharacter (su***ceoutput s, half3 lightdir, half3 viewdir, half atten)
endcg
} fallback "diffuse"
}
shader "heroshader/character_nolight" // a通道標記陣營區域
_emission("emission", range(0, 1)) = 0 // 自發光
_shadowlevel("shadow level", range(0, 10)) = 0 // 模擬ao
_flagcolor("flag color, intensity", color) = (0.5,0.5,0.5,1) // 陣營資訊
} cginclude
#include "unitycg.cginc"
sampler2d _maintex;
float4 _maintex_st;
half4 _tint;
half4 _flagcolor;
half _emission;
half _shadowlevel;
float4 vertex : position;
float2 uv : texcoord0;
}; struct v2f ;
v2f o;
o.vertex = unityobjecttoclippos(v.vertex);
o.uv = transform_tex(v.uv, _maintex);
o.worldpos = mul(unity_objecttoworld, v.vertex).xyz;
return o;
} // 陣營資訊 + shadowlevel(模擬ao)+ 自發光
float4 frag (v2f i) : sv_target
endcg
subshader
pass
} fallback "diffuse"
}
shader程式設計
2010 03 13 16 56 來自 組長 獨孤殘雲 至此shader的基本實現方法已經告一段落了,想進一步學習,強烈推薦nvidia 把http developer.download.nvidia.com shaderlibrary webpages shader library.html上的s...
Shader其他整理
1 culling陰影面剔除 culling陰影面剔除是一種優化技術。所有的多邊形都有正反兩面,而你永遠只能看見其中一面,不信的話拿張紙板或者一面鏡子看看你能不能同時看到兩面。通常多邊形面向螢幕裡面的背面,我們看不見,所以會將該面剔除。cull off 關閉陰影面剔除 cull back 剔除背面 ...
shader內建函式
一般預設都用弧度 radians degree 角度變弧度 degrees radian 弧度變角度 sin angle cos angle tan angle asin x arc sine,返回弧度 pi 2,pi 2 acos x arc cosine,返回弧度 0,pi atan y,x a...