基本光照模型实现-高光反射
来源:互联网 发布:uva 编程 编辑:程序博客网 时间:2024/04/30 14:09
高光反射计算公式
Phong模型
Blinn-Phong模型
源码-逐顶点
Shader "Custom/SpecularVertexLevel" { Properties { _Diffuse ("Diffuse", Color) = (1, 1, 1, 1) _Specular ("Specular", Color) = (1, 1, 1, 1) _Gloss ("Gloss", Range(8.0, 256)) = 20 } SubShader { Pass { Tags { "LightMode"="ForwardBase" } CGPROGRAM #pragma vertex vert #pragma fragment frag #include "Lighting.cginc" fixed4 _Diffuse; fixed4 _Specular; float _Gloss; struct a2v{ float4 vertex : POSITION; float3 normal : NORMAL; }; struct v2f{ float4 pos : SV_POSITION; float3 color : COLOR; }; v2f vert(a2v v){ v2f o; o.pos = UnityObjectToClipPos(v.vertex); fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz; fixed3 worldNormal = normalize(mul(v.normal, (float3x3)unity_WorldToObject)); fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz); fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * saturate(dot(worldNormal, worldLightDir)); fixed3 reflectDir = normalize(reflect(-worldLightDir, worldNormal)); fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, v.vertex).xyz); fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(saturate(dot(reflectDir, viewDir)), _Gloss); o.color = ambient + diffuse + specular; return o; } fixed4 frag(v2f i): SV_Target{ return fixed4(i.color, 1.0); } ENDCG } } FallBack "Speculr"}
源码-逐像素
Shader "Custom/SpecularPixelLevel" { Properties { _Diffuse ("Diffuse", Color) = (1, 1, 1, 1) _Specular ("Specular", Color) = (1, 1, 1, 1) _Gloss ("Gloss", Range(8.0, 256)) = 20 } SubShader { Pass { Tags { "LightMode"="ForwardBase" } CGPROGRAM #pragma vertex vert #pragma fragment frag #include "Lighting.cginc" fixed4 _Diffuse; fixed4 _Specular; float _Gloss; struct a2v{ float4 vertex : POSITION; float3 normal : NORMAL; }; struct v2f{ float4 pos : SV_POSITION; float3 worldNormal : TEXCOORD0; float3 worldPos : TEXCOORD1; }; v2f vert(a2v v){ v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.worldNormal = mul(v.normal, (float3x3)unity_WorldToObject); o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; return o; } fixed4 frag(v2f i): SV_Target{ fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz; fixed3 worldNormal = normalize(i.worldNormal); fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz); fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * saturate(dot(worldNormal, worldLightDir)); fixed3 reflectDir = normalize(reflect(-worldLightDir, worldNormal)); fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - i.worldPos.xyz); fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(saturate(dot(reflectDir, viewDir)), _Gloss); return fixed4(ambient + diffuse + specular, 1.0); } ENDCG } } FallBack "Speculr"}
Blin-Phong逐像素
Shader "Custom/BlinnPhong" { Properties { _Diffuse ("Diffuse", Color) = (1, 1, 1, 1) _Specular ("Specular", Color) = (1, 1, 1, 1) _Gloss ("Gloss", Range(8.0, 256)) = 20 } SubShader { Pass { Tags { "LightMode"="ForwardBase" } CGPROGRAM #pragma vertex vert #pragma fragment frag #include "Lighting.cginc" fixed4 _Diffuse; fixed4 _Specular; float _Gloss; struct a2v{ float4 vertex : POSITION; float3 normal : NORMAL; }; struct v2f{ float4 pos : SV_POSITION; float3 worldNormal : TEXCOORD0; float3 worldPos : TEXCOORD1; }; v2f vert(a2v v){ v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.worldNormal = mul(v.normal, (float3x3)unity_WorldToObject); o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; return o; } fixed4 frag(v2f i): SV_Target{ fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz; fixed3 worldNormal = normalize(i.worldNormal); fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz); fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * saturate(dot(worldNormal, worldLightDir)); //fixed3 reflectDir = normalize(reflect(-worldLightDir, worldNormal)); fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - i.worldPos.xyz); fixed3 halfDir = normalize(worldLightDir + viewDir); fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(saturate(dot(worldNormal, halfDir)), _Gloss); return fixed4(ambient + diffuse + specular, 1.0); } ENDCG } } FallBack "Speculr"}
效果图
阅读全文
0 0
- 基本光照模型实现-高光反射
- unity shader (6)--实现高光反射光照模型
- unity shader (7)--实现高光反射光照模型--逐像素光照
- UnityShader初级篇——实现逐顶点高光反射光照模型
- UnityShader初级篇——实现逐像素高光反射光照模型
- 《unityshader 入门精要》漫反射光照与高光反射光照模型学习笔记
- 高光反射-逐顶点光照
- Shader自学笔记 2.2.1 逐顶点高光反射光照模型
- Shader自学笔记 2.2.2 逐像素高光反射光照模型
- unity shader中高光反射光照模型之顶点光照
- 光模拟基础(1) 基本光照模型
- 光模拟基础(1) 基本光照模型
- 高光和金属反射光照模型
- 高光反射-逐像素光照(Blinn-Phong)
- 基本光照模型实现-漫反射
- 4.Unity_Shader_CG 高光反射模型
- 【DirectX11】第九篇 光照模型——高光
- Unity Shader入门精要笔记(十):Unity 的基础光照——高光反射的实现
- 从自动驾驶等级说开,看看自动驾驶和辅助驾驶究竟有何区别
- 今天全中国人都在买它:vivo X7火爆上市每秒售出16.7台!
- 基于rsync+sersync数据实时双向同步的设计(一)
- git概念和原理
- 大番薯H5十三水棋牌源码下载
- 基本光照模型实现-高光反射
- MapReduce之全流程讲解
- [NetWrap]Semantic Video CNNs through Representation Warping
- leetcode 23. Merge k Sorted Lists (分治法)
- 【Android】Fragment懒加载和ViewPager的坑
- 关于特斯拉命案,外国人这样说
- 继攻克围棋后,Deepmind想“看透”人类的眼睛
- java线程池
- 窗口、文档、视图、元素各种宽高