立方体采样(samplerCUBE)

作者:追风剑情 发布于:2019-1-2 14:39 分类:Shader

示例

  1. Shader "Custom/CubeTest"
  2. {
  3. Properties
  4. {
  5. _Cube ("Reflection Cubemap", Cube) = "_Skybox" {}
  6. }
  7. SubShader
  8. {
  9. Tags { "RenderType"="Opaque" }
  10. LOD 100
  11.  
  12. Pass
  13. {
  14. CGPROGRAM
  15. #pragma vertex vert
  16. #pragma fragment frag
  17. #include "UnityCG.cginc"
  18.  
  19. struct appdata
  20. {
  21. //模型空间坐标
  22. float4 vertex : POSITION;
  23. //模型空间法线
  24. float3 normal : NORMAL;
  25. };
  26.  
  27. struct v2f
  28. {
  29. //裁剪空间坐标
  30. float4 pos : SV_POSITION;
  31. //天空盒uv坐标
  32. float3 uv : TEXCOORD0;
  33. };
  34.  
  35. sampler2D _MainTex;
  36. float4 _MainTex_ST;
  37. samplerCUBE _Cube;
  38. v2f vert (appdata v)
  39. {
  40. v2f o;
  41. o.pos = UnityObjectToClipPos(v.vertex);
  42. //模型空间中的视图方向
  43. float3 viewDir = normalize(ObjSpaceViewDir(v.vertex));
  44. //根据入射光方向向量 I,和顶点法向量 N,计算反射光方向向量。
  45. //其中 I 和 N 必须被归一化,需要非常注意的是,这个 I 是指向顶点的;
  46. //函数只对三元向量有效
  47. o.uv = reflect(-viewDir, v.normal);
  48. //将uv从模型空间转到视图空间
  49. o.uv = mul(UNITY_MATRIX_MV, float4(o.uv,0));
  50.  
  51. return o;
  52. }
  53. fixed4 frag (v2f i) : SV_Target
  54. {
  55. //在视图空间中对天空盒采样,就可以反射出周围环境
  56. return texCUBE(_Cube, i.uv);
  57. }
  58. ENDCG
  59. }
  60. }
  61. }

效果

1111.png

标签: Shader

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号