2016-01-22 71 views
11

在團結,書寫着色器時,像素完美渲染在Unity ShaderLab

是有可能的着色器本身「知道」屏幕分辨率是什麼,確實爲着色器來控制單個物理像素?

我只想着爲「2D」對象編寫着色器(例如使用UI,或者在任何情況下使用正照相機)。 (當然,通常在屏幕上顯示一個物理像素的完美PNG,你只需要一個400像素的PNG,然後你可以安排縮放比例,以便着色器正好繪製到400個物理像素。我想知道是否只是繪製一個着色器,例如物理像素完美的黑色線條 - 它將不得不「知道」確切的物理像素位置。)

轉到對此的賞金。 。

+1

如果你尋找二維解決方案,你可以強制'畫布'像素完美。 –

+0

嗨傑裏,那真的沒有任何連接ñ我在說什麼。謝謝。 – Fattie

回答

6

有一個名爲_ScreenParams的ShaderLab內置值。

_ScreenParams.x是以像素爲單位的屏幕寬度。 _ScreenParams.y是以像素爲單位的屏幕高度。

這裏的文檔頁面:http://docs.unity3d.com/462/Documentation/Manual/SL-BuiltinValues.html

+0

哇 - 這似乎是一個重要的提示 – Fattie

+0

我想這個答案有最具體的具體信息 - 這是很好給新用戶點!如果聽起來對每個人都好,我會點擊這個回覆者的賞金。非常感謝大家,謝謝! – Fattie

5

我不認爲這會發生。您的渲染與當前選定的視頻模式相關聯,並且它甚至不必與您的物理屏幕尺寸相匹配(如果這就是您所說的像素完美)。

最接近你將得到與此是如果您呈現在建議的分辨率爲您的顯示設備,並使用像素着色器陰影整個屏幕。這樣,一個「物理像素」將大致等於一個實際渲染像素。除此之外,將物理(即顯示器)像素與渲染像素相關聯是不可能的。

這是除非,當然,我不知何故誤解你的意圖。

+0

嗨MM。迷人。那麼TBC就沒有辦法從着色器訪問「物理屏幕像素數」。 (我注意到人們經常通過幫助腳本從外部將其作爲一個數字傳入來作爲「詭計」。) – Fattie

+0

問題是物理屏幕與您的實際渲染很少有關圖形卡,這反過來知道視頻模式,而不是實際的顯示大小。 –

+0

Gotchya。這個解釋是一個很大的幫助。看,現在看到我的普通Mac,這個網頁頂部的小橙色方塊「Questions」確實以物理像素完美的方式呈現。 (我只是放大了它,三重檢查了!)和Safari /操作系統在各種屏幕尺寸上都能做到這一點。那裏有什麼交易? – Fattie

4

是有可能的着色器本身「知道」什麼屏幕分辨率爲

我不這麼認爲。

確實爲着色器控制單個物理像素?

是的。像素着色器知道他們正在繪製的像素,還可以對其他像素進行取樣。

+0

Ahhhhhh ..所以當你說他們知道他們在畫什麼像素時......你的意思是這肯定是一個PHYSICAL象素?是對的嗎?抽象層次太多,如果你是非專家,很難理解這些東西。 – Fattie

+0

所以 - 爲了澄清我的問題 - 請確定,您提到的這些「像素着色器」,以澄清,如果在1024屏幕上,當相同的應用程序在1600屏幕上時,實際上會有不同的效果。我在正確的軌道上嗎? – Fattie

+0

的確,「片段着色器」實際上是「像素着色器」的另一個詞 - 它們對於完全相同的事物有兩個不同的術語?或者,我有這一切錯誤?感謝這! – Fattie

2

首先,請定義「像素完美」和「物理像素」。

如果通過物理像素來表示顯示器的像素(顯示器,筆記本電腦顯示器,您可能使用的任何其他硬件),那麼您運氣不好。着色器不在這些操作上,它們按照自己的「抽象像素」進行操作。

您可以這樣思考: 您的圖形渲染爲具有某種可配置分辨率(例如800x600像素)的圖片。你仍然可以在1920x1080全屏顯示器上顯示這張圖片沒有問題,但它看起來很糟糕。這就是實際顯示和顯卡渲染髮生的情況。什麼決定了渲染像素的實際數量是你的視頻模式(在上面的例子中,圖像的分辨率)。物理像素是您顯示器的像素。渲染時,你只能操作第一種。

這導致我們得出一個結論,即當您以與顯示器的原始分辨率完全相同的分辨率渲染圖形時,可以放心地說您已將其渲染爲「物理像素」。

在團結,你可以通過渲染某些外部數據(這可能包括您的當前屏幕分辨率(例如作爲Vector2,看this)。 然而,你最有可能不需要任何的細節,因爲像素着色器已經對像素進行了操作(渲染像素,由當前的視頻模式決定),這意味着如果您使用的分辨率低於您的本地分辨率,則很可能無法渲染單個像素。它幫助。

+0

嗨MM,嗯,在本機編程中獲得顯示器的物理像素並不重要,它在Unity中也始終可用。 HalpPlz說它確實*在ShaderLab中可用*! _ScreenParams.x ...這是個好消息。 – Fattie

+0

順便說一句,在SO上查看所有編輯的問題,只需點擊「編輯...」鏈接(就在問題標籤的右側) – Fattie

+0

我很確定_ScreenParams.x是指定義的分辨率通過視頻模式,不是實際的顯示大小。 –