以下の記事と同じ原因でした。
NSPersistentContainer
を生成する際に、モデル名を指定します。
このモデル名は xcdatamodeld (CoreDataモデルのファイル名)と同じ名前でなければなりません。
以下の記事と同じ原因でした。
NSPersistentContainer
を生成する際に、モデル名を指定します。
このモデル名は xcdatamodeld (CoreDataモデルのファイル名)と同じ名前でなければなりません。
まんてらさんによるUnityシェーダー講座。内容は Unity上でのシェーダーが初心者の方 向けでした。
「講演内容を見直したい」「もうちょっと詳しく知りたい」人向けです。
著者知識も混ぜつつ書きます。あと、分からなかったらマニュアル読めよ という暴力をふるう プログラマなので、ちまちまマニュアルのリンクを貼ります。
判りやすいのと正確さは別の話ですが、正確さに欠けていたら…マサカリください。私も知りたいです。
Properties
について (次回内容のはずなので書きません)シェーダーは 画面に映像を出力する為の設計図です。本村・クリストファー・純也 さん曰く、料理のレシピに似ている
https://docs.unity3d.com/Manual/class-Material.html
とりあえず、モデルにシェーダーを適用させるために必要なモジュールくらいでOK。
https://docs.unity3d.com/Manual/SL-Reference.html
Unityのシェーダーは「ShaderLab」言語で書かれています。
https://docs.unity3d.com/Manual/SL-Shader.html
ShaderLabはだいたい以下の形をとります。
Shader "MannteraSample" { SubShader { Pass { CGPROGRAM // Cg言語で書く ENDCG } } }
Shader
マテリアルの名前みたいなものです。アッパーキャメルで名前を付けると、大文字部分で区切るみたいです。これスラッシュじゃなかったっけ…? スラッシュで階層区切りができます。大文字区切りなんてないんや
e.g. `ManteraSample/Shader` だと、Materialは「ManteraSample > Shader」で選択可能。
なーんにも書かれていないシェーダーファイルは、「Not supported」から選択できます。
SubShader
https://docs.unity3d.com/Manual/SL-SubShader.html
Pass
をまとめている親玉です。
同じシェーダーでもGraphics の設定やデバイスによって分けたい時などに、SubShader
を複数作って分けることができます。
Pass
レンダーパイプライン内で実行される、シェーダ-プログラム本体です。 ここに、頂点シェーダーやフラグメントシェーダーを書きます。
まんてらさんはCgって言ってたけど、どっちでもいいっぽいです。
https://docs.unity3d.com/Manual/SL-ShaderPrograms.html
補足:
後、CG言語は古い言語だと言うのはUnity側も認識してるから、新しいグラフィクスパイプラインではHLSLに置き換わってるよー。
— まんてら@ゲーム作り系VTuber (@manntera) 2019年3月21日
まぁ、一応今のパイプラインでもHLSLPROGRAMで宣言すれば使える事は使えるけどね。
まじかー 書くならHLSLがよさそうですね。
Pass
内に書かれたマクロ CGPROGRAM
ENDCG
内で書ける、シェーダー言語の一種です。
OpenGL には GLSL 、DirectX には HLSL という言語が使われます。Cg はNVIDIAが開発したシェーダー言語だそうです(でも古いって聞いたゾ)。
まず、Vertex Shader に頂点データを流し込みます。
頂点データは複数の引数で受け取ることもできますが、長くなりがちなので 構造体 として宣言を行い、1つの構造体を引数として受け取る事が多いです。
今回は以下の形で受け取ります。
struct appdata { float4 vertex : POSITION; };
頂点の座標のみを受け取る構造体です。
float4
は4次元ベクトルであることを表します。 3次元ではない理由は、行列計算の都合があるためです。
(この辺のことは座標変換についての別記事を書く予定です)
POSITION
は頂点座標である事を表します。この部分は セマンティクス ( Semantics ) といいます。
セマンティクスは色々ありますが、今回は説明を省きます。
もう一つ、頂点シェーダーが出力し、フラグメントシェーダーが受け取る構造体も宣言します。
正確にはフラグメントシェーダーが受け取るかもしれないデータ、ですが。
struct v2f { float4 pos : SV_POSITION; };
SV_POSITION
は座標変換後の座標が入ります。
一つのシェーダーファイルに2つのシェーダーを収める為、宣言が必要です。
##pragma vertex vert ##pragma fragment frag
公式ドキュメント にある「HLSL snippets」を読むとわかる人は何となくつかめると思います。
##pragma vertex
が頂点シェーダーの宣言 (vert
がエントリーポイント)、##pragma fragment
がフラグメントシェーダーの宣言(frag
がエントリーポイント)です。
ここで、座標変換などを行います。
v2f vert(appdata v) { v2f _out = (v2f)0; _out.pos = UnityObjectToClipPos(v.vertex); return _out; }
appdata
、v2f
は先ほど宣言した構造体です。
UnityObjectToClipPos
関数は、ざっくりいうと3次元の情報である頂点座標を、2D画面につぶしてくれる関数です。
詳しい話は https://docs.unity3d.com/Manual/SL-BuiltinFunctions.html で、どうぞ。
ここで最終的な色を決めます。
float4 frag(v2f _in) : SV_Target { float4 col=(float4)0; col=float4(1,1,1,1); return col; }
SV_Target
は出力するデータを表すセマンティックスです。
今、これは単色(白色)を出力しています。
col=float4(1,1,1,1)
の部分を変えれば色が変わります。
講演はここまででした。
テクスチャ貼ったりするのは次回だそうです。
高DPIの設定だと、ディスプレイの正確なピクセル数が取得できない問題。
そもそもDPIとはなんぞ…ということでまとめる
ふむふむ、要するに解像度のことか。
Windowsの設定にある、ディスプレイの解像度とスケールを変えればいい
SystemParametersInfo
関数を使用していたSystemParametersInfo
を使用して、メインディスプレイの大きさを調べていた。
残念ながらこの関数、何も設定していないと常に 96dpi で計算してしまう…
SetProcessDPIAware
を呼び出すGetDeviceCapsが常にDPI96を返す問題と解決方法について · GitHub
Windows 7 以降の対応をすれば良いので、遠慮なく呼び出した。 manifestファイルはないので一旦無視。
Microsoftの中の人たちが考えている、高解像度ディスプレイの対応について。
Display Scaling in Windows 10 | Ask the Core Team
細かくは読んでない ><
「Basic concepts and terms」にある画像を見てみると色々書いてある。
(画像だから気軽にGoogle先生できない。つらい)
しれっとpixcel/inchって書いてるのに、なぜか160「DPI」と書かれている。良いのか…?
Physical Pixels と Effective Pixels 。ざっくり理解だと
ということらしい。
Vieewing Distanceはとりあえずおいておく。
最後の Scale Factor が、Physical PixelsをEffective Pixelsに変換するための倍率のことのようだ。
Windowsの設定にあるスケールってこれのこと…?だろうか…?
まだ読めてない ><
今は読む必要ないかな…と思って…
大したことしていない…
コード分析のwarningがうるさいので切る · murnana/windows-console-game@adeb0c3 · GitHub hogeって出しただけ · murnana/windows-console-game@84fe0fc · GitHub
5桁のWarningってなんだと思ったら、コード分析結果でした。
コンソールは WriteConsole 関数 辺りを見ればよさそう。文字出力と色と関数が紹介されていたので。
サイト途中放置して始めてしまった。
学生時代、初めて作ったゲームが学校から提供されたライブラリを使用したコンソールゲームでした。
今回はそのライブラリを作る気で進めます。
折角TDDの本読破したので、Visual Studioの単体テストを振り回したい。
Visual Studio Comminity 2017 でプロジェクトを作成。
プロジェクトはとりあえず3部構成。
サンプルプログラム用の単体テストは…とりあえず無視。頭混乱しそうなので。 プロジェクト ファイルを追加します。 · murnana/windows-console-game@f0c8410 · GitHub
WarningLevelをEnableAllWarningsにしたり、出力先を設定したり。
プロジェクト設定の変更 · murnana/windows-console-game@0f8a47b · GitHub
ビルドすると(予想通り)標準ライブラリからWarningが大量に出てくるので、#pragma warning
でそっと閉じる
標準ライブラリでついてくるwarning外し · murnana/windows-console-game@4bbfd80 · GitHub
眠いのでここまで。
描画はコンソールゲーム制作 第1章 描画(4)よりWriteConsoleOutput
を使用する予定。
音はまだわからぬ。XAudioくらいしか知らない…