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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

9.球体阴影

發(fā)布時(shí)間:2023/12/13 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 9.球体阴影 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上一篇講的陰影shader是通過(guò)兩個(gè)pass來(lái)渲染出的,第一個(gè)pass渲染要投影的物體本體,第二個(gè)pass渲染物體的陰影,也就是說(shuō)陰影的渲染是在物體的shader中而不是地面的shader。下面要講的球體陰影的shader是放在要接受陰影的地面上。

?原理如下圖:

1.根據(jù)點(diǎn)的入射光矢量和點(diǎn)到球體的矢量計(jì)算【點(diǎn)積】求出【角度】。

2.通過(guò)【角度】的sin值,求出【對(duì)邊】并與【球體半徑】進(jìn)行比較。

3.所求【對(duì)邊的長(zhǎng)度】大于【半徑】,說(shuō)明該點(diǎn)被光照,反之該點(diǎn)是陰影點(diǎn)。


// shader,放在需要接受陰影的對(duì)象上 Shader "Study/9_SphereShadow" {Properties{_spPos("Sphere pos", vector) = (0,0,0,1)_spR("radius", float) = 1_Intensity("Intensity", range(0,1)) = 0.5}SubShader{Pass{Tags{ "LightMode" = "ForwardBase" }CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc"float4 _spPos; // 球體位置float _spR; // 球體半徑float _Intensity; // 陰影濃度f(wàn)loat4 _LightColor0; // 顏色struct v2f {float4 pos:SV_POSITION;float3 litDir:TEXCOORD0;// 世界坐標(biāo)中燈光方向矢量float3 spDir:TEXCOORD1; // 在世界坐標(biāo)中投影球體方向矢量float4 vc:TEXCOORD2; // 逐頂點(diǎn)計(jì)算的光照};v2f vert(appdata_base v){v2f o;o.pos = mul(UNITY_MATRIX_MVP, v.vertex);// 獲取頂點(diǎn)視圖位置o.litDir = WorldSpaceLightDir(v.vertex);// 獲取世界坐標(biāo)中燈光對(duì)頂點(diǎn)的方向矢量o.spDir = (_spPos - mul(_Object2World, v.vertex)).xyz;//世界坐標(biāo)中該頂點(diǎn)到投影球體的矢量// 頂點(diǎn)的光照計(jì)算。該頂點(diǎn)在對(duì)象坐標(biāo)中的光照方向矢量float3 ldir = ObjSpaceLightDir(v.vertex);ldir = normalize(ldir);o.vc = _LightColor0 * max(0, dot(ldir, v.normal));//根據(jù)頂點(diǎn)的入射光線和法線角度求該頂點(diǎn)光照return o;}float4 frag(v2f i) :COLOR{float3 litDir = normalize(i.litDir);//獲取點(diǎn)的入射線單位向量float3 spDir = i.spDir; // 獲取該點(diǎn)到投影球體的矢量float spDistance = length(spDir); //該點(diǎn)到球體的距離spDir = normalize(spDir); //該點(diǎn)到投影球體的單位向量float cosV = dot(spDir, litDir);// 該點(diǎn)到球體 與 該點(diǎn)到入射線的夾角float sinV = sin(acos(max(0, cosV)));// 拿到余弦值大于0的角度,求正弦float D = sinV * spDistance; // 解三角形,求對(duì)邊f(xié)loat shadow = step(_spR, D); // 如果對(duì)邊小于半徑返回0,該點(diǎn)為陰影點(diǎn)float c = lerp(1 - _Intensity, 1, shadow);// shadow由0到1return i.vc * c; // 為0的時(shí)候是陰影點(diǎn)}ENDCG}} }

這個(gè)腳本也放在需要接受陰影的對(duì)象上:

using UnityEngine; using System.Collections;public class ReceiveShadow : MonoBehaviour {public GameObject sphere;void Start () {Vector3 pos = sphere.transform.localPosition;GetComponent<Renderer>().sharedMaterial.SetVector("_spPos", new Vector4(pos.x, pos.y, pos.z, 1f));GetComponent<Renderer>().sharedMaterial.SetFloat("_spR", sphere.transform.localScale.x / 2);}}



總結(jié)

以上是生活随笔為你收集整理的9.球体阴影的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 少妇2做爰hd韩国电影 | 久久r精品| 国产一区一一区高清不卡 | 中文字幕在线观看第二页 | 国产主播福利在线 | 伊人激情影院 | 成人区人妻精品一区二 | 国产精品久久久午夜夜伦鲁鲁 | 裸体女视频 | 少妇姐姐 | 国产乱淫片视频 | 日日操影院 | 少妇又色又紧又爽又刺激视频 | 午夜在线视频观看 | 日本黄色三级网站 | 国产麻豆xxxvideo实拍 | 国产免费一区,二区 | 日韩中文字幕在线看 | 国产999精品久久久久久 | 欧美第二区 | 亚洲色图15p | 亚洲AV综合色区国产精品天天 | 日韩精品在线免费 | 亚洲一区二区三区无码久久 | 在线成人av | 日韩欧美精品中文字幕 | 99只有精品| 亚洲美女屁股眼交3 | 久久亚洲精选 | 草草色 | 日韩性生交大片免费看 | 国产在线999 | 色呦呦入口 | 成人做爰视频www网站小优视频 | 亚洲丝袜在线视频 | 成人自拍av | 午夜寂寞少妇 | 波多野结衣先锋影音 | 日本精品三级 | 亚洲精品91天天久久人人 | 浪漫樱花动漫在线观看免费 | 国内免费毛片 | 李宗瑞91在线正在播放 | 国产性猛交xxxⅹ交酡全过程 | 欧洲美女毛片 | 特淫毛片 | 日韩亚洲国产精品 | 一级做a爰片毛片 | 亚洲黄色自拍 | 在线看黄免费 | 波多野结衣免费在线视频 | 国产精品一区在线播放 | 少妇高潮大叫好爽喷水 | 欧美一级电影在线 | 亚洲二区av | 好吊妞视频一区二区三区 | 天天摸天天摸 | 欧美特级视频 | 国产一级一片免费播放 | 天天做天天摸天天爽天天爱 | 日韩av在线观看免费 | 久久久精品99| 亚洲一区 中文字幕 | 国产艳妇疯狂做爰视频 | 成人久久久 | 激情视频网站在线观看 | 涩涩片影院 | 国产精品永久在线观看 | 亚洲精品无码专区 | 中文字幕乱码无码人妻系列蜜桃 | 中文字幕精品视频在线观看 | 黄色在线播放网站 | 国产一区二区视频在线观看免费 | 日韩18p | 青娱乐福利视频 | 国产成人免费av | 欧美高清在线观看 | 国产怡红院 | 麻豆视频一区二区 | 丰满双乳秘书被老板狂揉捏 | 99久久精品无码一区二区毛片 | 激情五月婷婷综合 | 欧美日韩人妻精品一区在线 | 999久久精品 | 欧美精品在线第一页 | 99精品乱码国产在线观看 | 超碰日日夜夜 | 久久久久久网 | 久久久久久久极品内射 | 久久免费精品 | 三级黄片毛片 | 欧美极品第一页 | 国产乱人乱偷精品视频a人人澡 | 天天操天天插天天干 | 天天操天天插天天射 | 久久一本精品 | 午夜激情av | 日日夜夜操视频 | 日韩成人精品视频 |