Skip to content

Instantly share code, notes, and snippets.

@chigirits
Last active November 3, 2022 00:58
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chigirits/9db6cffc3b236ed8008142a92560e174 to your computer and use it in GitHub Desktop.
Save chigirits/9db6cffc3b236ed8008142a92560e174 to your computer and use it in GitHub Desktop.
Sunao Shader v1.3.1 にラメエフェクトを追加する差分です(Emissionのパラメータを増やしたOpaque Sparklesというシェーダが実装されます)。デモ: https://twitter.com/chigiri_vrc/status/1279788293932986375

DEPRECATED

新しいバージョンに対応済みのものがリリースされていますので、こちらをお使いください(パッチの適用手順も簡略化されています)。

https://github.com/chigirits/LamePatchForSunaoShader/blob/master/README-LamePatch.md

ラメエフェクト追加パッチ for Sunao Shader

注意事項

  • パッチを適用する前に必ずバックアップをお取りください(gitに慣れている方はコミットを作成してください)。
  • 無保証です。ご自身の責任にてご利用ください。
  • Sunao Shader のオリジナル制作者様は本パッチには無関係です。オリジナル制作者様への問い合わせはしないでください。

パッチの適用手順

GitHub for Unity が使用可能である前提で、以下の手順にてパッチを適用してください(コマンドラインツールに詳しい方は他の方法でインストールした git や patch コマンドでも代用できるので必須ではありません)。

GitHub for Unity が未設定の場合は、こちらの記事 の「4. プロジェクトをGit管理下に置く」までが参考になります。

  1. 本パッチを既に適用済みでアップデートする場合は、プロジェクトから一旦 Assets/Sunao Shader を削除
  2. Sunao Shader 1.3.1 をインポート
  3. 差分ファイル差分適用バッチファイル をダウンロードしてプロジェクトルートに置く(保存ファイル名が異なる場合は要修正)
  4. 差分適用バッチファイル apply-patch.bat を実行し、Successfully patched と表示されることを確認(2回以上行うとエラーとなるため注意)
  5. コマンドプロンプトを閉じ、差分ファイル・差分適用バッチファイルを削除

マテリアルへの適用

マテリアル設定で Sunao Shader/Opaque Sparkles シェーダを選択してください。

パラメータの調整

パラメータ群

Opaque Sparkles シェーダのパラメータには、通常の Opaque シェーダの全パラメータに加え、Emission グループに Sparkles というサブグループが追加されています。

まず全体が発光するように Emission の基本パラメータを設定してください。Emission Color Emission Mask を仮調整し、色や適用範囲を決めます。

Enable Sparkles にチェックを入れるとエフェクトが有効化され、「エミッションが粒子状になる」ような効果がかかります。

以下のパラメータでエフェクトのかかり具合を調整できます。

  • Sparkle Density : 粒子の密度
  • Sparkle Smoothness : 粒子の滑らかさ
  • Sparkle Fineness : 粒子の細かさ
  • Sparkle Angular Blink : 見る角度によってきらめきが変化する速度
  • Sparkle Time Blink : 時間経過によってきらめきが変化する速度

Parameter Map について

たとえば目元と唇で異なるパラメータを適用したい場合、Sparkle Parameter Map に独自規格のマップ画像を指定することで実現できます。特に粒子の細かさはUVの密度によってばらつきやすいため、マップ画像による調整をおすすめします。

ノーマルマップと同じ感覚で、画像のRGBチャンネルにそれぞれ以下のパラメータ値を輝度として塗ってください。輝度 255 がパラメータ値 1.0 に当たり、実際にはこの値をスライダーの設定値に乗算した値が適用されます。

  • R : Sparkle Density
  • G : Sparkle Smoothness
  • B : Sparkle Fineness

画像ファイルのインポート後は、インスペクタで sRGB (Color Texture) をOFFにしてください。ONのままだとガンマ補正によって適用量に偏りが生じる可能性があります。

Tips

  • Emission パラメータの Advanced Settings/Use Lightning にチェックを入れない状態では暗い環境下でも強く発光しますが、本来は反射光であるラメとしては不自然に見えると思います。チェックを入れれば自然な光り方になりますが、一方で暗くて物足りない光り方になりがちです。この場合、Emission Color の HDR Color ウィンドウで Intensity を上げてください。特にポストエフェクトが効いたワールドでの効果が期待できます。

  • Parameter Map画像の作成は以下の手順で行うと分かりやすいと思います。

    1. 部位ごとにレイヤを分けて白く塗る(マスクがフェードして消えるギリギリまで不透明度100%でしっかりと塗る)。
    2. 各レイヤごとにフォルダ分けし、それぞれ個別にレベル補正(またはトーンカーブ)エフェクトレイヤを重ねる。
    3. レベル補正(またはトーンカーブ)の出力最大値をRGBチャンネルごとに目的の値にする(調整するパラメータが百分率で表されていれば目的の値の100倍、輝度であれば255倍と考える)。
    4. 画像をエクスポートし、Unity上で効果を確認する。
    5. 満足の行く結果になるまで 3.~4. を繰り返して調整する。

ライセンス

© 2020 Chigiri Tsutsumi
MIT License

