不能直接獲取?聊聊如何在Shader Graph中獲取深度圖
0x00 前言
在這篇文章中,我們選擇了過去幾周Unity官方社群交流群以及UUG社群群中比較有代表性的幾個問題,總結在這裡和大家進行分享。主要涵蓋了** StreamingAssets、Profiler、Playable、Particle、Spine、Launcher、Scripting 、Shader、 Shader Graph**等領域,其中會著重介紹一下是用一個workaround的方式在ShaderGraph中獲取_CameraDepthTexture。
同時,也歡迎大家加入我們這個討論乾貨的官方技術群,交流看法分享經驗。
Unity官方社群交流群:629212643
0x01 StreamingAssets
Q:請問一下,在Unity2018.2版本里,Unity會將放在StreamingAssets資料夾下的js檔案當作Unity的UnityScript進行編譯,但是我的資源裡面有html頁面,需要用到這個js檔案。
0x02 Profiler
Q:請問使用Profiler.BeginSample去標識程式碼塊或者方法以便在Profiler效能分析工具中檢視對應程式碼塊的資源消耗,在unity2017.4.5版本將標識寫在指令碼的start無法成功標識,然而一樣的程式碼在unity5.4版本卻可以標識出來,但在標識寫在unity2017.4.5的Update方法貌似也可以標識程式碼塊。這個問題是版本問題嗎?在2017.4.5的版本在某些初始化時應該怎樣成功呢?
A:嗯。查了一下2017.3之後的版本修改了profiler資料的傳送方式,從以前的frame base變成了stream base,在第一幀engine向editor傳送的profiler資料丟掉了很多sampler,所以導致沒有顯示出來。
但是beginsample並不是不會在start方法中生效,遊戲啟動之後開啟指令碼的話還是可以看到的。啟動時sampler不全的問題應該在2018上進行了修改。
所以,簡單的說,沒有顯示BeginSample去標識程式碼塊的原因是在2017.3-2017.4時有的sampler被丟棄了。並不是針對某個特定的方法。
0x03 Playable
Q:在使用Playable的api時遇到了一些問題,下面第一張圖是正常的情況。第二張圖是呼叫:
mixerPlayable.SetInputWeight(0, 1.5f);
將input0的權重設定為1.5之後的情況。整個模型被不正確的拉伸,並且動作表現錯誤。
A: playerable mixer的混合是這樣的機制:Weight1 * animation1 + Weight2 * animation2+Weight3 * animation3。因此在權重總和大於1的時候會出現問題。建議對傳入的權重進行歸一化。
0x04 Particle
Q: 我有這樣一個結構,剛剛建立是正常的。
現在把它Disable掉後調轉180度。
再啟用,黃色部分的發射器是正常的,紅色是子粒子,發射錯誤。
0x05 Spine
Q:請問大家,當spine匯出圖片是兩張時,unity編輯器裡播放的動畫就是亂的。有什麼解決辦法嗎?
A: 匯出設定裡的“縮放”選項的scale縮小一下,比如改成0.8,導成一張。(成都-樹林)
Q:還是不夠放到一張,可以再縮小嗎?
A:去掉空白處,圖集小很多。(成都-樹林)
0x06 Launcher
Q:我遇到了啟動介面白屏的問題,5.6.0和2018最新版本都有,而且網上講的辦法都試過了,都不行,試了一整天了。
A:白屏的問題解決了,懷疑是雙顯示卡導致的,Unity的快捷方式右鍵可以選擇執行的顯示卡,我來回切了兩次就可以了。(深圳~劉彥)
A:這種並非卡在loading頁面的白屏,很多時候是DX的驅動不相容造成的,可以嘗試切換執行的顯示卡,也可以嘗試一下在命令列強制使用GL啟動。相關命令列引數可以參考這個文件:https://docs.unity3d.com/Manual/CommandLineArguments.html
Q:無限卡Loading…有人遇到過麼?
A:卡Loading的問題,很多時候可以看看editor.log裡面的相關輸出。
例如下面這樣的log:
No sufficient permissions while processing request "https://core.cloud.unity3d.com/api/login", HTTP error code 401
一般卡loading基本都是網路原因的多。可以試試斷網,進入離線模式。有vpn的話也可以先去掉vpn這些,有的時候是因為vpn的各種奇葩的配置導致的,當然還可以檢視一下防火牆的設定。
還有另外一種情況,例如下面這樣的Log:
此時可以考慮移除"C:\Users\XXXXXX\AppData\LocalLow\Unity"資料夾,因為該資料夾會快取一些登陸資訊,移除之後再嘗試啟動Editor。
0x07 Scripting
Q:剛學u3d不久,想問幾個問題:
1.公司裡是怎麼生成json檔案的
2.資料庫的增刪改,是直接在資料庫檔案裡修改,還是寫程式碼修改,如果公司有自己的伺服器,
怎麼拿到伺服器裡的資料.
求經驗大佬來指教.
A:絕大多數程式語言都有生成json的方法,直接呼叫即可,比如java可以使用gson包。
資料庫操作可以使用第三方框架,java的後臺可以考慮hibernate或者mybatis。安卓端本地的sqlite可以使用content provider來呼叫資料庫。Unity也有自己的使用sqlite的方法,不過我沒用過。(南京-科穆寧)
0x08 Shader Shader Graph
Q:怎樣讓著色器弄成這樣,我翻了文件,沒查到。。。
A:這個是因為Shader檔案中沒有標示出ShaderSnippets,比如你建立一個surface shader,然後把CGPROGRAM去掉,也會是這個效果。
Q:請問如何在ShaderGraph中獲取深度圖,例如_CameraDepthTexture?Unity版本2018.2。
A: 預設情況下,ShaderGraph沒有提供介面直接獲取_CameraDepthTexture的。
但是有一個workaround的方式可以來獲取_CameraDepthTexture。即建立一個新的property,該property的name和reference都叫**_CameraDepthTexture**,與此同時不勾選exposed。
同時,開啟LightWeightRenderPipeline Asset中的深度圖選項。
場景中的Camera要新增一個LightweightAdditionalCameraData組建,並且也開啟深度圖的選項。
之後,我們就可以正常的獲取深度圖_CameraDepthTexture了。
0x09 後記
好了,以上就是想和大家分享的幾個在群裡討論的小問題。
再次,歡迎大家加入我們這個討論乾貨的官方技術群,交流分享呀。
Unity官方社群交流群:629212643
相關推薦
不能直接獲取?聊聊如何在Shader Graph中獲取深度圖
0x00 前言 在這篇文章中,我們選擇了過去幾周Unity官方社群交流群以及UUG社群群中比較有代表性的幾個問題,總結在這裡和大家進行分享。主要涵蓋了** StreamingAssets、Profiler、Playable、Particle、Spine、Launcher、Scripting 、Shader、
直接在input輸入框中獲取時間的簡易寫法
<input type="text" name="fabushi" size="60" value="<%=new SimpleDateFormat("yyyy-MM-dd HH:mm")
實現ApplicationContextAware介面,java(new或者java反射獲取的物件)中獲取spring容器的bean
本文參考了https://blog.csdn.net/bailinbbc/article/details/76446594,其實是拷貝了很多內容: 在Web應用中,Spring容器通常採用宣告式方式配置產生:開發者只要在web.xml中配置一個Listener,該Listener將會負責初始化S
【Shader】黑白灰深度圖渲染
Shader "Custom/RenderDepthMapShader" { Properties { _MainTex ("Texture", 2D) = "whit
給大家分享一個在Android中獲取驗證碼的倒數計時器,已經封裝好了,直接引用就行。
獲取簡訊驗證碼後,倒數一分鐘,重新獲取 package com.example.tsx.mytest; import android.annotation.SuppressLint; import android.app.Activity; import andro
Spring 無法注入靜態變數,直接在靜態方法中獲取bean
模組中想把一個類寫成工具類,提供靜態方法呼叫。但是方法中要用到@autowire注入的dao類變數,它要能在靜態方法中使用的話本身就加上static,但是static變數是無法用@autowire注入的。 @Autowired private AppConfMapper m
tensorflow學習筆記-從checkpoint中獲取graph資訊
程式碼:import tensorflow as tf sess = tf.Session() check_point_path = 'variables' saver = tf.train.import_meta_graph('variables/save_va
使用引數攔截器通過註解直接從JSON物件中獲取資料
場景:當前段傳過來的物件是JSON物件,當時我們使用的時候又是僅僅使用其中的部分欄位值的時候,可以通過實現引數攔截器來為我們自動將JSON中的key值賦值給引數 程式碼 1.自定義註解 @Target(ElementType.PARAMETER) @Retention(Re
JSP中獲取properties文件屬性
util port char rip text request taglib test 文件屬性 <%@ page contentType="text/html;charset=UTF-8" import="java.util.ResourceBundle"%>
C++中獲取時間
運行 結束 stat pan ++ -- spa per () #include<time.h> //獲取時間頭文件//-------------------------------------- clock_t start_time=c
iOS開發中,獲取iOS設備型號
bsp ios設備型號 isequal uid eve ide inf turn res 1、首先要導入頭文件 #import <sys/utsname.h> 2、代碼如下 - (NSString *)getDeviceVersionInfo{
jquery中獲取相鄰元素相關的命令:next()、prev()和siblings()
cnblogs lin Language javascrip prev round blog scrip color jquery裏我們要獲取某個元素的相鄰元素時,可以用到的命令有三個: next():用來獲取下一個同輩元素。 prev():用來獲取上一個同輩元素。 sib
C#中獲取用戶登錄IP地址
sys pen host local ssi esp rdate sre gin using System.Net; //導入命名空間 public string getLocalIP() { string strHostName = D
JS中獲取元素的第二種方法
utf display 獲取 重復執行 ecb sed 文檔 練習 elements 1.靜態方法 var oUl = document.getElementById(‘‘); 2.動態方法 document.getElementsByTagName(‘‘);
struts2在action中獲取request、session、application,並傳遞數據
ride b2c 傳遞 sets content context 分享 https fcm 假設僅僅是通過request、session、application傳遞數據,則不須要獲取對應的對象也能夠傳遞數據,代碼例如以下: ScopeAction.java: packa
Git添加遠程庫和從遠程庫中獲取(新手傻瓜式教學)
聯系 返回 github上 eba ast 要求 nbsp remote git clone 一、 Git添加遠程庫 1、在本地新建一個文件夾,在該文件夾使用Git工具,運行$ git init,將該文件夾變為本地Git倉庫,同時會生成一個隱藏的.git文件夾。 2、
PHP中獲取文件擴展名的N種方法
元素 一個 nbsp n) 函數 查找 網上 only txt PHP中獲取文件擴展名的N種方法 從網上收羅的,基本上就以下這幾種方式: 第1種方法: function get_extension($file) { substr(strrchr($file, ‘.‘),
java中獲取各種上下文路徑的方法小結
取出 resin pri nbsp ont row span user ade 一、獲得都是當前運行文件在服務器上的絕對路徑在servlet裏用:this.getServletContext().getRealPath(); 在struts用:this.getServlet
php獲取數據庫中數據
enc connect local 檢測 highlight blog 創建 utf fetch <?php header("Content-type:text/html;charset=utf-8");//字符編碼設置 $servername = "loc
Java中獲取資源文件的方法總結
tco doget 技術 resource images 磁盤 response linux exception 這裏總結3中方法獲取資源文件的 ServletContext Class ClassLoader 文件的位置 1. ServletC