最终效果
思路
- 通过法线方向求平面坐标。x=atan(x/z),y=acos(y/r) r为半径;
- 通过ddx,ddy 偏导数模糊极坐标像素解决极坐标问题。
- 通过反射比较真实的扑捉视觉。
源代码
Shader "QQ/Sky/Latitude"
{
Properties
{
_MainTex("Texture", 2D) = "white" {}
[Enum(UnityEngine.Rendering.CullMode)] _Cull("Cull Mode", float) = 2
[Enum(Off, 0, On, 1)] _Inverse("inverse", float) = 0
}
SubShader
{
Tags { "RenderType" = "Opaque" }
LOD 100
Pass
{
Cull[_Cull]
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct a2v
{
float4 vertex : POSITION;
float3 normal : NORMAL;
};
struct v2f
{
float4 pos : SV_POSITION;
float3 normal : TEXCOORD0;
float3 wPos:TEXCOORD1;
};