投稿記事

ゆたゆたゆた 2022/12/30 03:29

UnityのUnlit Shaderでタイリングされた六角形を作る Hexagonal Tiling

今日一日かけてやっとでけたー

どこもかしこも、shader graphばっかりだったので、
コード書く奴は、↓ここ見ながら、やりました。

vec2とかvec3は、float2,float3に置き換え。
いちばんわからなかったのが、mod関数(剰余演算ですね)
Unityにはfmodがありますけど、なんかバグるので、
ググってたら、
こちらのサイトに行きつきました。

ないなら作っちゃえってことで、
float mod(float x, float y)
{
return x - y floor(x / y);
}
float2 mod(float2 x, float2 y)
{
return x - y
floor(x / y);
}
float3 mod(float3 x, float3 y)
{
return x - y floor(x / y);
}
float4 mod(float4 x, float4 y)
{
return x - y
floor(x / y);
}

コピペする。

あとは、こちらのサイトも参考にしながら、やっと完成したのでした。

あとはこいつに何かしらのアニメーションをつけてやればいいんですね!!
いやー、ハニカム、いいですよね~。やっぱ、ハニカムですよw

気づいたらこんな時間になってましたー。


コードの全文はこちらになります。(なんかブログの表示がおかしいけど・・・HTMLいじれないのかな)
↓↓↓

Shader "Unlit/hexagon2"
{

Properties
{
    _MainTex ("Texture", 2D) = "white" {}
}
SubShader
{
    Tags { "RenderType"="Opaque" }
    LOD 100

    Pass
    {
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        // make fog work
        #pragma multi_compile_fog

        #include "UnityCG.cginc"

        struct appdata
        {
            float4 vertex : POSITION;
            float2 uv : TEXCOORD0;
        };

        struct v2f
        {
            float2 uv : TEXCOORD0;
            UNITY_FOG_COORDS(1)
            float4 vertex : SV_POSITION;
        };

        sampler2D _MainTex;
        float4 _MainTex_ST;

        v2f vert (appdata v)
        {
            v2f o;
            o.vertex = UnityObjectToClipPos(v.vertex);
            o.uv = TRANSFORM_TEX(v.uv, _MainTex);
            UNITY_TRANSFER_FOG(o,o.vertex);
            return o;
        }

        float mod(float x, float y)
        {
            return x - y * floor(x / y);
        }
        float2 mod(float2 x, float2 y)
        {
            return x - y * floor(x / y);
        }
        float3 mod(float3 x, float3 y)
        {
            return x - y * floor(x / y);
        }
        float4 mod(float4 x, float4 y)
        {
            return x - y * floor(x / y);
        }

        float HexDist(float2 p){

            p = abs(p);
            
            float2 c = dot(p,normalize(float2(1.0,1.73)));

            c = max(c, p.x);

            return c;

        }

        float4 HexCoords(float2 uv){
            float2 r = float2(1, 1.73);
            float2 h = r * 0.5;
            float2 a = mod(uv, r) - h;
            float2 b = mod(uv - h, r) - h;

            float2 gv;
            if(length(a) < length(b)){
                gv = a;
            }else{
                gv = b;
            }

            float x = atan2(gv.x, gv.y);
            float y = 0.5 - HexDist(gv);
            float2 id = uv - gv;

            return float4(x, y, id.x, id.y);

        }

        fixed4 frag (v2f i) : SV_Target
        {

            i.uv *= 10;

            float4 hc = HexCoords(i.uv);

            float c = smoothstep(0.05, 0.1 ,hc.y);

            return c;

        }
        ENDCG
    }
}

}

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

ゆたゆたゆた 2022/12/28 17:05

shader実験完遂

一通り実験は終わりました。
UnityでC#をいじっていて、
変数、関数あたりまでわかる人。
多少数学(三角関数あたりの仕組みがわかる人がいい)に知識があり
数学用語の英語スペルがわかる人なら、
案外簡単に、カスタムシェーダー作れますね。
食わず嫌いの人にもおすすめです。
結果がすぐレンダリング画面に現れるので、やってて面白いです。
さて、いったん数学のお勉強にもどりますかね。

