日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【原】unity shader(3)反射贴图

發布時間:2023/12/9 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【原】unity shader(3)反射贴图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

改編自《cg教程--可編程實時圖形學權威指南》上的demo。

反射向量計算公式 R=I-2N(N*I) 備注N*I是點乘 ? I入射光線,N法向量

函數實現:

float3 reflect(float3 I,float3 N)

{

? return I-2.0*N*dot(N,I);

}

Shader "CG shader Reflect"{Properties {environmentMap("Environment Map", Cube) = "" {}reflectivity("reflectivity1", float) =1 //反射系數 影響反射強度decalMap("decalMap", 2D) = "white" {} }SubShader{Pass{CGPROGRAM#pragma vertex vert //頂點編程入口#pragma fragment frag //片段編程入口#include "UnityCG.cginc" //注意引入struct VertInput{float4 position:POSITION;float2 texCoordw:TEXCOORD0;float3 normal1:NORMAL;};struct VertOutput{float4 oPosition:SV_POSITION;float2 oTexCoord:TEXCOORD0;float3 R:TEXCOORD1;};// uniform 類型的參數 需要在Properties uniform samplerCUBE environmentMap;uniform float reflectivity;uniform sampler2D decalMap; VertOutput vert(VertInput input){VertOutput o;o.oPosition=mul(UNITY_MATRIX_MVP,input.position);//UNITY_MATRIX_MVP變量, 就是對應圖形中的模型視圖投影矩陣(ModelViewProj),unity中規定 必須這么寫o.oTexCoord=input.texCoordw;float3 positionW=mul(_Object2World,input.position).xyz;//_Object2World 模型矩陣,把本地坐標轉到世界坐標float3 N=mul((float3x3)_Object2World,input.normal1);N=normalize(N);float3 I=positionW-_WorldSpaceCameraPos;//計算入射光線,需要在世界坐標系中計算。_WorldSpaceCameraPos視點(相機)在世界坐標的位置o.R=reflect(I,N);//計算反射光線 reflect系統自帶函數return o;}float4 frag(VertOutput output):COLOR{float4 reflectionColor=texCUBE(environmentMap,output.R);float4 decalColor=tex2D(decalMap,output.oTexCoord);float4 color1=lerp(decalColor,reflectionColor,reflectivity);return color1;}ENDCG}} }

上例代碼出現的_Object2World,_WorldSpaceCameraPos 莫名奇妙的參數,來自UnityCG.cginc文件,在對cg、hlsl、glsl進行移植的時候,特殊參數需要參考UnityCG.cginc文件的定義。

實現效果:

初學階段,不妥之處望大家指教。

轉載于:https://www.cnblogs.com/U-tansuo/archive/2012/12/09/unity_reflect.html

總結

以上是生活随笔為你收集整理的【原】unity shader(3)反射贴图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。