コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
最近の更新
未作成ページ
おまかせ表示
ヘルプ
MonoBook
検索
検索
ログイン
個人用ツール
ログイン
ログアウトした編集者のページ
もっと詳しく
投稿記録
トーク
「
Metalでテクスチャから補正せずにサンプリングする
」を編集中
ページ
議論
日本語
閲覧
編集
ソースを編集
履歴表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
編集
ソースを編集
履歴表示
全般
リンク元
関連ページの更新状況
特別ページ
ページ情報
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。
スパム攻撃防止用のチェックです。 けっして、ここには、値の入力は
しない
でください!
[[アップル]]が公式配布している[[Metal]]で[[コンピュートシェーダー]]を叩く超入門的なサンプルプログラム「Hello Compute」というものがある。 *https://developer.apple.com/documentation/metal/hello_compute?language=objc これは[[コンピュートシェーダー]]で[[テクスチャ]]を画像処理して新たなテクスチャを得て、それを[[フラグメントシェーダー]]で描画するという内容であり、いわゆる[[ハロワ]]に相当するものだ。 ただ、これは[[フラグメントシェーダー]]での描画の際に画像補正がかかってしまっている。 [[コンピュートシェーダー]]部分を差し替えて色々試していたのだが、どうやっても画像が歪んでしまい[[バグ]]ってるのかと思ったが、よくよく考えるとフラグメントシェーダーでの描画の際に画像補正がかかってしまっているのだった。 ==HLSLの場合== [[HLSL]]でテクスチャサンプリングの際に画像補正したくない場合は、サンプラーの設定でMinFilterやMagFilterにPOINTを設定し、画像補正を無効化する。 <source> sampler Samp = sampler_state { Texture = <Tex>; MinFilter = POINT; MagFilter = POINT; MipFilter = NONE; AddressU = Clamp; AddressV = Clamp; }; </source> ==Metalの場合== 一方、[[Metal]]のサンプラーにはMinFilterやMgFilterにPOINT相当の設定がなく、サンプラーを経由すると強制的に補正がかかってしまう。このため等倍表示であっても画像がボヤけるという欠陥がある。 <source> constexpr sampler textureSampler(mag_filter::linear, min_filter::linear); const half4 colorSample = colorTexture.sample (textureSampler, in.textureCoordinate); </source> これどうするんだと思ったが[[テクスチャ]]にreadメソッドを発見。サンプラーを経由せずにテクスチャから[[ピクセル]]を読み取ればいいようだ。 <source> ushort w = colorTexture.get_width(); ushort h = colorTexture.get_height(); ushort x = w * in.textureCoordinate.x ; ushort y = h * in.textureCoordinate.y ; const half4 colorSample = colorTexture.read(ushort2(x,y)); </source> Metalではテクスチャのサイズをget_widthやget_heightで簡単に取得できるので[[ソースコード]]の見通しが非常によい。[[HLSL]]や[[GLSL]]ではいちいち[[ユニフォーム変数]]などでテクスチャとは別に渡しておかねばならず非常に面倒だった点が改善されている。 ==関連項目== *[[Xamarin.MacでMetalに対応したMacかを判定する]] *[[MonoGameで直線を描画する]] *[[Metal Shading Language]] *[[プログラマブルシェーダー]] *[[シェーダー]] [[category: macOS]] [[category: iOS]] [[category: Metal]]
編集内容の要約:
MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MonoBook:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の確認用の質問に回答してください (
詳細
):
1たす1は?(全角で入力してください)
キャンセル
編集の仕方
(新しいウィンドウで開きます)
本文の横幅制限を有効化/無効化