https://youtube.com/shorts/DX-zrGrAS-c?feature=share

キャプチャ動画、Youtube shortになっちゃったw

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

ゆたゆたゆた 2022/12/27 23:04

shaderやばwww

数学のお勉強がなかなか手ごわいので、
ちょっとお先にShaderをいじってみましたら、

ふおおおおおおお!!!!
なんだこれw
おもしろwww

ってなったw
Unityでオリジナルゲームを作る10倍くらい面白いじゃないか!!!w

なんてったって、板ポリ一枚で、
結果がすぐ出るくせに、エモい動きもたたった数行のコードでできる。

このレスポンスの速さは、中毒性がありますね。。。

世の中に、shader楽しいよ楽しいよって言ってる人の意味がわかりましたw

母さん、俺、しばし、横道にそれそうです。。。


参考サイト:楽しい!Unityシェーダー お絵描き入門!

メモ:Visual Studioよりも、Visual Studio CodeにShaderlabVSCodeのアドオンを付けて使ったほうがコードが書きやすい。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

ゆたゆたゆた 2022/12/13 23:12

「ゲームアプリの数学 Unityで学ぶ基礎からシェーダーまで」 を読むぞ!の巻

お久しぶりです。
仕事で大きなイベントが終わったので、
Unityをいじっています。

ARで、平面を探すときの、AR planeのシェーダーが気に入らないので、
自分で自作しようかと思っていて、
「ゲームアプリの数学 Unityで学ぶ基礎からシェーダーまで」という本を読んでます。

シェーダーが出てくるのが、9章になるので、まだまだ先が長そうです。
数学のお勉強は、基本C#でやってるみたいなので、
初心者向けではなさそうです。

Unityの操作方法と、ある程度のC#の知識。
数学の知識もちょっとあると、読めそうです。

ただ、Shaderを書くのは、どういった感じなのか未知数なので、
途中から、ドロップアウトしそうな予感はありそうですが・・・

まぁがんばります。

さて、明日は早起きをして、アルゼンチン対クロアチアでも見ますかね!
おやすみなさい。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

ゆたゆたゆた 2022/10/22 23:46

C#のお勉強 ピーコックアンダーソン ラムダ式 非同期プログラミング

お久しぶりです。
年末が近くなると、リアル仕事が大変なので、
更新ができませんです(←いいわけ)

長期間、Unity関連から遠ざかるのはよくないということで、
強○的に、お勉強モードです。
今日は、短時間でお勉強できる本をご紹介します。
勉強しようと思っても、分厚い本なんて読む気しない!!って時におすすめです。
値段も安いので、お財布にもやさしいですしね。

ピーコックアンダーソンさんが書いている、
C#で非同期プログラミングをする方法: Thread,ThreadPoolからTask,async awaitまでを分かりやすく解説

Windowsフォームのテンプレートを使いますが、Unity勉強本以外でも、新鮮味があっていいでしょう。
40ページくらいで、サクッとお勉強できます。気になった部分はネットで検索しましょ。

C#でラムダ式を書く方法1: delegate,Predicate ,Action,Funcを理解してラムダ式を書く方法
こちらは、かなりおすすめな本です、
170ページくらいありますけど。
ラムダ式が生まれる歴史をたどりながら、
暗号みたいなラムダ式(最初は、見ただけで思考停止状態)を、細かく分解しながら、丁寧に説明してくれます。

非同期プログラミングの時もそうですが、この著者の本は、
過去の成り立ちを順を追って書くパターンが多いです。
暗記やコピペではなく、
C#について、深く理解することができるでしょう。

つかれていてやる気のないときこそ、
短編本を読んで、写経です!

また、サボらないように、次に読む本をメモしておきましょう。

Unityで学ぶ ロボットアームの逆運動学 (MRブックス)

なかなか面白そうなタイトルでしょ。
リアル仕事にも関わるものを選びました(←いったいなんの仕事してるんだ)

まとまった休みがとれたら、Unity ARのほうがんばりますですーごめんなさいー。ノシ

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

1 2 3 4 5 6 7

記事のタグから探す

月別アーカイブ

記事を検索