@echo off
%LOCALAPPDATA%\GitHubUnity\git\cmd\git.exe apply --whitespace=nowarn SunaoShader1.3.1-sparkles.diff && echo Successfully patched
pause
diff --git a/Assets/Sunao Shader/Editor/SunaoShaderGUI.cs b/Assets/Sunao Shader/Editor/SunaoShaderGUI.cs
index 94d01173..7ceebbc2 100644
--- a/Assets/Sunao Shader/Editor/SunaoShaderGUI.cs
+++ b/Assets/Sunao Shader/Editor/SunaoShaderGUI.cs
@@ -92,6 +92,13 @@ namespace SunaoShader {
MaterialProperty EmissionLighting;
MaterialProperty IgnoreTexAlphaE;
MaterialProperty EmissionInTheDark;
+ MaterialProperty SparkleEnable;
+ MaterialProperty SparkleParameterMap;
+ MaterialProperty SparkleDensity;
+ MaterialProperty SparkleSmoothness;
+ MaterialProperty SparkleFineness;
+ MaterialProperty SparkleAngularBlink;
+ MaterialProperty SparkleTimeBlink;
MaterialProperty ParallaxEnable;
MaterialProperty ParallaxMap;
@@ -181,6 +188,7 @@ namespace SunaoShader {
bool Shader_Cutout = mat.shader.name.Contains("Cutout");
bool Shader_Transparent = mat.shader.name.Contains("Transparent");
+ bool Shader_Sparkles = mat.shader.name.Contains("Sparkles");
MainTex = FindProperty("_MainTex" , Prop , false);
@@ -261,6 +269,13 @@ namespace SunaoShader {
EmissionLighting = FindProperty("_EmissionLighting" , Prop , false);
IgnoreTexAlphaE = FindProperty("_IgnoreTexAlphaE" , Prop , false);
EmissionInTheDark = FindProperty("_EmissionInTheDark" , Prop , false);
+ SparkleEnable = FindProperty("_SparkleEnable" , Prop , false);
+ SparkleParameterMap=FindProperty("_SparkleParameterMap",Prop , false);
+ SparkleDensity = FindProperty("_SparkleDensity" , Prop , false);
+ SparkleSmoothness = FindProperty("_SparkleSmoothness" , Prop , false);
+ SparkleFineness = FindProperty("_SparkleFineness" , Prop , false);
+ SparkleAngularBlink=FindProperty("_SparkleAngularBlink",Prop , false);
+ SparkleTimeBlink = FindProperty("_SparkleTimeBlink" , Prop , false);
ParallaxEnable = FindProperty("_ParallaxEnable" , Prop , false);
ParallaxMap = FindProperty("_ParallaxMap" , Prop , false);
@@ -623,6 +638,21 @@ namespace SunaoShader {
mat.SetInt("_EmissionFO" , 0);
}
+ if (Shader_Sparkles) {
+ using (new EditorGUILayout.VerticalScope("box")) {
+ GUILayout.Label("Sparkles" , EditorStyles.boldLabel);
+ ME.ShaderProperty(SparkleEnable , new GUIContent("Enable Sparkles"));
+ if (SparkleEnable.floatValue >= 0.5f) {
+ ME.TexturePropertySingleLine(new GUIContent("Sparkle Parameter Map") , SparkleParameterMap);
+ ME.ShaderProperty(SparkleDensity , new GUIContent("Sparkle Density" ));
+ ME.ShaderProperty(SparkleSmoothness , new GUIContent("Sparkle Smoothness" ));
+ ME.ShaderProperty(SparkleFineness , new GUIContent("Sparkle Fineness" ));
+ ME.ShaderProperty(SparkleAngularBlink , new GUIContent("Sparkle Angular Blink"));
+ ME.ShaderProperty(SparkleTimeBlink , new GUIContent("Sparkle Time Blink" ));
+ }
+ }
+ }
+
EditorGUI.indentLevel --;
}
diff --git a/Assets/Sunao Shader/Shader/Cginc/Simplex3D.cginc b/Assets/Sunao Shader/Shader/Cginc/Simplex3D.cginc
new file mode 100644
index 00000000..157dd4c9
--- /dev/null
+++ b/Assets/Sunao Shader/Shader/Cginc/Simplex3D.cginc
@@ -0,0 +1,123 @@
+//
+// Description : Array and textureless GLSL 2D/3D/4D simplex
+// noise functions.
+// Author : Ian McEwan, Ashima Arts.
+// Maintainer : stegu
+// Lastmod : 20110822 (ijm)
+// License : Copyright (C) 2011 Ashima Arts. All rights reserved.
+// Distributed under the MIT License. See below.
+// https://github.com/ashima/webgl-noise
+// https://github.com/stegu/webgl-noise
+//
+// Copyright (C) 2011 by Ashima Arts (Simplex noise)
+// Copyright (C) 2011-2016 by Stefan Gustavson (Classic noise and others)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
+
+float3 mod289(float3 x) {
+ return x - floor(x * (1.0 / 289.0)) * 289.0;
+}
+
+float4 mod289(float4 x) {
+ return x - floor(x * (1.0 / 289.0)) * 289.0;
+}
+
+float4 permute(float4 x) {
+ return mod289(((x*34.0)+1.0)*x);
+}
+
+float4 taylorInvSqrt(float4 r)
+{
+ return 1.79284291400159 - 0.85373472095314 * r;
+}
+
+float snoise(float3 v)
+ {
+ const float2 C = float2(1.0/6.0, 1.0/3.0) ;
+ const float4 D = float4(0.0, 0.5, 1.0, 2.0);
+
+// First corner
+ float3 i = floor(v + dot(v, C.yyy) );
+ float3 x0 = v - i + dot(i, C.xxx) ;
+
+// Other corners
+ float3 g = step(x0.yzx, x0.xyz);
+ float3 l = 1.0 - g;
+ float3 i1 = min( g.xyz, l.zxy );
+ float3 i2 = max( g.xyz, l.zxy );
+
+ // x0 = x0 - 0.0 + 0.0 * C.xxx;
+ // x1 = x0 - i1 + 1.0 * C.xxx;
+ // x2 = x0 - i2 + 2.0 * C.xxx;
+ // x3 = x0 - 1.0 + 3.0 * C.xxx;
+ float3 x1 = x0 - i1 + C.xxx;
+ float3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y
+ float3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y
+
+// Permutations
+ i = mod289(i);
+ float4 p = permute( permute( permute(
+ i.z + float4(0.0, i1.z, i2.z, 1.0 ))
+ + i.y + float4(0.0, i1.y, i2.y, 1.0 ))
+ + i.x + float4(0.0, i1.x, i2.x, 1.0 ));
+
+// Gradients: 7x7 points over a square, mapped onto an octahedron.
+// The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)
+ float n_ = 0.142857142857; // 1.0/7.0
+ float3 ns = n_ * D.wyz - D.xzx;
+
+ float4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7)
+
+ float4 x_ = floor(j * ns.z);
+ float4 y_ = floor(j - 7.0 * x_ ); // mod(j,N)
+
+ float4 x = x_ *ns.x + ns.yyyy;
+ float4 y = y_ *ns.x + ns.yyyy;
+ float4 h = 1.0 - abs(x) - abs(y);
+
+ float4 b0 = float4( x.xy, y.xy );
+ float4 b1 = float4( x.zw, y.zw );
+
+ //float4 s0 = float4(lessThan(b0,0.0))*2.0 - 1.0;
+ //float4 s1 = float4(lessThan(b1,0.0))*2.0 - 1.0;
+ float4 s0 = floor(b0)*2.0 + 1.0;
+ float4 s1 = floor(b1)*2.0 + 1.0;
+ float4 sh = -step(h, float4(0,0,0,0));
+
+ float4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;
+ float4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;
+
+ float3 p0 = float3(a0.xy,h.x);
+ float3 p1 = float3(a0.zw,h.y);
+ float3 p2 = float3(a1.xy,h.z);
+ float3 p3 = float3(a1.zw,h.w);
+
+//Normalise gradients
+ float4 norm = taylorInvSqrt(float4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));
+ p0 *= norm.x;
+ p1 *= norm.y;
+ p2 *= norm.z;
+ p3 *= norm.w;
+
+// Mix final noise value
+ float4 m = max(0.6 - float4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);
+ m = m * m;
+ return 42.0 * dot( m*m, float4( dot(p0,x0), dot(p1,x1), dot(p2,x2), dot(p3,x3) ) );
+ }
\ No newline at end of file
diff --git a/Assets/Sunao Shader/Shader/Cginc/Simplex3D.cginc.meta b/Assets/Sunao Shader/Shader/Cginc/Simplex3D.cginc.meta
new file mode 100644
index 00000000..eb5ee6ee
--- /dev/null
+++ b/Assets/Sunao Shader/Shader/Cginc/Simplex3D.cginc.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: d11df835929a9da48a22ef605f4cc488
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Sunao Shader/Shader/Cginc/SunaoShader_Core.cginc b/Assets/Sunao Shader/Shader/Cginc/SunaoShader_Core.cginc
index 9a60be6b..095b67ac 100644
--- a/Assets/Sunao Shader/Shader/Cginc/SunaoShader_Core.cginc
+++ b/Assets/Sunao Shader/Shader/Cginc/SunaoShader_Core.cginc
@@ -9,6 +9,7 @@
#include "UnityCG.cginc"
#include "AutoLight.cginc"
#include "Lighting.cginc"
+ #include "Simplex3D.cginc"
#include "SunaoShader_Function.cginc"
//-------------------------------------変数宣言
@@ -86,6 +87,13 @@
uniform bool _EmissionLighting;
uniform bool _IgnoreTexAlphaE;
uniform float _EmissionInTheDark;
+ uniform bool _SparkleEnable;
+ uniform sampler2D _SparkleParameterMap;
+ uniform float _SparkleDensity;
+ uniform float _SparkleSmoothness;
+ uniform float _SparkleFineness;
+ uniform float _SparkleAngularBlink;
+ uniform float _SparkleTimeBlink;
//----Parallax Emission
uniform bool _ParallaxEnable;
diff --git a/Assets/Sunao Shader/Shader/Cginc/SunaoShader_Frag.cginc b/Assets/Sunao Shader/Shader/Cginc/SunaoShader_Frag.cginc
index 2f9d3368..9bd0a22c 100644
--- a/Assets/Sunao Shader/Shader/Cginc/SunaoShader_Frag.cginc
+++ b/Assets/Sunao Shader/Shader/Cginc/SunaoShader_Frag.cginc
@@ -192,6 +192,16 @@ float4 frag (VOUT IN) : COLOR {
Emission *= saturate(MonoColor(LightBase));
#endif
}
+
+ #ifdef SPARKLES
+ if (_SparkleEnable) {
+ float4 p = tex2D(_SparkleParameterMap, IN.euv.xy);
+ float SparkleValue = Sparkles(IN.view, float3(IN.euv.xy, 1.0f),
+ _SparkleDensity * p.r, _SparkleSmoothness * p.g, _SparkleFineness * p.b,
+ _SparkleAngularBlink, _SparkleTimeBlink);
+ Emission *= saturate(SparkleValue);
+ }
+ #endif
}
//-------------------------------------視差エミッション
diff --git a/Assets/Sunao Shader/Shader/Cginc/SunaoShader_Function.cginc b/Assets/Sunao Shader/Shader/Cginc/SunaoShader_Function.cginc
index 0f42af7e..658d5b29 100644
--- a/Assets/Sunao Shader/Shader/Cginc/SunaoShader_Function.cginc
+++ b/Assets/Sunao Shader/Shader/Cginc/SunaoShader_Function.cginc
@@ -134,3 +134,40 @@ float RimLightCalc(float3 normal , float3 view , float power , float gradient)
return orim;
}
+
+//-------------------------------------ラメの計算
+// 出典: https://github.com/LasseWestmark/Sparkle-Shader-Unity
+// Modified by Chigiri Tsutsumi
+//
+// MIT License
+//
+// Copyright (c) 2017 LasseWestmark
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+float Sparkles(float3 view, float3 pos, float density, float smoothness, float fineness, float rotationSensitivity, float blinkFrequency) {
+ smoothness *= 0.5f;
+ fineness *= 1000.0f;
+ pos *= fineness;
+ float thr = 1.0f - density;
+ float t = _Time.y * blinkFrequency;
+ float sparkles = snoise(pos + view * rotationSensitivity - t) * snoise(pos + t);
+ sparkles = smoothstep(thr-smoothness, thr+smoothness, sparkles);
+
+ return sparkles;
+}
diff --git a/Assets/Sunao Shader/Shader/Cginc/SunaoShader_OL.cginc b/Assets/Sunao Shader/Shader/Cginc/SunaoShader_OL.cginc
index 4196f8a6..a680ad3a 100644
--- a/Assets/Sunao Shader/Shader/Cginc/SunaoShader_OL.cginc
+++ b/Assets/Sunao Shader/Shader/Cginc/SunaoShader_OL.cginc
@@ -7,6 +7,7 @@
#include "UnityCG.cginc"
#include "AutoLight.cginc"
#include "Lighting.cginc"
+ #include "Simplex3D.cginc"
#include "SunaoShader_Function.cginc"
//-------------------------------------変数宣言
diff --git a/Assets/Sunao Shader/Shader/Sunao_Shader_Cutout.shader b/Assets/Sunao Shader/Shader/Sunao_Shader_Cutout.shader
index 27bab6f2..ae424493 100644
--- a/Assets/Sunao Shader/Shader/Sunao_Shader_Cutout.shader
+++ b/Assets/Sunao Shader/Shader/Sunao_Shader_Cutout.shader
@@ -130,6 +130,15 @@ Shader "Sunao Shader/Cutout" {
_IgnoreTexAlphaE ("Ignore Texture Alpha" , int) = 0
_EmissionInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0
+ [SToggle]
+ _SparkleEnable ("Enable Sparkle" , int) = 0
+ _SparkleParameterMap("Sparkle Parameter Map" , 2D) = "white" {}
+ _SparkleDensity ("Sparkle Density" , Range( 0.0, 1.0)) = 0.6
+ _SparkleSmoothness ("Sparkle Smoothness" , Range( 0.0, 1.0)) = 0.1
+ _SparkleFineness ("Sparkle Fineness" , Range( 0.0, 1.0)) = 0.5
+ _SparkleAngularBlink("Sparkle Angular Blink" , Range( 0.0, 10.0)) = 2.0
+ _SparkleTimeBlink ("Sparkle Time Blink" , Range( 0.0, 10.0)) = 0.0
+
[SToggle]
_ParallaxEnable ("Enable Parallax Emission" , int) = 0
diff --git a/Assets/Sunao Shader/Shader/Sunao_Shader_Cutout_SO.shader b/Assets/Sunao Shader/Shader/Sunao_Shader_Cutout_SO.shader
index 8af2a8ff..5ec16c91 100644
--- a/Assets/Sunao Shader/Shader/Sunao_Shader_Cutout_SO.shader
+++ b/Assets/Sunao Shader/Shader/Sunao_Shader_Cutout_SO.shader
@@ -130,6 +130,15 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" {
_IgnoreTexAlphaE ("Ignore Texture Alpha" , int) = 0
_EmissionInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0
+ [SToggle]
+ _SparkleEnable ("Enable Sparkle" , int) = 0
+ _SparkleParameterMap("Sparkle Parameter Map" , 2D) = "white" {}
+ _SparkleDensity ("Sparkle Density" , Range( 0.0, 1.0)) = 0.6
+ _SparkleSmoothness ("Sparkle Smoothness" , Range( 0.0, 1.0)) = 0.1
+ _SparkleFineness ("Sparkle Fineness" , Range( 0.0, 1.0)) = 0.5
+ _SparkleAngularBlink("Sparkle Angular Blink" , Range( 0.0, 10.0)) = 2.0
+ _SparkleTimeBlink ("Sparkle Time Blink" , Range( 0.0, 10.0)) = 0.0
+
[SToggle]
_ParallaxEnable ("Enable Parallax Emission" , int) = 0
diff --git a/Assets/Sunao Shader/Shader/Sunao_Shader_Opaque.shader b/Assets/Sunao Shader/Shader/Sunao_Shader_Opaque.shader
index 4bd6a066..c4c6986b 100644
--- a/Assets/Sunao Shader/Shader/Sunao_Shader_Opaque.shader
+++ b/Assets/Sunao Shader/Shader/Sunao_Shader_Opaque.shader
@@ -130,6 +130,15 @@ Shader "Sunao Shader/Opaque" {
_IgnoreTexAlphaE ("Ignore Texture Alpha" , int) = 0
_EmissionInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0
+ [SToggle]
+ _SparkleEnable ("Enable Sparkle" , int) = 0
+ _SparkleParameterMap("Sparkle Parameter Map" , 2D) = "white" {}
+ _SparkleDensity ("Sparkle Density" , Range( 0.0, 1.0)) = 0.6
+ _SparkleSmoothness ("Sparkle Smoothness" , Range( 0.0, 1.0)) = 0.1
+ _SparkleFineness ("Sparkle Fineness" , Range( 0.0, 1.0)) = 0.5
+ _SparkleAngularBlink("Sparkle Angular Blink" , Range( 0.0, 10.0)) = 2.0
+ _SparkleTimeBlink ("Sparkle Time Blink" , Range( 0.0, 10.0)) = 0.0
+
[SToggle]
_ParallaxEnable ("Enable Parallax Emission" , int) = 0
diff --git a/Assets/Sunao Shader/Shader/Sunao_Shader_Opaque_SO.shader b/Assets/Sunao Shader/Shader/Sunao_Shader_Opaque_SO.shader
index 0e82118c..07f23552 100644
--- a/Assets/Sunao Shader/Shader/Sunao_Shader_Opaque_SO.shader
+++ b/Assets/Sunao Shader/Shader/Sunao_Shader_Opaque_SO.shader
@@ -130,6 +130,15 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" {
_IgnoreTexAlphaE ("Ignore Texture Alpha" , int) = 0
_EmissionInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0
+ [SToggle]
+ _SparkleEnable ("Enable Sparkle" , int) = 0
+ _SparkleParameterMap("Sparkle Parameter Map" , 2D) = "white" {}
+ _SparkleDensity ("Sparkle Density" , Range( 0.0, 1.0)) = 0.6
+ _SparkleSmoothness ("Sparkle Smoothness" , Range( 0.0, 1.0)) = 0.1
+ _SparkleFineness ("Sparkle Fineness" , Range( 0.0, 1.0)) = 0.5
+ _SparkleAngularBlink("Sparkle Angular Blink" , Range( 0.0, 10.0)) = 2.0
+ _SparkleTimeBlink ("Sparkle Time Blink" , Range( 0.0, 10.0)) = 0.0
+
[SToggle]
_ParallaxEnable ("Enable Parallax Emission" , int) = 0
diff --git a/Assets/Sunao Shader/Shader/Sunao_Shader_Opaque_Sparkles.shader b/Assets/Sunao Shader/Shader/Sunao_Shader_Opaque_Sparkles.shader
new file mode 100644
index 00000000..2574ae87
--- /dev/null
+++ b/Assets/Sunao Shader/Shader/Sunao_Shader_Opaque_Sparkles.shader
@@ -0,0 +1,399 @@
+//--------------------------------------------------------------
+// Sunao Shader Ver 1.3.1
+//
+// Copyright (c) 2020 揚茄子研究所
+// Twitter : @SUNAO_VRC
+// VRChat : SUNAO_
+//
+// This software is released under the MIT License.
+// see LICENSE or http://sunao.orz.hm/agenasulab/ss/LICENSE
+//--------------------------------------------------------------
+
+Shader "Sunao Shader/Opaque Sparkles" {
+
+
+ Properties {
+
+ [NoScaleOffset]
+ _MainTex ("Main Texture" , 2D) = "white" {}
+ _Color ("Color" , Color) = (1,1,1,1)
+ _Alpha ("Alpha" , Range( 0.0, 2.0)) = 1.0
+ _Cutout ("Cutout" , Range( 0.0, 1.0)) = 0.5
+
+ [NoScaleOffset][Normal]
+ _BumpMap ("Normal Map" , 2D) = "bump" {}
+ [NoScaleOffset]
+ _OcclusionMap ("Occlusion" , 2D) = "white" {}
+ [NoScaleOffset]
+ _AlphaMask ("Alpha Mask" , 2D) = "white" {}
+
+ _Bright ("Brightness" , Range( 0.0, 1.0)) = 1.0
+ _BumpScale ("Normal Map Scale" , Range(-2.0, 2.0)) = 1.0
+ _OcclusionStrength ("Occlusion Strength" , Range( 0.0, 1.0)) = 1.0
+ [Enum(SH Light, 0 , Main Texture , 1 , Final Color , 2)]
+ _OcclusionMode ("Occlusion Mode " , int) = 0
+ _AlphaMaskStrength ("Alpha Mask Strength" , Range( 0.0, 1.0)) = 1.0
+ [SToggle]
+ _VertexColor ("Use Vertex Color" , int) = 0
+
+ _UVScrollX ("Scroll X" , Range(-10.0, 10.0)) = 0.0
+ _UVScrollY ("Scroll Y" , Range(-10.0, 10.0)) = 0.0
+ _UVAnimation ("Animation Speed" , Range( 0.0, 10.0)) = 0.0
+ _UVAnimX ("Animation X Size" , int) = 1
+ _UVAnimY ("Animation Y Size" , int) = 1
+ [SToggle]
+ _UVAnimOtherTex ("Animation Other Maps" , int) = 1
+
+ [SToggle]
+ _DecalEnable ("Enable Decal" , int) = 0
+ _DecalTex ("Decal Texture" , 2D) = "white" {}
+ _DecalColor ("Decal Color" , Color) = (1,1,1,1)
+ _DecalPosX ("Position X" , Range( 0.0, 1.0)) = 0.5
+ _DecalPosY ("Position Y" , Range( 0.0, 1.0)) = 0.5
+ _DecalSizeX ("Size X" , Range( 0.0, 1.0)) = 0.5
+ _DecalSizeY ("Size Y" , Range( 0.0, 1.0)) = 0.5
+ _DecalRotation ("Rotation" , Range(-180.0, 180.0)) = 0.0
+
+ [Enum(Override , 0 ,Add , 1 , Multiply , 2 , Multiply(Mono) , 3)]
+ _DecalMode ("Decal Mode" , int) = 0
+ [Enum(Normal , 0 ,Fixed , 1 , Mirror1 , 2 , Mirror2 , 3)]
+ _DecalMirror ("Decal Mirror Mode" , int) = 0
+
+ _DecalScrollX ("Scroll X" , Range(-10.0, 10.0)) = 0.0
+ _DecalScrollY ("Scroll Y" , Range(-10.0, 10.0)) = 0.0
+ _DecalAnimation ("Animation Speed" , Range( 0.0, 10.0)) = 0.0
+ _DecalAnimX ("Animation X Size" , int) = 1
+ _DecalAnimY ("Animation Y Size" , int) = 1
+
+
+ [NoScaleOffset]
+ _ShadeMask ("Shade Mask" , 2D) = "white" {}
+ _Shade ("Shade Strength" , Range( 0.0, 1.0)) = 0.3
+ _ShadeWidth ("Shade Width" , Range( 0.0, 2.0)) = 0.75
+ _ShadeGradient ("Shade Gradient" , Range( 0.0, 2.0)) = 0.75
+ _ShadeColor ("Shade Color" , Range( 0.0, 1.0)) = 0.5
+ _CustomShadeColor ("Custom Shade Color" , Color) = (0,0,0,0)
+
+ [SToggle]
+ _ToonEnable ("Enable Toon Shading" , int) = 0
+ [IntRange]
+ _Toon ("Toon" , Range( 0.0, 9.0)) = 9.0
+ _ToonSharpness ("Toon Sharpness" , Range( 0.0, 1.0)) = 1.0
+
+ [NoScaleOffset]
+ _LightMask ("Lighting Boost Mask" , 2D) = "black" {}
+ _LightBoost ("Lighting Boost" , Range( 1.0, 5.0)) = 3.0
+ _Unlit ("Unlighting" , Range( 0.0, 1.0)) = 0.0
+ [SToggle]
+ _MonochromeLit ("Monochrome Lighting" , int) = 0
+
+
+ [SToggle]
+ _OutLineEnable ("Enable Outline" , int) = 0
+ [NoScaleOffset]
+ _OutLineMask ("Outline Mask" , 2D) = "white" {}
+ _OutLineColor ("Outline Color" , Color) = (0,0,0,1)
+ _OutLineSize ("Outline Scale" , Range( 0.0, 1.0)) = 0.1
+ [SToggle]
+ _OutLineLighthing ("Use Light Color" , int) = 1
+ [SToggle]
+ _OutLineTexColor ("Use Main Texture" , int) = 0
+ [NoScaleOffset]
+ _OutLineTexture ("Outline Texture" , 2D) = "white" {}
+ [SToggle]
+ _OutLineFixScale ("x10 Scale" , int) = 0
+
+
+ [SToggle]
+ _EmissionEnable ("Enable Emission" , int) = 0
+ _EmissionMap ("Emission Mask" , 2D) = "white" {}
+ [HDR]
+ _EmissionColor ("Emission Color" , Color) = (1,1,1)
+ _Emission ("Emission Intensity" , Range( 0.0, 2.0)) = 1.0
+
+ _EmissionMap2 ("2nd Emission Mask" , 2D) = "white" {}
+ [Enum(Add , 0 ,Multiply , 1 , Minus , 2)]
+ _EmissionMode ("Emission Mode" , int) = 0
+ _EmissionBlink ("Blink" , Range( 0.0, 1.0)) = 0.0
+ _EmissionFrequency ("Frequency" , Range( 0.0, 5.0)) = 1.0
+ [Enum(Sine , 0 , Saw , 1 , SawR , 2 , Square , 3)]
+ _EmissionWaveform ("Waveform" , int) = 0
+ _EmissionScrX ("Scroll X" , Range(-10.0, 10.0)) = 0.0
+ _EmissionScrY ("Scroll Y" , Range(-10.0, 10.0)) = 0.0
+ _EmissionAnimation ("Animation Speed" , Range( 0.0, 10.0)) = 0.0
+ _EmissionAnimX ("Animation X Size" , int) = 1
+ _EmissionAnimY ("Animation Y Size" , int) = 1
+
+ [SToggle]
+ _EmissionLighting ("Use Lighting" , int) = 0
+ [SToggle]
+ _IgnoreTexAlphaE ("Ignore Texture Alpha" , int) = 0
+ _EmissionInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0
+
+ [SToggle]
+ _SparkleEnable ("Enable Sparkle" , int) = 0
+ _SparkleParameterMap("Sparkle Parameter Map" , 2D) = "white" {}
+ _SparkleDensity ("Sparkle Density" , Range( 0.0, 1.0)) = 0.6
+ _SparkleSmoothness ("Sparkle Smoothness" , Range( 0.0, 1.0)) = 0.1
+ _SparkleFineness ("Sparkle Fineness" , Range( 0.0, 1.0)) = 0.5
+ _SparkleAngularBlink("Sparkle Angular Blink" , Range( 0.0, 10.0)) = 2.0
+ _SparkleTimeBlink ("Sparkle Time Blink" , Range( 0.0, 10.0)) = 0.0
+
+
+ [SToggle]
+ _ParallaxEnable ("Enable Parallax Emission" , int) = 0
+ _ParallaxMap ("Parallax Emission Mask" , 2D) = "white" {}
+ [HDR]
+ _ParallaxColor ("Emission Color" , Color) = (1,1,1)
+ _ParallaxEmission ("Emission Intensity" , Range( 0.0, 2.0)) = 1.0
+ _ParallaxDepth ("Parallax Depth" , Range( 0.0, 1.0)) = 1.0
+
+ _ParallaxDepthMap ("Parallax Depth Mask" , 2D) = "black" {}
+ _ParallaxMap2 ("2nd Parallax Emission Mask", 2D) = "white" {}
+ [Enum(Add , 0 ,Multiply , 1 , Minus , 2)]
+ _ParallaxMode ("Emission Mode" , int) = 0
+ _ParallaxBlink ("Blink" , Range( 0.0, 1.0)) = 0.0
+ _ParallaxFrequency ("Frequency" , Range( 0.0, 5.0)) = 1.0
+ [Enum(Sine , 0 , Saw , 1 , SawR , 2 , Square , 3)]
+ _ParallaxWaveform ("Waveform" , int) = 0
+ _ParallaxPhaseOfs ("Phase Offset" , Range( 0.0, 1.0)) = 0.0
+ _ParallaxScrX ("Scroll X" , Range(-10.0, 10.0)) = 0.0
+ _ParallaxScrY ("Scroll Y" , Range(-10.0, 10.0)) = 0.0
+ _ParallaxAnimation ("Animation Speed" , Range( 0.0, 10.0)) = 0.0
+ _ParallaxAnimX ("Animation X Size" , int) = 1
+ _ParallaxAnimY ("Animation Y Size" , int) = 1
+
+ [SToggle]
+ _ParallaxLighting ("Use Lighting" , int) = 0
+ [SToggle]
+ _IgnoreTexAlphaPE ("Ignore Texture Alpha" , int) = 0
+ _ParallaxInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0
+
+
+ [SToggle]
+ _ReflectionEnable ("Enable Reflection" , int) = 0
+ [NoScaleOffset]
+ _MetallicGlossMap ("Reflection Mask" , 2D) = "white" {}
+ [NoScaleOffset]
+ _MatCap ("Material Capture" , 2D) = "black" {}
+ _Specular ("Specular Intensity" , Range( 0.0, 2.0)) = 1.0
+ _Metallic ("Metallic" , Range( 0.0, 1.0)) = 0.5
+ _MatCapStrength ("MatCap Strength" , Range( 0.0, 2.0)) = 1.0
+ _GlossMapScale ("Smoothness" , Range( 0.0, 1.0)) = 0.75
+ [SToggle]
+ _SpecularTexColor ("Tex Color for Specular" , int) = 0
+ [SToggle]
+ _MetallicTexColor ("Tex Color for Metallic" , int) = 1
+ [SToggle]
+ _MatCapTexColor ("Tex Color for MatCap" , int) = 0
+ [SToggle]
+ _SpecularSH ("SH Light Specular" , int) = 1
+ [Enum(None , 0 , RealTime , 1 , SH , 2 , Both , 3)]
+ _ReflectLit ("Light Color for Reflection", int) = 0
+ [Enum(None , 0 , RealTime , 1 , SH , 2 , Both , 3)]
+ _MatCapLit ("Light Color for MatCap" , int) = 3
+ [SToggle]
+ _IgnoreTexAlphaR ("Ignore Texture Alpha" , int) = 0
+
+
+ [SToggle]
+ _RimLitEnable ("Enable Rim Light" , int) = 0
+ [NoScaleOffset]
+ _RimLitMask ("Rim Light Mask" , 2D) = "white" {}
+ [HDR]
+ _RimLitColor ("Rim Light Color" , Color) = (1,1,1,1)
+ _RimLit ("Rim Lighting" , Range( 0.0, 2.0)) = 1.0
+ _RimLitGradient ("Rim Light Gradient" , Range( 0.0, 2.0)) = 1.0
+ [SToggle]
+ _RimLitLighthing ("Use Light Color" , int) = 1
+ [SToggle]
+ _RimLitTexColor ("Use Main Texture" , int) = 0
+ [Enum(Add , 0 , Multiply , 1 , Minus , 2)]
+ _RimLitMode ("Rim Light Mode" , int) = 0
+ [SToggle]
+ _IgnoreTexAlphaRL ("Ignore Texture Alpha" , int) = 0
+
+
+ [Enum(Off , 0 , Back , 2 , Front , 1)]
+ _Culling ("Culling" , int) = 0
+
+ [SToggle]
+ _EnableZWrite ("Enable Z Write" , int) = 1
+
+ _DirectionalLight ("Directional Light" , Range( 0.0, 2.0)) = 1.0
+ _SHLight ("SH Light" , Range( 0.0, 2.0)) = 1.0
+ _PointLight ("Point Light" , Range( 0.0, 2.0)) = 1.0
+ [SToggle]
+ _LightLimitter ("Light Limitter" , int) = 1
+
+ [SToggle]
+ _EnableGammaFix ("Enable Gamma Fix" , int) = 0
+ _GammaR ("R Gamma" , Range( 0.0, 5.0)) = 1.0
+ _GammaG ("G Gamma" , Range( 0.0, 5.0)) = 1.0
+ _GammaB ("B Gamma" , Range( 0.0, 5.0)) = 1.0
+
+ [SToggle]
+ _EnableBlightFix ("Enable Brightness Fix" , int) = 0
+ _BlightOutput ("Output Brightness" , Range( 0.0, 5.0)) = 1.0
+ _BlightOffset ("Brightness Offset" , Range(-5.0, 5.0)) = 0.0
+
+ [SToggle]
+ _LimitterEnable ("Enable Limitter" , int) = 0
+ _LimitterMax ("Limitter Max" , Range( 0.0, 5.0)) = 1.0
+
+
+ [HideInInspector] _MainFO ("Main FO" , int) = 0
+ [HideInInspector] _DecalFO ("Decal FO" , int) = 0
+ [HideInInspector] _ShadingFO ("Shading FO" , int) = 0
+ [HideInInspector] _OutlineFO ("Outline FO" , int) = 0
+ [HideInInspector] _EmissionFO ("Emission FO" , int) = 0
+ [HideInInspector] _ParallaxFO ("Parallax FO" , int) = 0
+ [HideInInspector] _ReflectionFO ("Reflection FO" , int) = 0
+ [HideInInspector] _RimLightingFO ("Rim Lighting FO" , int) = 0
+ [HideInInspector] _OtherSettingsFO ("Other Settings FO" , int) = 0
+
+ [HideInInspector] _VersionH ("Version H" , int) = 0
+ [HideInInspector] _VersionM ("Version M" , int) = 0
+ [HideInInspector] _VersionL ("Version L" , int) = 0
+
+ }
+
+
+
+ SubShader {
+
+ LOD 0
+
+ Tags {
+ "IgnoreProjector" = "True"
+ "RenderType" = "Opaque"
+ "Queue" = "Geometry"
+ }
+
+
+ Pass {
+ Tags {
+ "LightMode" = "ForwardBase"
+ }
+
+ Cull [_Culling]
+ ZWrite [_EnableZWrite]
+
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ #pragma multi_compile_fwdbase
+ #pragma multi_compile_fog
+ #pragma target 4.5
+
+ #define PASS_FB
+ #define SPARKLES
+
+ #include "./cginc/SunaoShader_Core.cginc"
+
+ ENDCG
+ }
+
+
+
+ Pass {
+ Tags {
+ "LightMode" = "ForwardBase"
+ }
+
+ Cull Front
+ ZWrite [_EnableZWrite]
+
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ #pragma multi_compile_fwdbase
+ #pragma multi_compile_fog
+ #pragma target 4.5
+
+ #define PASS_OL_FB
+ #define SPARKLES
+
+ #include "./cginc/SunaoShader_OL.cginc"
+
+ ENDCG
+ }
+
+
+ Pass {
+ Tags {
+ "LightMode" = "ForwardAdd"
+ }
+
+ Cull Front
+ Blend One One
+ ZWrite Off
+
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ #pragma multi_compile_fwdadd
+ #pragma multi_compile_fog
+ #pragma target 4.5
+
+ #define PASS_OL_FA
+ #define SPARKLES
+
+ #include "./cginc/SunaoShader_OL.cginc"
+
+ ENDCG
+ }
+
+
+ Pass {
+ Tags {
+ "LightMode" = "ForwardAdd"
+ }
+
+ Cull [_Culling]
+ Blend One One
+ ZWrite Off
+
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ #pragma multi_compile_fwdadd
+ #pragma multi_compile_fog
+ #pragma target 4.5
+
+ #define PASS_FA
+ #define SPARKLES
+
+ #include "./cginc/SunaoShader_Core.cginc"
+
+ ENDCG
+ }
+
+
+
+ Pass {
+ Tags {
+ "LightMode" = "ShadowCaster"
+ }
+
+ ZWrite On
+ ZTest LEqual
+
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ #pragma multi_compile_shadowcaster
+ #pragma target 4.5
+
+ #define PASS_SC
+
+ #include "./cginc/SunaoShader_SC.cginc"
+
+ ENDCG
+ }
+ }
+
+ FallBack "Diffuse"
+
+ CustomEditor "SunaoShader.GUI"
+}
diff --git a/Assets/Sunao Shader/Shader/Sunao_Shader_Opaque_Sparkles.shader.meta b/Assets/Sunao Shader/Shader/Sunao_Shader_Opaque_Sparkles.shader.meta
new file mode 100644
index 00000000..3f9cc0a7
--- /dev/null
+++ b/Assets/Sunao Shader/Shader/Sunao_Shader_Opaque_Sparkles.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: fcc68df85de25004a817314b8377e4fa
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Sunao Shader/Shader/Sunao_Shader_Transparent.shader b/Assets/Sunao Shader/Shader/Sunao_Shader_Transparent.shader
index 05305f72..300cf2a1 100644
--- a/Assets/Sunao Shader/Shader/Sunao_Shader_Transparent.shader
+++ b/Assets/Sunao Shader/Shader/Sunao_Shader_Transparent.shader
@@ -130,6 +130,15 @@ Shader "Sunao Shader/Transparent" {
_IgnoreTexAlphaE ("Ignore Texture Alpha" , int) = 0
_EmissionInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0
+ [SToggle]
+ _SparkleEnable ("Enable Sparkle" , int) = 0
+ _SparkleParameterMap("Sparkle Parameter Map" , 2D) = "white" {}
+ _SparkleDensity ("Sparkle Density" , Range( 0.0, 1.0)) = 0.6
+ _SparkleSmoothness ("Sparkle Smoothness" , Range( 0.0, 1.0)) = 0.1
+ _SparkleFineness ("Sparkle Fineness" , Range( 0.0, 1.0)) = 0.5
+ _SparkleAngularBlink("Sparkle Angular Blink" , Range( 0.0, 10.0)) = 2.0
+ _SparkleTimeBlink ("Sparkle Time Blink" , Range( 0.0, 10.0)) = 0.0
+
[SToggle]
_ParallaxEnable ("Enable Parallax Emission" , int) = 0
diff --git a/Assets/Sunao Shader/Shader/Sunao_Shader_Transparent_SO.shader b/Assets/Sunao Shader/Shader/Sunao_Shader_Transparent_SO.shader
index 49332646..adbf4c06 100644
--- a/Assets/Sunao Shader/Shader/Sunao_Shader_Transparent_SO.shader
+++ b/Assets/Sunao Shader/Shader/Sunao_Shader_Transparent_SO.shader
@@ -130,6 +130,15 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" {
_IgnoreTexAlphaE ("Ignore Texture Alpha" , int) = 0
_EmissionInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0
+ [SToggle]
+ _SparkleEnable ("Enable Sparkle" , int) = 0
+ _SparkleParameterMap("Sparkle Parameter Map" , 2D) = "white" {}
+ _SparkleDensity ("Sparkle Density" , Range( 0.0, 1.0)) = 0.6
+ _SparkleSmoothness ("Sparkle Smoothness" , Range( 0.0, 1.0)) = 0.1
+ _SparkleFineness ("Sparkle Fineness" , Range( 0.0, 1.0)) = 0.5
+ _SparkleAngularBlink("Sparkle Angular Blink" , Range( 0.0, 10.0)) = 2.0
+ _SparkleTimeBlink ("Sparkle Time Blink" , Range( 0.0, 10.0)) = 0.0
+
[SToggle]
_ParallaxEnable ("Enable Parallax Emission" , int) = 0
@chigirits
Copy link
Author

パラメータ群

@chigirits
Copy link
Author

VRChat_1920x1080_2020-07-06_23-23-11 220

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment