スポットライト - saitocastel1900/UnityShader GitHub Wiki

  • シリンダーの頂点を変形させて円錐にして、uv座標で色をいい感じにグラデーションすることで作る
  • 三角錐にする仕組みは、頂点を上から下にかけて中心座標から離すように配置することで、三角錐を作る
 // モデル頂点のy座標が 0 ~ 1 の範囲に収まるように座標変換
                float y = (Position.y - BoundingMin.y) / (BoundingMax.y - BoundingMin.y);

                // バウンディングボックスを四角錐に変形
                float2 centerXZ = (BoundingMin.xz + BoundingMax.xz) / 2.0; // 中心座標
                Position.xz = lerp(Position.xz, centerXZ, y); // yが1に近づくにつれて、XZ座標は中心座標に近づく

                // 位置をずらす
                float3 ShiftPosition = Position + TargetPosition;

                // yが0に近づくほど、頂点座標はShiftPositionに近づく
                Output = lerp(ShiftPosition, Position, y);