通常のシーンの頂点法線がワールド空間のテクスチャに色として表示されている場合、エッジを効率的に計算する方法はありますか、それとも数学的に不可能ですか?ビュー空間に法線があればエッジを計算できることは知っていますが、ワールド空間に法線があれば計算できるかどうかはわかりません(過去の方法を模索してきました)時間..)
HLSLでDirectXを使用しています。
通常のシーンの頂点法線がワールド空間のテクスチャに色として表示されている場合、エッジを効率的に計算する方法はありますか、それとも数学的に不可能ですか?ビュー空間に法線があればエッジを計算できることは知っていますが、ワールド空間に法線があれば計算できるかどうかはわかりません(過去の方法を模索してきました)時間..)
HLSLでDirectXを使用しています。
if ( normalA dot normalB > cos( maxAngleDiff )
その後、あなたはエッジを持っています。完璧ではありませんが、他の方法では見つけられないエッジを確実に見つけることができます。
それとも私は問題を誤解していますか?
編集:画像をハイパスフィルタリングするのはどうですか?
画像に含まれる色の数と、それらがどのように結合するかによって異なります。鋭いエッジ、ディザリング、ブレンドなどです。
頂点法線があると言うので、単一の平面で色情報にアクセスできると思います。
私はさまざまな成功を収めた2つの手法を使用しました。
ベクトルを作成するかどうかは、「ワイヤーフレーム」画像の粒度をどの程度細かくするかによって異なります。
セルシェーダーの漫画スタイルのエッジを作成しようとしていると思いますか?
その場合は、ワールドスペースのピクセル位置からカメラの位置を引いたもので、ワールドスペースの内積を単純に作成します。オペランドがすべて同じスペースにある限り、問題はありません。
float edgy = dot(world_space_normal, pixel_world_pos - camera_world_pos);
edgy
が0に近い場合、それはエッジです。
画面スペースサイズのエッジが必要な場合は、別のサーフェスに追加のオブジェクトID情報をレンダリングし、その違いをカラーサーフェスに後処理する必要があります。