怎麼實現女神想要的大眼瘦臉效果?程式設計師追女神有一招事半功倍!
俗話說,亞洲四大邪術,中國的PS術佔大片江山,既不要傷筋動骨,也不要出錢出力,只需要一個軟體,輕鬆搞定!
程式設計師追女神,實現女神想要的要的大眼瘦臉效果,那不是給自己增加了機會!
想要滿足自己女神要求的程式設計師們,我們往下看:
實現瘦臉大眼效果,其本質上都是對影像中某些區域的畫素按照我們設定的規則進行移動,而 OpenGL 的片段著色器天然適合處理畫素(紋素)層面的操作。。
OpenGL 實現大眼效果
為了更好的展示大眼效果,動圖中形變引數設定較大,所以看起來比較誇張。
OpenGL 實現大眼效果,可以參照放大鏡的實現原理,即將紋理上一塊區域取樣後對映到一塊相對較大的區域。
本文所實現的大眼效果進行了簡化,是在以人眼為中心的圓形區域內進行放大,距離圓心越遠,放大的強度越大。
如上圖所示,圓內部為發生形變(放大)的區域,紅點為不發生形變時的取樣點(原始紋理座標),綠點為發生形變時對應的取樣點(紋理座標發生偏移)。
實現眼睛放大效果的著色器指令碼(程式碼中指定了圖片人眼中心座標和人眼半徑):
#version 300 es precision highp float; layout(location = 0) out vec4 outColor; uniform sampler2D s_TextureMap; in vec2 v_texCoord; uniform highp vec2 u_LeftEyeCenterPos;// 左眼中心點 uniform highp vec2 u_RightEyeCenterPos;// 右眼中心點 uniform highp float u_ScaleRatio;//放大係數 uniform highp float u_Radius;// 影響半徑 uniform vec2 u_ImgSize;//圖片解析度 vec2 warpEyes(vec2 centerPos, vec2 curPos, float radius, float scaleRatio) { vec2 result = curPos; vec2 imgCurPos = curPos * u_ImgSize; float d = distance(imgCurPos, centerPos); if (d < radius) { float gamma = 1.0 - scaleRatio * pow(smoothstep(0.0, 1.0, d / radius) - 1.0, 2.0); result = centerPos + gamma * (imgCurPos - centerPos); result = result / u_ImgSize; } return result; } void main() { vec2 newTexCoord = warpEyes(u_LeftEyeCenterPos, v_texCoord, u_Radius, u_ScaleRatio); newTexCoord = warpEyes(u_RightEyeCenterPos, newTexCoord, u_Radius, u_ScaleRatio); outColor = texture(s_TextureMap, newTexCoord); }
OpenGL 實現瘦臉效果
瘦臉效果的實現,是將指定區域內的畫素按照一定的規則進行整體偏移,從而形成一種對臉部擠壓的效果。
如上圖所示,BC表示偏移方向和偏移程度的向量,將圓內的所有畫素按照向量BC的方向進行一定程度的偏移,畫素偏移的強度,和畫素與圓心的距離相關,越靠近圓心強度越大。
為了簡化計算流程,只做原理性展示,我們選取 了3 個人臉部位的關鍵點(如上圖,左右太陽穴和下巴),再由關鍵點計算出來控制點(太陽穴和下巴的連線的中心點),控制點組成上述的 BC 向量。當然你若想快速驗證瘦臉效果,可以直接手動指定。
瘦臉效果的著色器指令碼:
#version 300 es precision highp float; layout(location = 0) out vec4 outColor; in vec2 v_texCoord; uniform sampler2D s_TextureMap; uniform vec2 u_texSize;//影像解析度 uniform vec4 u_preCtrlPoints;//pre控制點 uniform vec4 u_curCtrlPoints;//cur控制點 uniform float u_reshapeRadius;//影響半徑 uniform float u_reshapeRatio;//強度 vec2 face_slender_1(vec2 prePoint, vec2 curPoint, vec2 texCoord, float radius, vec2 texSize) { vec2 pos = texCoord; vec2 newSrc = prePoint * texSize; vec2 newDst = curPoint * texSize; vec2 newTex = texCoord * texSize; float newRadius = radius; float r = distance(newSrc, newTex); if (r < newRadius) { float alpha = 1.0 - r / newRadius; vec2 displacementVec = (newDst - newSrc) * pow(alpha, 2.0) * 0.002 * u_reshapeRatio; pos = (newTex - displacementVec) / texSize; } return pos; } void main() { vec2 leftPreCtrl = u_preCtrlPoints.xy; vec2 rightPreCtrl = u_preCtrlPoints.zw; vec2 leftCurCtrl = u_curCtrlPoints.xy; vec2 rightCurCtrl = u_curCtrlPoints.zw; vec2 newTexCoord = face_slender_1(leftPreCtrl, leftCurCtrl, v_texCoord, u_reshapeRadius, u_texSize); newTexCoord = face_slender_1(rightPreCtrl, rightCurCtrl, newTexCoord, u_reshapeRadius, u_texSize); outColor = texture(s_TextureMap, newTexCoord); }
最後
附上我的Android核心技術學習大綱,獲取更多內容來我的GitHub一起玩耍:
最近不是面試季嘛,再給大家一個福利:
【2017-2019位元組跳動面試真題解析&簡歷製作PDF模板】
針對位元組跳動的面試題整理的,進行了分類,循序漸進,由基礎到深入,由易到簡。
將內容整理成了五個章節、計算機基礎面試題、資料結構和演算法面試題、Java面試題、Android面試題、其他擴充套件面試題、非技術面試題總共五個章節354頁。
每個問題都附上1個標準參考答案,都是反覆摸索消化(真心花了很多時間),覺得寫的比較好的文章作為答案。
來節省大家自己去搜尋的時間,把時間用在正確的東西上。。
還整理了全套簡歷製作、春招困惑、HR面試等問題解析參考建議,都是福利分享給大家。
【2017-2019位元組跳動面試真題解析&簡歷製作PDF模板】領取可以關注我,看個人介紹哦~
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952849/viewspace-2681513/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android:程式碼擼彩妝 2(大眼,瘦臉,大長腿)Android
- 用六西格瑪追女神,有驚喜哦!
- 像追女神一樣學好java~Java
- 《女神異聞錄》是怎麼活到25歲的?
- 遊戲中的“女神”角色都有哪些設計手法?遊戲
- 女神節熱點海報設計指南!一分鐘製作女神節精美海報
- 《女神異聞錄5》角色設計逸話
- 女神節快樂
- 誰說程式設計師沒有520?學學高階程式設計師都是怎麼表白的……程式設計師
- 磨針記2——逝去的女神
- Redis 實戰篇:GEO助我邂逅附近女神Redis
- Java程式設計師工資為什麼這麼高?想要入門Java怎麼辦?Java程式設計師
- 網紅女神是怎麼誕生的-深度學習影象分割技術深度學習
- 巧用程式設計製作搞笑表情包,你和女神只有一組字元的距離!程式設計字元
- 女神節特別企劃
- 以前的程式設計師,現在的程式設計師程式設計師
- VirtualApp實戰之拿到女神朋友圈封面APP
- 單例模式 | 程式設計師都想要探索的 Javascript 設計模單例模式程式設計師JavaScript
- 程式設計師只配加班?有錢有閒的程式設計師都在哪?程式設計師
- 30個Python程式設計師需要知道的程式設計技巧,可以讓你的工作事半功倍!Python程式設計師
- 程式設計師想要月薪2W+?這些能力你有了嗎?程式設計師
- git時光穿梭機--女神的側顏Git
- 想要成為一名程式設計師,怎麼選一個靠譜的IT培訓機構?程式設計師
- 記:那一個臭不要臉的程式設計師程式設計師
- 程式設計師只能吃青春飯?程式設計師該怎麼規劃自己的未來程式設計師
- 程式設計師怎麼高效做筆記程式設計師筆記
- 程式設計師的事,怎麼能叫抄呢?程式設計師
- 程式設計師薪資一萬,“程式設計師鼓勵師”月薪兩萬,你怎麼看?程式設計師
- 程式設計師的工資高,到底程式設計師的工資有多高?程式設計師
- 想要打動HR的心,UX設計師求職信究竟應該怎麼寫?UX求職
- 誰說程式設計師找不到女朋友,程式設計師明明那麼有市場!程式設計師
- 3月8日“女神節”微信小程式直播資料微信小程式
- MSDN 上線新功能|有一位智慧女神喊你聊天!
- 【1024程式設計師節】程式設計師,你學程式設計的初衷是什麼?程式設計師
- 谷歌程式設計師有哪些高效的程式設計習慣?谷歌程式設計師
- 好程式設計師技術分享jQuery實現類似fullpage外掛的全屏滾動效果程式設計師jQuery
- 怎麼從初、中級Java程式設計師過渡到高階Java程式設計師?Java程式設計師
- 為什麼《女神異聞錄5》深刻的影響了時代?